<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Error Estimate and Adaptivity</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<p>
The basic principles of using error estimates for adaptive refinement
are rather simple. First, you get an error estimate for each cell.
-This error estimate can be interpreted as a
-mesh function describing the desired local mesh width.
-Second, each and every cell is refined according to this estimate.
+Second, each cell is refined according to this estimate, i.e. the
+cells with largest error estimate are refined and those with the least
+one are coarsened.
</p>
<p>
The implementation of <acronym>deal.II</acronym> handles this principle
exactly the same way: First, you call an error estimator that returns
-a vector containing the error estimtates for each cell. Second,
+a vector containing the error estimates for each cell. Second,
you pass this vector on to a function doing the refinement.
</p>
+<p>
+What we have not told yet is that actually constructing an error
+estimator is nontrivial and in particular dependent on the equation
+you are presently solving. Since this is so, the library can not do it
+for you, but can only aid you in doing so.
+</p>
+<p>
+However, the library contains an error estimator for one equation, the
+Laplace equation, which is the standard equation in numerical
+analysis. Since it is so common, an error estimator for it was once
+implemented. It was later moved into the library, since besides being
+an estimator for Laplace's equation, it proved an almost universal
+tool if you want something to refine your grid based on local
+smoothness of your solution. This, in fact, is the principle from
+which the error estimator was constructed: it computes an
+approximation to the second derivative of the solution on each cell,
+and these values can then be used to control refinement of the grid
+for a wide class of equations. Almost all projects using
+<acronym>deal.II</acronym> have used this criterion in its early
+stages, to get a quick way to local mesh refinement, before
+problem-adapted error estimators were written for the particular
+equation later. Since the class has thus proven universal
+functionality, we will discuss it in this section and show how to use
+it to control mesh refinement.
<h2><a name="types">Error Estimators in <acronym>deal.II</acronym></a></h2>
gradient of the solution along the faces of each cell.
In theory this error estimator has quite a number of limitations. These
limitations as well as its implementation are described in
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/numerics/KellyErrorEstimator.html">
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/numerics/KellyErrorEstimator.html">
the documentation for the class <code>KellyErrorEstimator</code></a>.
In daily use, however, this error estimator has shown itself to behave
rather like Hamlet: It is laden with theoretical woes and sorrows,
-but at the end of the day all practical problems are...<font size=-1>gone.</font>
+but at the end of the day all practical problems are... gone.
</p>
<p>
and objects respectively:
</p>
<ul>
- <li>a <code>DoFHandler<dim> dof</code> giving access to the degrees of
+ <li>a <code>DoFHandler<dim> dof_handler</code> giving access to the degrees of
freedom
</li>
<li>a <code>Quadrature<dim-1> quadrature</code> describing the
- quadrature you use for integration
+ quadrature rule to be used for integration on the cell faces
</li>
- <li>a <code>FunctionMap neumann_bc</code> "<Q>which denotes a mapping
+ <li>a <code>FunctionMap neumann_bc</code> which denotes a mapping
between a
boundary indicator and the function denoting the boundary values on
- this part of the boundary</Q>" (quoted from the
- <a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/numerics/KellyErrorEstimator.html">
- class documentation for <code>KellyErrorEstimator</code></a>)
+ this part of the boundary, i.e. for each part of the boundary
+ where Neumann boundary conditions hold (and its respective
+ number) the function with the (inhomogeneous) Neumann values
+ are given; in case you have homogeneous Neumann boundary
+ values, the <code>ZeroFunction</code> is the right function to
+ be passed
</li>
- <li>a coefficient <code>coefficient</code> for tuning the error estimator;
- refer to the <a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/numerics/KellyErrorEstimator.html">
- <code>KellyErrorEstimator</code> class documentation</a>
- </li>
-
- <li>the number of the selected component <code>selected_component</code>
- for finite elements with more than one component
+ <li>in case your problem includes spatially varying coefficients,
+ you may give that as well (but we will not discuss this here,
+ refer to the <a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/numerics/KellyErrorEstimator.html">
+ <code>KellyErrorEstimator</code> class documentation</a>).
</li>
</ul>
<p>
<code>KellyErrorEstimator<dim> error_estimate;</code>
</li>
- <li>Make your error estimator estimate each cell's error:<br>
- <code>void error_estimate::estimate (const DoFHandler<dim>
- &dof, const Quadrature<dim-1>
- &quadrature, const FunctionMap &neumann_bc,
- const Vector<double> &solution,
- Vector<float> &error, const Function<dim>
- *coefficient = 0, const unsigned int selected_component = 0);
+ <li>Make the error estimator estimate each cell's error:<br>
+ <pre>
+ <code>
+ void error_estimate::estimate (const DoFHandler<dim> &dof_handler,
+ const Quadrature<dim-1> &quadrature,
+ const FunctionMap &neumann_bc,
+ const Vector<double> &solution,
+ Vector<float> &error_per_cell,
+ ... // coefficients, etc.
+ );
</code>
+ </pre>
</li>
</ol>
within the <code>Triangulation</code> class.
Refinement and coarsening take place by first flagging the cells
for coarsening or refinement using the functions described below
-and the executing it using
+and then actually executing the refinement using
<code>void execute_coarsening_and_refinement()</code>.
There are several ways of refining or coarsening your grid using
the output from an error estimator:
threshold)</code>
</li>
- <li>Refine a certain fraction <code>top fraction_of_cells</code> with
+ <li>Refine a certain fraction <code>top_fraction_of_cells</code> with
the highest error, at the same time coarsen a certain fraction of
cells <code>bottom_fraction_of_cells</code> with the lowest error.<br>
<code>void refine_and_coarsen_fixed_number(const Vector<number>
<h2><a name="example">Example</a></h2>
-<p>
-To be provided...
-</p>
+The following is a code snippet taken from some example programs:
+<pre>
+<code>
+ // use the Simpson rule for integration on the faces
+ QSimpson<dim-1> face_quadrature;
+ // estimate error with no Neumann boundary conditions
+ KellyErrorEstimator<dim>::estimate (*dof, face_quadrature,
+ KellyErrorEstimator<dim>::FunctionMap(),
+ solution,
+ estimated_error_per_cell);
+
+ // flag some cells for refinement or coarsening
+ tria->refine_and_coarsen_fixed_number (estimated_error_per_cell,
+ 0.3,
+ 0.05);
+ tria->execute_coarsening_and_refinement ();
+</code>
+</pre>
<!-- Page Foot -->
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Boundary conditions</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Condensing the Hanging Nodes</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<p>
The <acronym>deal.II</acronym> class
that has the ability to handle constraint matrices is called
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/dof/ConstraintMatrix.html"><code>ConstraintMatrix</code></a>. It provides all functions
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/dof/ConstraintMatrix.html"><code>ConstraintMatrix</code></a>. It provides all functions
necessary to condense hanging nodes into a matrix structure.
You will have to:
<ol>
Create the constraints on the hanging nodes using
<code>void DoFHandler::make_constraint_matrix(ConstraintMatrix &)</code>.
</li>
-<li>Close the constraints matrix using <code>void DoFHandler<dim>::constraints::close()</code>.
+<li>Close the constraints matrix using <code>void
+ConstraintMatrix::close()</code>. Closing the object performs some
+sorting and reshuffling of data (but you need not care about what
+actually happens).
This method is needed because you might wish to implement additional constraints
(apart from those for the hanging nodes). This would have to be done before
closing the object; therefore you can't have it closed automatically somewhere.
#include <grid/dof_constraints.h>
const unsigned int dim=2; // Work in two dimensions, could also be three
-SparseMatrixStruct<double> sparsity_pattern;
-DoFHandler<dim> dof;
-ConstraintMatrix<dim> hanging_nodes;
-
+SparseMatrixStruct sparsity_pattern;
+DoFHandler<dim> dof_handler;
+ConstraintMatrix hanging_nodes;
hanging_nodes.clear();
-dof.make_sparsity_pattern(sparsity_pattern);
-dof.make_hanging_nodes_constraints(hanging_nodes);
+dof_handler.make_sparsity_pattern(sparsity_pattern);
+dof_handler.make_hanging_nodes_constraints(hanging_nodes);
hanging_nodes.close();
hanging_nodes.condense(matrix_structure);
+</code>
+</pre>
+
+You will later need to condense the matrix itself, and the right hand
+side vector, which is done by the following calls:
+<pre class="example">
+<code>
+
+SparseMatrix<double> system_matrix;
+Vector<double> right_hand_side;
+
+// set up matrix and rhs, possibly apply boundary values, etc
+...
+// now condense the hanging nodes into the matrix:
+hanging_nodes.condense (system_matrix);
+hanging_nodes.condense (right_hand_side);
</code>
</pre>
+
+<h3>Generalizations</h3>
+
+The <code>ConstraintMatrix</code> is more general than only for use
+with hanging nodes. In fact, it is able to represent general
+constraints of the form
+<pre class="example">
+ Cx = 0
+</pre>
+where <code>C</code> is a matrix and is represented by an object of
+type <code>ConstraintMatrix</code>. Constraints due to hanging nodes
+are of this form, since for example using bilinear elements, the
+hanging node on the middle of a line equals the mean value of the two
+neighboring points, i.e. the entries of the respective row in the
+matrix are <code>1, -0.5, -0.5</code>. Since <code>C</code> can be
+scaled arbitrarily, we can chose its diagonal elements to be one, and
+then only need to store the nondiagonal elements. The
+<code>ConstraintMatrix</code> is specialized in storing these
+nondiagonal elements if there are only relatively few such elements
+per row (as is commonly the case for hanging nodes) and if the number
+of constraints itself is relatively low, i.e. much smaller than the
+total size of the matrix. In the latter case, most rows of the matrix
+contain only zeroes, and we only store those lines that constitute
+constraints, which are exactly the lines corresponding to hanging
+nodes.
+
+</p>
+<p>
+
+Some other constraints can be written in the same form as above, with
+a sparse matrix <code>C</code>. In these cases, the
+<code>ConstraintMatrix</code> can be used as well. For example, it has
+been used to perform computations on two grids at the same time, where
+the interpolation between the grids can be represented by some such
+matrix.
+
+
+
+
<!-- Page Foot -->
<hr>
<table class="navbar">
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Degrees of Freedom</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
may have the wrong sign (plus instead of minus or vice versa).
A more detailed description of the problems
encountered in two dimensions can be found in the
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/basic/DataIn.html" target="_top"> <code>DataIn</code> class description</a>.
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/basic/DataIn.html" target="_top"> <code>DataIn</code> class description</a>.
</p>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Hanging Nodes</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<h1>The deal.II Tutorial</h1>
Your browser does not seem to understand frames. A version of this
tutorial that does not use frames can be found at
-<a href="toc.html">http://gaia.iwr.uni-heidelberg.de/~deal/doc/tutorial/00.fe_structure/toc.html</a>.
+<a href="toc.html">http://hermes.iwr.uni-heidelberg.de/~deal/doc/tutorial/00.fe_structure/toc.html</a>.
</noframes>
</html>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Logo</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Matrix and Vector Generation</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<p>
Vector operations are supplied by the class <code><a
-href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/lac/Vector.html">Vector</a></code>.
+href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/lac/Vector.html">Vector</a></code>.
The first and most important operation on a vector is its
initialization using <code>void Vector::reinit(const usigned int N,
const bool fast=false)</code>, which resets the vector's size to
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Matrix Structure</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<body lang="en">
</p>
<hr>
<p>
- <a href="mailto:deal@gaia.iwr.uni-heidelberg.de">Comments on the tutorial</a>
+ <a href="mailto:deal@hermes.iwr.uni-heidelberg.de">Comments on the tutorial</a>
</p>
<!-- Last modified: $Date$ -->
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Grid and Data Output</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
common to both <code>GridOut</code> and <code>DataOut</code>
</li>
- <li><a href="#dataout_limits">Limitations of <code>DataOut</code></a>
- </li>
-
<li><a href="#usage">Usage of <code>DataOut</code></a>
</li>
<h2><a name="parameters">Parameters for grid and data output</a></h2>
-<p>For each and every output format there is a class containing the
+<p>For each output format there is a class containing the
parameters that determine how the output will look. All these classes
have a sensible set of default parameters; you will only have
to bother about setting parameters yourself if your desires are
rather special. We shall commence with a brief description of
-these classes and the most important parameters you can set.
+these classes and the most important parameters you can set. It is
+also worthwhile to look at the online documentation to see whether
+additional flags have been introduced in the meantime.
</p>
<h3>PovrayFlags</h3>
<p>
-This class provides the settings for PoVRay output. At present it
-is empty.
+This class provides the settings for PoVRay output. There are several
+flags implemented presently, but we advise you to consult the online
+documentation since they are rather special and you will probably have
+to set them anyway, if you want high-quality output.
</p>
<h3>GmvFlags</h3>
</p>
-<hr>
-<hr>
-
-<h2><a name="dataout_limits">Limitations of the <code>DataOut</code>
-class</a></h2>
-
-<p>
-Grouping of components to vectors is not implemented, i.e. each
-component must be written independent of the others. It is
-also not possible to write the results of calculations on grids
-with more or less than one degree of freedom per vertex.
-</p>
-
<hr>
<hr>
<p>The limitations of the gnuplot data format have been well described
in the
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/basic/DataOut.html">
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/basic/DataOut.html">
<code>DataOut</code> class description</a>:
</p>
<blockquote>
<p>The limitations mentioned above can to some extent be remedied,
and that is why there is also an option for high quality output.
For how this is done, we quote (again) the
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/basic/DataOut.html">
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/basic/DataOut.html">
<code>DataOut</code> class description</a>:
</p>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Parameter Input</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<code>zeldovich_solver</code> and <code>sunyaev_solver</code>.
Please note that in order to stick to the essentials this example
violates the
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/base/ParameterHandler.html">
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/base/ParameterHandler.html">
recommended style for parameter declaration</a>.
</p>
<span class="example">Example:</span>
We read parameters successively
from three different sources. This example was taken from
-the <a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/base/ParameterHandler.html"><code>ParameterHandler</code> class documentation</a>.
+the <a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/base/ParameterHandler.html"><code>ParameterHandler</code> class documentation</a>.
</p>
<pre class="example">
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: The Problem Matrix and the Right Hand Side</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Solving the Problem</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
iteration method
</li>
</ul>
+Some more specialized solvers may be implemented in the meantime. In
+case you need some such solver, you should take a look at the
+up-to-date online documentation.
<p>
-Besides, there are several utility classes:
+Besides the solver classes, there are several utility classes:
<ul>
<li>
<code><a href="#control">SolverControl</a></code> to
textbook on finite elements, for example in <cite>Braess, Dietrich, Finite
Elements</cite>. The GMRES solver discussed below is rather
special, and if you are going to use it you probably know what
-you ar edoing anyway.
+you are doing anyway.
<p>
We will now begin with the discussion of the <code>SolverControl</code>, the
<code>SolverSelector</code>
and the <code>PreconditionSelector</code> classes, then discuss the solvers
-in more detail. <em>Although we do not demonstrate this method in the
-examples for the different solvers every last solver can be called
-using <code>SolverSelector</code>.</em>
+in more detail.
</p>
<h2><a name="control">Solver Control</a></h2>
</code>
</pre>
+Thus, the iterative solver which with it shall be used will stop after
+either 1000 iterations are performed or the norm of the residual is
+below the given threshold.
+
+
<h2><a name="solvselect">SolverSelector</a></h2>
<p>
parameters. This can be done using <code>PreconditionSelector(const string
preconditioning, const typename Vector::value_type &omega=1.)</code>
where <code>preconditioning</code> denotes the preconditioning method used
-and <code>omega</code> is the damping parameter.
+and <code>omega</code> is the damping parameter if the preconditioner
+you selected uses it.
</p>
<p>
The preconditioning methods currently available using this class are
SolverControl control(1000,1e-6);
VectorMemory<Vector<double> > vectormem;
-SolverBicgstab<SparseMatrix,Vector<double> > solver(control,vectormem);
+SolverBicgstab<SparseMatrix<double>,Vector<double> > solver(control,vectormem);
// Initialize the problem matrices. Well...they shouldn't only be
// initialized but also contain the problem, so this is just an example
// to get the definitions and types and everything right.
-// <em>To make it clear: This code as it is will not do anything because</em>
-// <em>it does not contain any mathematical problem !</em>
SparseMatrix<double> A;
Vector<double> u,f;
SolverControl control(1000,1e-6);
VectorMemory<Vector<double> > vectormem;
-SolverCG<SparseMatrix,Vector<double> > solver(control,vectormem);
+SolverCG<SparseMatrix<double>,Vector<double> > solver(control,vectormem);
// Initialize the problem matrices. Well...they shouldn't only be
// initialized but also contain the problem, so this is just an example
// to get the definitions and types and everything right.
-// <em>To make it clear: This code as it is will not do anything because</em>
-// <em>it does not contain any mathematical problem !</em>
SparseMatrix<double> A;
Vector<double> u,f;
const AdditionalData &data=Additionaldata())
</code>
This constructor needs the maximum number of temporary vectors to be used.
-A number too small can seriously affect its performance. This number is
+A number too small can seriously affect its performance, but a number
+too large will also increase the required computing time. This number is
contained in the <code>AdditionalData</code> structure with a default of 30.
This solver is rather special, and for a detailed explanation you should
-<a href="http://gaia.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/lac/SolverGMRES.html">take a look at the detailed description of the <code>SolverGMRES</code>
+<a href="http://hermes.iwr.uni-heidelberg.de/~deal/doc/auto/kdoc/lac/SolverGMRES.html">take a look at the detailed description of the <code>SolverGMRES</code>
class</a>.
</p>
SolverControl control(1000,1e-6);
VectorMemory<Vector<double> > vectormem;
-SolverCG<SparseMatrix,Vector<double> > solver(control,vectormem);
+SolverGMRES<SparseMatrix<double>,Vector<double> > solver(control,vectormem);
// Initialize the problem matrices. Well...they shouldn't only be
// initialized but also contain the problem, so this is just an example
// to get the definitions and types and everything right.
-// <em>To make it clear: This code as it is will not do anything because</em>
-// <em>it does not contain any mathematical problem !</em>
SparseMatrix<double> A;
Vector<double> u,f;
SolverControl control(1000,1e-6);
VectorMemory<Vector<double> > vectormem;
-SolverCG<SparseMatrix,Vector<double> > solver(control,vectormem);
+SolverRichardson<SparseMatrix<double>,Vector<double> > solver(control,vectormem);
// Initialize the problem matrices. Well...they shouldn't only be
// initialized but also contain the problem, so this is just an example
// to get the definitions and types and everything right.
-// <em>To make it clear: This code as it is will not do anything because</em>
-// <em>it does not contain any mathematical problem !</em>
SparseMatrix<double> A;
Vector<double> u,f;
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<html>
<head>
<!-- deal.II tutorial template
- Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de> 1999
+ Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de> 1999
-->
<title>deal.II tutorial: Chapter title</title>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<link href="../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
<link href="../print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="../audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II">
</head>
<body lang="en">
</table>
<hr>
<address>
-<a href="mailto:schrage@gaia.iwr.uni-heidelberg.de">Jan Schrage</a></address>
+<a href="mailto:schrage@hermes.iwr.uni-heidelberg.de">Jan Schrage</a></address>
<p>
Last modified: $Date$
</p>
<link href="print.css" rel="StyleSheet" title="deal.II Tutorial" media="print">
<link href="audio.css" rel="StyleSheet" title="deal.II Tutorial" media="aural">
<title>The deal.II Tutorial</title>
- <meta name="author" content="Jan Schrage <schrage@gaia.iwr.uni-heidelberg.de>">
+ <meta name="author" content="Jan Schrage <schrage@hermes.iwr.uni-heidelberg.de>">
<meta name="keywords" content="deal.II,deal.II tutorial,deal II"></head>
<body>
<img align=right valign=top width="50%" alt="Deal Logo" src="../pictures/deal100.gif">
which says it all, really. Its purpose is the solution of partial differential
equations on unstructured, locally refined grids with error control. You can find more
information on <acronym>deal.II</acronym> and some examples at
- <a href="http://gaia.iwr.uni-heidelberg.de/~deal/">the
+ <a href="http://hermes.iwr.uni-heidelberg.de/~deal/">the
<acronym>deal.II</acronym> homepage </a>.
<acronym>deal.II</acronym> was written
by the numerics group at the IWR, University of Heidelberg,
addressed to the <acronym>deal.II</acronym> group:
</p>
<address>
- <a href="mailto:deal@gaia.iwr.uni-heidelberg.de">deal@gaia.iwr.uni-heidelberg.de</a>
+ <a href="mailto:deal@hermes.iwr.uni-heidelberg.de">deal@hermes.iwr.uni-heidelberg.de</a>
</address>
<br>
<hr>
<address>
- <a href="mailto:deal@gaia.iwr.uni-heidelberg.de">The deal.II group</a></address>
+ <a href="mailto:deal@hermes.iwr.uni-heidelberg.de">The deal.II group</a></address>
<p>
Last modified: $Date$
</p>