# default target. make sure validate-xrefs is only run after
# everything else (can't appear in the list of dependencies since
# would be run at the same time for parallel makes)
-default: doxygen tutorial development
+default: doxygen development
@$(MAKE) validate-xrefs
all: default
# specific targets
-doxygen: tutorial
+doxygen:
cd doxygen ; rm -f *.tag ; $(MAKE)
-tutorial:
- cd tutorial ; $(MAKE)
-
development:
cd development ; $(MAKE)
@echo "Validating cross-references in HTML files."
$(PERL) $D/common/scripts/validate-xrefs.pl *html
cd doxygen ; $(MAKE) validate-xrefs
- cd tutorial ; $(MAKE) validate-xrefs
cd development ; $(MAKE) validate-xrefs
cd publications ; $(MAKE) validate-xrefs
cd news ; $(MAKE) validate-xrefs
clean:
- cd tutorial ; $(MAKE) clean
cd doxygen ; $(MAKE) clean
cd development ; $(MAKE) clean
cd glossary ; $(MAKE) clean
-.PHONY: default doxygen all autogen-doc autogen-doc-all tutorial clean development validate-xrefs glossary
+.PHONY: default doxygen all autogen-doc autogen-doc-all clean development validate-xrefs glossary
# generate documentation. write the output to a file so as not to hide the
# important message to impatient observers that this process can take quite
# a while
-deal.tag: deal.dox \
+deal.II deal.tag: tutorial \
+ deal.dox \
$D/base/include/*/*.h \
$D/lac/include/*/*.h \
$D/deal.II/include/*/*.h \
headers/*.h \
- ../tutorial/chapter-2.step-by-step/doxygen/*.h
+ tutorial/doxygen/*.h
@echo "=== Generating reference documentation. " \
"This can take several minutes..."
@DOXYGEN@ deal.dox > doxygen.log
-deal.II: deal.tag
+
+tutorial:
+ @cd tutorial ; $(MAKE)
+
+
# validate cross references. there are so many html files in these
# directories that we can just call
clean:
-for i in deal.II/* ; do rm $$i ; done
-rm *.tag
+ @cd tutorial ; $(MAKE) clean
+
-.PHONY: html private deal.II \
+.PHONY: html tutorial private deal.II \
validate-xrefs clean
../../deal.II/include/grid \
../../deal.II/include/multigrid \
../../deal.II/include/numerics \
- ../tutorial/chapter-2.step-by-step/doxygen
+ tutorial/doxygen
HTML_OUTPUT = deal.II
LATEX_OUTPUT = LaTeX/deal.II
--- /dev/null
+# $Id$
+# Create proper HTML output from the different example programs
+
+# include paths and global variables
+include ../../../common/Make.global_options
+
+
+# plain names of those files that we shall treat
+example-names = $(notdir $(shell echo $D/examples/step-? \
+ $D/examples/step-??))
+
+# prefix names for generated intermediate files
+gen-example-names = $(addprefix generated/, $(example-names))
+
+# names of commented program files, plain files, and tocs for the commented
+# and commented and plain versions of the program as well as a combined one
+example-toc-prog = $(addsuffix _toc.prog,$(gen-example-names))
+example-toc-plain = $(addsuffix _toc.plain,$(gen-example-names))
+example-toc = $(addsuffix _toc.combined,$(gen-example-names))
+
+# same for intermediate files for doxygen output
+example-dox-prog = $(addsuffix _prog.dox,$(gen-example-names))
+example-dox-plain = $(addsuffix _plain.dox,$(gen-example-names))
+
+
+# finally a target for combined Doxygen files
+example-doxygen = $(addprefix doxygen/,$(addsuffix .h,$(example-names)))
+
+
+
+
+
+# a makefile command that extracts the base name of a program
+get_basename = $(shell echo $(1) | $(PERL) -pi -e 's/(generated|doxygen).//g; s/\..*//g; s/_(prog|plain|toc.*)//g;')
+
+
+
+all: $(example-doxygen)
+
+
+$(example-toc-prog):
+ @echo ================== Making $@
+ @cat $D/examples/$(call get_basename, $@)/*.cc \
+ | $(PERL) program2toc \
+ > $@
+
+
+$(example-toc-plain):
+ @echo ================== Making $@
+ @cat generated/$(call get_basename, $@)_toc.prog \
+ | $(PERL) -pi -e 's/href=\"\#/href=\"\#plain-/g;' \
+ > $@
+
+
+$(example-toc):
+ @echo ================== Making $@
+ @echo "<table class=\"tutorial\"> <tr> <td>" > $@
+ @echo "<ol>" >> $@
+ @echo " <li> <a href=\"#Intro\" class=bold>Introduction</a>" >> $@
+ @echo " <li> <a href=\"#CommProg\" class=bold>The commented program</a>" >> $@
+ @cat generated/$(call get_basename, $@)_toc.prog >> $@
+ @echo " <li> <a href=\"#Results\" class=bold>Results</a>" >> $@
+ @echo " <li> <a href=\"#PlainProg\" class=bold>The plain program</a>" >> $@
+ @cat generated/$(call get_basename, $@)_toc.plain >> $@
+ @echo "</ol> </td> </tr> </table>" >> $@
+
+
+
+$(example-dox-prog):
+ @echo ================== Making $@
+ @cat $D/examples/$(call get_basename, $@)/*.cc \
+ | $(PERL) program2doxygen \
+ > $@
+
+
+$(example-dox-plain):
+ @echo ================== Making $@
+ @echo " * <a name=\"PlainProg\"></a>" > $@
+ @echo " * <h1> The plain program</h1>" >> $@
+ @echo " * " >> $@
+ @echo " * (If you are looking at a locally installed deal.II version, then the" >> $@
+ @echo " * program can be found at <i>" >> $@
+ @echo " * " $D/examples/$(call get_basename,$@)/*.cc | $(PERL) -pi -e 's!/! /!g;' >> $@
+ @echo " * </i>. Otherwise, this is only" >> $@
+ @echo " * the path on some remote server.)" >> $@
+ @echo " @code" >> $@
+ @cat $D/examples/$(call get_basename, $@)/*.cc | $(PERL) program2doxyplain >> $@
+ @echo " @endcode" >> $@
+
+
+$(example-doxygen):
+ @echo ================== Assembling $@
+ @echo "/**" > $@
+ @echo " * @page $(shell echo $(call get_basename,$@) | $(PERL) -pi -e 's/-/_/g;') \
+ The $(call get_basename,$@) tutorial program" >> $@
+ @echo "@htmlonly" >> $@
+ @cat generated/$(call get_basename, $@)_toc.combined >> $@
+ @echo "@endhtmlonly" >> $@
+ @cat $D/examples/$(call get_basename, $@)/doc/intro.dox >> $@
+ @cat generated/$(call get_basename, $@)_prog.dox >> $@
+ @cat $D/examples/$(call get_basename, $@)/doc/results.dox >> $@
+ @cat generated/$(call get_basename, $@)_plain.dox >> $@
+ @echo " */" >> $@
+
+
+validate-xrefs:
+ @$(PERL) $D/common/scripts/validate-xrefs.pl \
+ $(filter-out head.html foot.html, \
+ $(shell echo *.html))
+
+
+clean:
+ -rm -f $(example-toc) \
+ $(example-toc-prog) $(example-toc-plain) \
+ $(example-dox-prog) $(example-dox-plain) $(example-doxygen)
+ -rm -f Makefile.dep
+
+
+.PHONY: validate-xrefs clean
+
+
+Makefile.dep: $(shell echo $D/examples/*/*.cc) Makefile
+ @echo ================== Generating $@
+ @for i in $(example-names) ; do \
+ echo generated/$${i}_prog.html generated/$${i}_plain.html \
+ generated/$${i}_toc.prog \
+ generated/$${i}_prog.dox generated/$${i}_plain.dox : \
+ `echo $D/examples/$${i}/*.cc` ; \
+ echo generated/$${i}_toc.plain : generated/$${i}_toc.prog ; \
+ echo generated/$${i}_toc.combined : \
+ generated/$${i}_toc.prog generated/$${i}_toc.plain ; \
+ echo doxygen/$$i.h : generated/$${i}_prog.dox generated/$${i}_plain.dox \
+ generated/$${i}_toc.combined \
+ $D/examples/$$i/doc/intro.dox \
+ $D/examples/$$i/doc/results.dox \
+ ; \
+ done \
+ > $@
+
+include Makefile.dep
--- /dev/null
+<!-- Page Foot -->
+<hr>
+<table class="navbar">
+<tr>
+ <td>
+ <a href="index.html" target="_top">Back to the step-by-step index</a>
+ </td>
+</tr>
+</table>
+<hr>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<!-- deal.II tutorial template
+ Wolfgang Bangerth <deal@iwr.uni-heidelberg.de> 1999
+-->
+
+<title>Step-by-Step</title>
+ <link href="../../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
+ <meta name="author" content="the deal.II authors <authors@dealii.org>">
+ <meta name="keywords" content="deal.II,deal.II tutorial,deal II">
+</head>
+
+<!-- Page Body -->
+<body lang="en">
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"
+ "http://www.w3.org/TR/REC-html40/frameset.dtd">
+<html>
+<head>
+<!-- deal.II tutorial template
+ Wolfgang Bangerth <deal@iwr.uni-heidelberg.de> 1999
+-->
+
+<title>Step-by-Step Examples</title>
+ <link href="../../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
+ <meta name="author" content="the deal.II authors <authors@dealii.org>">
+ <meta name="keywords" content="deal.II,deal.II tutorial,deal II">
+</head>
+
+<frameset rows="70,*" border=0>
+
+ <frame name="title" src="title.html" frameborder="1">
+ <frameset cols="120,*" border=0>
+ <frame name="navbar" src="navbar.html" frameborder="0">
+ <frame name="body" src="toc.html" frameborder="0">
+ </frameset>
+
+</frameset>
+
+<noframes>
+<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
+<a href="toc.html">here</a>.
+</noframes>
+
+</html>
+
+
+
+
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"
+ "http://www.w3.org/TR/REC-html40/frameset.dtd">
+<html>
+<head>
+<!-- deal.II tutorial template
+ Wolfgang Bangerth <deal@iwr.uni-heidelberg.de> 1999
+-->
+
+<title>Step-by-Step Examples</title>
+ <link href="../../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
+ <meta name="author" content="the deal.II authors <authors@dealii.org>">
+ <meta name="keywords" content="deal.II,deal.II tutorial,deal II">
+</head>
+<body style="background-image:url(../../pictures/deal.II-text.jpg);" lang="en">
+
+
+ <p>
+ <a href="toc.html" target="body">Overview</a>
+ </p>
+
+ <hr>
+
+ <p>
+ <a href="../../doxygen/deal.II/step_1.html" target="body">Step 1</a><br />
+ <a href="../../doxygen/deal.II/step_2.html" target="body">Step 2</a><br />
+ <a href="../../doxygen/deal.II/step_3.html" target="body">Step 3</a><br />
+ <a href="../../doxygen/deal.II/step_4.html" target="body">Step 4</a><br />
+ <a href="../../doxygen/deal.II/step_5.html" target="body">Step 5</a><br />
+ <a href="../../doxygen/deal.II/step_6.html" target="body">Step 6</a><br />
+ <a href="../../doxygen/deal.II/step_7.html" target="body">Step 7</a><br />
+ <a href="../../doxygen/deal.II/step_8.html" target="body">Step 8</a><br />
+ <a href="../../doxygen/deal.II/step_9.html" target="body">Step 9</a><br />
+ <a href="../../doxygen/deal.II/step_10.html" target="body">Step 10</a><br />
+ <a href="../../doxygen/deal.II/step_11.html" target="body">Step 11</a><br />
+ <a href="../../doxygen/deal.II/step_12.html" target="body">Step 12</a><br />
+ <a href="../../doxygen/deal.II/step_13.html" target="body">Step 13</a><br />
+ <a href="../../doxygen/deal.II/step_14.html" target="body">Step 14</a><br />
+ <a href="../../doxygen/deal.II/step_15.html" target="body">Step 15</a><br />
+ <a href="../../doxygen/deal.II/step_16.html" target="body">Step 16</a><br />
+ <a href="../../doxygen/deal.II/step_17.html" target="body">Step 17</a><br />
+ <a href="../../doxygen/deal.II/step_18.html" target="body">Step 18</a><br />
+ <a href="../../doxygen/deal.II/step_19.html" target="body">Step 19</a><br />
+ <a href="../../doxygen/deal.II/step_20.html" target="body">Step 20</a>
+ </p>
+
+ <hr>
+
+ <p>
+ <a href="../../index.html" target="_top">Back to the deal.II homepage</a>
+ </p>
+
+
+ <hr>
+
+ <p>
+ <a href="../../mail.html" target="body">Comments on the tutorial</a>
+ </p>
+
+<!-- Last modified: $Date$ -->
+
+</body>
+</html>
+
+
+
+
+
--- /dev/null
+# Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006 by Wolfgang Bangerth, University of Heidelberg
+
+
+print " * <a name=\"CommProg\"></a>\n";
+print " * <h1> The commented program</h1>\n";
+
+# ignore comments at the start of the program. this includes subversion
+# tags and copyright notices.
+$_ = <>;
+while ( m!^/[/\*]! || m!\s*\*! || m/^$/ ) {
+ $_ = <>;
+}
+
+# have two states, in which the program can be:
+# comment-mode and program-mode
+$comment_mode = 0;
+$program_mode = 1;
+$state = $comment_mode;
+
+print " * \n";
+
+do {
+ # substitute tabs. also make sure that we don't output comment end
+ # markers that might confuse doxygen
+ s!/\*!/ \*!g;
+ s!\*/!\* /!g;
+
+ s/\t/ /g;
+
+ if (($state == $program_mode) && m!^\s*//!)
+ {
+ $state = $comment_mode;
+ print " * \@endcode\n";
+ print " * \n";
+ }
+ # if in comment mode and no comment line: toggle state.
+ # don't do so, if only a blank line
+ elsif (($state == $comment_mode) && !m!^\s*//! && !m!^\s*$!)
+ {
+ $state = $program_mode;
+ print " * \n";
+ print " * \@code\n";
+ }
+
+ if ($state == $comment_mode)
+ {
+ # in comment mode: first skip leading whitespace and
+ # comment // signs
+ s!\s*//\s*(.*)\n!$1!;
+
+ # second, replace section headers, and generate addressable
+ # anchor
+ if ( /\@sect/ ) {
+ s!\@sect(\d)\{(.*)\}\s*$!<h$1>$2</h$1>!g;
+ $sect_name = $2;
+
+ # for the anchor, use the name of the section but discard
+ # everything except for letters, numbers, and underscores
+ $sect_name =~ s/[^a-zA-Z0-9_]//g;
+
+ $_ = "\n * <a name=\"$sect_name\"></a> \n * $_";
+ }
+
+ # then replace references to other example programs automatically:
+ s!step-(\d+)!\@ref step_\1 \"step-\1\"!g;
+
+ # finally print this line
+ print " * $_\n";
+
+ # if empty line, introduce paragraph break
+ print " * \n" if $_ =~ m!^\s*$!;
+ }
+ else
+ {
+ print " * $_";
+ }
+} while (<>);
+
+if ($state == $program_mode) {
+ print " * \@endcode\n";
+}
+
--- /dev/null
+# Copyright (C) 2006 by Wolfgang Bangerth, Texas A&M University
+
+print "\n";
+
+
+while (<>) {
+ # simply print non-comment lines and let doxygen do all the work.
+ # the only thing we have to make sure is that if we copy /*...*/
+ # comments that doxygen doesn't get confused; do so by simply
+ # adding a space
+ if ( ! m!^\s*//! ) {
+ s!/\*!/ \*!g;
+ s!\*/!\* /!g;
+ print " * $_";
+ } else {
+ # for comments, all we do is replace section headers, and
+ # generate addressable anchors
+ if ( /\@sect/ ) {
+ m!\@sect(\d)\{(.*)\}\s*$!;
+ $sect_name = $2;
+
+ # for the anchor, use the name of the section but discard
+ # everything except for letters, numbers, and underscores
+ $sect_name =~ s/[^a-zA-Z0-9_]//g;
+
+ print "\@endcode\n";
+ print " <a name=\"plain-$sect_name\"></a>\n";
+ print "\@code\n";
+ }
+ }
+}
--- /dev/null
+# Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006 by Wolfgang Bangerth, University of Heidelberg
+
+print "<a name=\"CommProg\"></a>\n";
+print "<h1> The commented program</h1>\n";
+
+# ignore comments at the start of the program. this includes subversion
+# tags and copyright notices.
+$_ = <>;
+while ( m!^/[/\*]! || m!\s*\*! || m/^$/ ) {
+ $_ = <>;
+}
+
+# have two states, in which the program can be:
+# comment-mode and program-mode
+$comment_mode = 0;
+$program_mode = 1;
+$state = $comment_mode;
+
+print "<p>\n";
+
+do {
+ # substitute special characters
+ s/&/&/g;
+ s/</</g;
+ s/>/>/g;
+ s/\t/ /g;
+
+ if (($state == $program_mode) && m!^\s*//!)
+ {
+ $state = $comment_mode;
+ print "</code></pre>\n";
+ print "\n";
+ print "<p>\n";
+ }
+ # if in comment mode and no comment line: toggle state.
+ # don't do so, if only a blank line
+ elsif (($state == $comment_mode) && !m!^\s*//! && !m!^\s*$!)
+ {
+ $state = $program_mode;
+ print "</p>\n";
+ print "\n";
+ print "<pre><code>\n";
+ }
+
+ if ($state == $comment_mode)
+ {
+ # in comment mode: first skip leading whitespace and
+ # comment // signs
+ s!\s*//\s*(.*)\n!$1!;
+
+ # second, replace section headers, and generate addressable
+ # anchor
+ if ( /\@sect/ ) {
+ s!\@sect(\d)\{(.*)\}\s*$!<h$1>$2</h$1>!g;
+ $sect_name = $2;
+
+ # for the anchor, use the name of the section but discard
+ # everything except for letters, numbers, and underscores
+ $sect_name =~ s/[^a-zA-Z0-9_]//g;
+
+ $_ = "\n<a name=\"$sect_name\"></a>" . $_;
+ }
+
+ # replace quotation marks by the appropriate HTML quotation marks
+ s!``!“!g;
+ s!''!”!g;
+
+ # replace double dashes in comments by —
+ s!--!—!g;
+
+ # then replace references to other example programs automatically:
+ s!(step-\d+)!<a href="\1.html" target="body">\1</a>!g;
+
+ # finally print this line
+ print $_, "\n";
+
+ # if empty line, introduce paragraph break
+ print "</p>\n\n<p>" if $_ =~ m!^\s*$!;
+ }
+ else
+ {
+ print " $_";
+ }
+} while (<>);
+
+if ($state == $program_mode) {
+ print "</code></pre>\n";
+}
+
--- /dev/null
+# Copyright (C) 1999, 2000, 2001, 2002, 2006 by Wolfgang Bangerth, University of Heidelberg
+
+print "<p>\n";
+print "<pre><code>\n";
+
+
+while (<>) {
+ # ignore comment lines
+ if ( ! m!^\s*//! ) {
+ # substitute special characters
+ s/&/&/g;
+ s/</</g;
+ s/>/>/g;
+ s/\t/ /g;
+
+ print " $_";
+ } else {
+ # second, replace section headers, and generate addressable
+ # anchor
+ if ( /\@sect/ ) {
+ m!\@sect(\d)\{(.*)\}\s*$!;
+ $sect_name = $2;
+
+ # for the anchor, use the name of the section but discard
+ # everything except for letters, numbers, and underscores
+ $sect_name =~ s/[^a-zA-Z0-9_]//g;
+
+ print "\n<a name=\"plain-$sect_name\"></a>\n";
+ }
+ }
+}
+
+print "</code></pre>\n</p>\n\n";
--- /dev/null
+print " <ul>\n";
+
+$level = 3;
+while (<>) {
+ if ( /\@sect(.)\{(.*)\}/ ) {
+ $newlevel = $1;
+ $text = $2;
+
+ # only allow header levels 3 through 6, since higher ones are
+ # reserved for top-level document headers
+ if (! ($newlevel =~ /[3456]/)) {
+ print STDERR "Only header levels 3 through 6 are allowed.\n";
+ print STDERR "You had $newlevel.\n";
+ die;
+ }
+
+ if ($newlevel > $level) {
+ for ($i=$level; $i<$newlevel; ++$i) {
+ print " <ul>\n";
+ }
+ } elsif ($newlevel < $level) {
+ for ($i=$newlevel; $i<$level; ++$i) {
+ print " </ul>\n";
+ }
+ }
+
+ $reftext = $text;
+
+ # for the anchor, use the name of the section but discard
+ # everything except for letters, numbers, and underscores
+ $reftext =~ s/[^a-zA-Z0-9_]//g;
+
+ # replace quotation marks by the appropriate HTML quotation marks
+ $text =~ s!``!“!g;
+ $text =~ s!''!”!g;
+
+ # replace double dashes in comments by —
+ $text =~ s!--!—!g;
+
+ print " <li><a href=\"#$reftext\">$text</a>\n";
+
+ $level = $newlevel;
+ }
+}
+
+for (; $level>=3; --$level) {
+ print " </ul>\n";
+}
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"
+ "http://www.w3.org/TR/REC-html40/frameset.dtd">
+<html>
+<head>
+<!-- deal.II tutorial template
+ Wolfgang Bangerth <deal@iwr.uni-heidelberg.de> 1999
+-->
+
+<title>Step-by-Step Examples</title>
+ <link href="../../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
+ <meta name="author" content="the deal.II authors <authors@dealii.org>">
+ <meta name="keywords" content="deal.II,deal.II tutorial,deal II">
+</head>
+
+
+<body class="title">
+ <div class="fixedhead">
+ <h1 class="head"> The deal.II tutorial - Step-by-step examples</h1>
+ </div>
+</body>
+</html>
+
+
+
+
+
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"
+ "http://www.w3.org/TR/REC-html40/frameset.dtd">
+<html>
+<head>
+<!-- deal.II tutorial template
+ Wolfgang Bangerth <deal@iwr.uni-heidelberg.de> 1999
+-->
+
+<title>Step-by-Step</title>
+ <link href="../../screen.css" rel="StyleSheet" title="deal.II Tutorial" media="screen">
+ <meta name="author" content="the deal.II authors <authors@dealii.org>">
+ <meta name="keywords" content="deal.II,deal.II tutorial,deal II">
+</head>
+
+<!-- Page Body -->
+<body lang="en">
+
+<h1>Step-by-Step Examples</h1>
+
+<p>
+This tutorial contains a collection of small programs, each more
+or less built atop of the previous ones, which demonstrate various
+aspects of the library. The general layout of each such example is as
+follows:
+<ol>
+ <li> A brief description of what the program does and what is new
+ compared to the previous programs.
+ <li> The program, in commented form.
+ <li> The output of the program, with some comments.
+ <li> Since the program itself usually is a little bit unreadable
+ with all the comments intertwingled, we present the program again,
+ with all comments stripped off, to allow getting an overview of it.
+</ol>
+</p>
+
+<p>
+The programs themselves can be found at a path which is indicated at
+the beginning of the last section of each example. You can compile
+them by typing <strong>make</strong> in the respective directory, and run them
+using <strong>make run</strong>. The latter command also compiles the program if
+that has not already been done. The Makefiles in the different
+directories are based on the small program Makefile template described
+in <a href="../../development/index.html" target="_top">in this section</a>.
+</p>
+
+
+<p>
+At present, the following programs exist:
+</p>
+
+<dl>
+ <dt><a href="../../doxygen/deal.II/step_1.html">Step 1</a></dt>
+ <dd><strong>What's new:</strong> Everything. We create a grid
+ and show a simple way to write it to a file.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_2.html">Step 2</a></dt>
+ <dd><strong>What's new:</strong> Associate degrees of freedom to
+ each vertex and compute the resulting sparsity pattern of
+ matrices. Show that renumbering reduces the bandwidth of
+ matrices significantly, i.e. clusters nonzero entries around the
+ diagonal.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_3.html">Step 3</a></dt>
+ <dd><strong>What's new:</strong> Actually solve Laplace's
+ problem. Object-orientation. Assembling matrices and
+ vectors. Boundary values.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_4.html">Step 4</a></dt>
+ <dd><strong>What's new:</strong> This example is programmed in a
+ way that it is independent of the dimension for which we want to
+ solve Laplace's equation; we will solve the equation in 2D and
+ 3D, although the program is exactly the same. Non-constant right
+ hand side function. Non-homogeneous boundary values.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_5.html">Step 5</a></dt>
+ <dd><strong>What's new:</strong> Computations on successively
+ refined grids. Reading a grid from disk. Some optimizations.
+ Using assertions. Non-constant coefficient in
+ the elliptic operator. Preconditioning the CG solver for the
+ linear system of equations.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_6.html">Step 6</a></dt>
+ <dd><strong>What's new:</strong> Adaptive local
+ refinement. Handling of hanging nodes. Higher order elements.
+ Catching exceptions in the “main” function.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_7.html">Step 7</a></dt>
+ <dd><strong>What's new:</strong> Helmholtz
+ equation. Non-homogeneous Neumann boundary conditions and
+ boundary integrals. Verification of correctness of computed
+ solutions. Computing the error between exact and numerical
+ solution and output of the data in tables. Using counted pointers.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_8.html">Step 8</a></dt>
+ <dd><strong>What's new:</strong> The elastic equations will be
+ solved instead of Laplace's equation. The solution is
+ vector-valued and the equations form a system with as many
+ equations as the dimension of the space in which it is posed.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_9.html">Step 9</a></dt>
+ <dd><strong>What's new:</strong> Transport equation, assembling
+ the system of equations in parallel using multi-threading,
+ implementing a refinement criterion based on a finite difference
+ approximation of the gradient.
+
+ <dt><a href="../../doxygen/deal.II/step_10.html">Step 10</a></dt>
+ <dd><strong>What's new:</strong> Higher order mappings. Do not
+ solve equations, but rather compute the value of pi to high
+ accuracy.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_11.html">Step 11</a></dt>
+ <dd><strong>What's new:</strong> Solving a Laplace problem with
+ higher order mappings. Using strange constraints and
+ intermediate representations of sparsity patterns.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_12.html">Step 12</a></dt>
+ <dd><strong>What's new:</strong> General framework for
+ discontinuous Galerkin methods. Use of Timer class.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_13.html">Step 13</a></dt>
+ <dd><strong>What's new:</strong> Software design questions and
+ how to write a modular, extensible finite element program.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_14.html">Step 14</a></dt>
+ <dd><strong>What's new:</strong> Duality based error estimators,
+ more strategies to write a modular, extensible finite element
+ program.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_15.html">Step 15</a></dt>
+ <dd><strong>What's new:</strong> 1d problems, nonlinear solvers,
+ transfering a solution across mesh refinement.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_16.html">Step 16</a></dt>
+ <dd><strong>What's new:</strong> Based on step 5, a multilevel
+ preconditioner is implemented.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_17.html">Step 17</a></dt>
+ <dd><strong>What's new:</strong> Using PETSc for linear algebra; running
+ in parallel on clusters of computers linked together by MPI.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_18.html">Step 18</a></dt>
+ <dd><strong>What's new:</strong> A time dependent problem; using a much
+ simplified version of implementing elasticity; moving meshes; handling
+ large scale output of parallel programs.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_19.html">Step 19</a></dt>
+ <dd><strong>What's new:</strong> Input parameter file handling. Merging
+ output of a parallel program.
+ </dd>
+
+ <dt><a href="../../doxygen/deal.II/step_20.html">Step 20</a></dt>
+ <dd><strong>What's new:</strong> Mixed finite elements. Using block
+ matrices and block vectors to define more complicated solvers and
+ preconditioners working on the Schur complement.
+ </dd>
+</dl>
+
+<!-- Page Foot -->
+<hr>
+<address>
+<a href="../../mail.html">The deal.II group</a></address>
+</body>
+</html>