From 1f7e12ebfd0ae2ac00df20bc229d44571e489b13 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Mon, 24 Jul 2006 15:20:09 +0000 Subject: [PATCH] Move the tutorial subdirectory into the doxygen/ directory, since that is where the data is consumed git-svn-id: https://svn.dealii.org/trunk@13426 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/doc/Makefile.in | 11 +- deal.II/doc/doxygen/Makefile.in | 15 +- deal.II/doc/doxygen/deal.dox | 2 +- deal.II/doc/doxygen/tutorial/Makefile | 140 ++++++++++++++ deal.II/doc/doxygen/tutorial/foot.html | 12 ++ deal.II/doc/doxygen/tutorial/head.html | 17 ++ deal.II/doc/doxygen/tutorial/index.html | 37 ++++ deal.II/doc/doxygen/tutorial/navbar.html | 67 +++++++ deal.II/doc/doxygen/tutorial/program2doxygen | 82 ++++++++ .../doc/doxygen/tutorial/program2doxyplain | 31 +++ deal.II/doc/doxygen/tutorial/program2html | 89 +++++++++ deal.II/doc/doxygen/tutorial/program2plain | 33 ++++ deal.II/doc/doxygen/tutorial/program2toc | 48 +++++ deal.II/doc/doxygen/tutorial/title.html | 27 +++ deal.II/doc/doxygen/tutorial/toc.html | 180 ++++++++++++++++++ 15 files changed, 778 insertions(+), 13 deletions(-) create mode 100644 deal.II/doc/doxygen/tutorial/Makefile create mode 100644 deal.II/doc/doxygen/tutorial/foot.html create mode 100644 deal.II/doc/doxygen/tutorial/head.html create mode 100644 deal.II/doc/doxygen/tutorial/index.html create mode 100644 deal.II/doc/doxygen/tutorial/navbar.html create mode 100644 deal.II/doc/doxygen/tutorial/program2doxygen create mode 100644 deal.II/doc/doxygen/tutorial/program2doxyplain create mode 100644 deal.II/doc/doxygen/tutorial/program2html create mode 100644 deal.II/doc/doxygen/tutorial/program2plain create mode 100644 deal.II/doc/doxygen/tutorial/program2toc create mode 100644 deal.II/doc/doxygen/tutorial/title.html create mode 100644 deal.II/doc/doxygen/tutorial/toc.html diff --git a/deal.II/doc/Makefile.in b/deal.II/doc/Makefile.in index 2eb5499064..28b8f290d8 100644 --- a/deal.II/doc/Makefile.in +++ b/deal.II/doc/Makefile.in @@ -10,19 +10,16 @@ include $D/common/Make.global_options # 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) @@ -34,7 +31,6 @@ validate-xrefs: @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 @@ -42,10 +38,9 @@ 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 diff --git a/deal.II/doc/doxygen/Makefile.in b/deal.II/doc/doxygen/Makefile.in index bd47cd3e95..21320bf4c2 100644 --- a/deal.II/doc/doxygen/Makefile.in +++ b/deal.II/doc/doxygen/Makefile.in @@ -20,17 +20,22 @@ private: # 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 @@ -49,6 +54,8 @@ validate-xrefs: 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 diff --git a/deal.II/doc/doxygen/deal.dox b/deal.II/doc/doxygen/deal.dox index 3eb9ec97cc..a99c3aa33b 100644 --- a/deal.II/doc/doxygen/deal.dox +++ b/deal.II/doc/doxygen/deal.dox @@ -10,7 +10,7 @@ INPUT = headers/ \ ../../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 diff --git a/deal.II/doc/doxygen/tutorial/Makefile b/deal.II/doc/doxygen/tutorial/Makefile new file mode 100644 index 0000000000..3bae031185 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/Makefile @@ -0,0 +1,140 @@ +# $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 "
" > $@ + @echo "
    " >> $@ + @echo "
  1. Introduction" >> $@ + @echo "
  2. The commented program" >> $@ + @cat generated/$(call get_basename, $@)_toc.prog >> $@ + @echo "
  3. Results" >> $@ + @echo "
  4. The plain program" >> $@ + @cat generated/$(call get_basename, $@)_toc.plain >> $@ + @echo "
" >> $@ + + + +$(example-dox-prog): + @echo ================== Making $@ + @cat $D/examples/$(call get_basename, $@)/*.cc \ + | $(PERL) program2doxygen \ + > $@ + + +$(example-dox-plain): + @echo ================== Making $@ + @echo " * " > $@ + @echo " *

The plain program

" >> $@ + @echo " * " >> $@ + @echo " * (If you are looking at a locally installed deal.II version, then the" >> $@ + @echo " * program can be found at " >> $@ + @echo " * " $D/examples/$(call get_basename,$@)/*.cc | $(PERL) -pi -e 's!/! /!g;' >> $@ + @echo " * . 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 diff --git a/deal.II/doc/doxygen/tutorial/foot.html b/deal.II/doc/doxygen/tutorial/foot.html new file mode 100644 index 0000000000..752a473868 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/foot.html @@ -0,0 +1,12 @@ + +
+ + + + + +
+ + diff --git a/deal.II/doc/doxygen/tutorial/head.html b/deal.II/doc/doxygen/tutorial/head.html new file mode 100644 index 0000000000..29f961c6a1 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/head.html @@ -0,0 +1,17 @@ + + + + + +Step-by-Step + + + + + + + + diff --git a/deal.II/doc/doxygen/tutorial/index.html b/deal.II/doc/doxygen/tutorial/index.html new file mode 100644 index 0000000000..9f5ca82047 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/index.html @@ -0,0 +1,37 @@ + + + + + +Step-by-Step Examples + + + + + + + + + + + + + + + + +<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>. + + + + + + + + diff --git a/deal.II/doc/doxygen/tutorial/navbar.html b/deal.II/doc/doxygen/tutorial/navbar.html new file mode 100644 index 0000000000..c97ce51462 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/navbar.html @@ -0,0 +1,67 @@ + + + + + +Step-by-Step Examples + + + + + + + +

+ Overview +

+ +
+ +

+ Step 1
+ Step 2
+ Step 3
+ Step 4
+ Step 5
+ Step 6
+ Step 7
+ Step 8
+ Step 9
+ Step 10
+ Step 11
+ Step 12
+ Step 13
+ Step 14
+ Step 15
+ Step 16
+ Step 17
+ Step 18
+ Step 19
+ Step 20 +

+ +
+ +

+ Back to the deal.II homepage +

+ + +
+ +

+ Comments on the tutorial +

+ + + + + + + + + + diff --git a/deal.II/doc/doxygen/tutorial/program2doxygen b/deal.II/doc/doxygen/tutorial/program2doxygen new file mode 100644 index 0000000000..b2ffbe35bf --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/program2doxygen @@ -0,0 +1,82 @@ +# Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006 by Wolfgang Bangerth, University of Heidelberg + + +print " * \n"; +print " *

The commented program

\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*$!$2!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 * \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"; +} + diff --git a/deal.II/doc/doxygen/tutorial/program2doxyplain b/deal.II/doc/doxygen/tutorial/program2doxyplain new file mode 100644 index 0000000000..2968d78889 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/program2doxyplain @@ -0,0 +1,31 @@ +# 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 " \n"; + print "\@code\n"; + } + } +} diff --git a/deal.II/doc/doxygen/tutorial/program2html b/deal.II/doc/doxygen/tutorial/program2html new file mode 100644 index 0000000000..49a6013d27 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/program2html @@ -0,0 +1,89 @@ +# Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006 by Wolfgang Bangerth, University of Heidelberg + +print "\n"; +print "

The commented program

\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 special characters + s/&/&/g; + s//>/g; + s/\t/ /g; + + if (($state == $program_mode) && m!^\s*//!) + { + $state = $comment_mode; + print "\n"; + print "\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 "\n"; + print "
\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*$!$2!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" . $_;
+	}
+
+	# 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+)!\1!g;
+
+	# finally print this line
+	print $_, "\n";
+
+	# if empty line, introduce paragraph break
+	print "

\n\n

" if $_ =~ m!^\s*$!; + } + else + { + print " $_"; + } +} while (<>); + +if ($state == $program_mode) { + print "

\n"; +} + diff --git a/deal.II/doc/doxygen/tutorial/program2plain b/deal.II/doc/doxygen/tutorial/program2plain new file mode 100644 index 0000000000..0a1a059944 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/program2plain @@ -0,0 +1,33 @@ +# Copyright (C) 1999, 2000, 2001, 2002, 2006 by Wolfgang Bangerth, University of Heidelberg + +print "

\n"; +print "

\n";
+
+
+while (<>) {
+    # ignore comment lines
+    if ( ! m!^\s*//! ) {
+	# substitute special characters
+	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\n";
+	}
+    }	
+}
+
+print "
\n

\n\n"; diff --git a/deal.II/doc/doxygen/tutorial/program2toc b/deal.II/doc/doxygen/tutorial/program2toc new file mode 100644 index 0000000000..935ab8d20c --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/program2toc @@ -0,0 +1,48 @@ +print " \n"; +} diff --git a/deal.II/doc/doxygen/tutorial/title.html b/deal.II/doc/doxygen/tutorial/title.html new file mode 100644 index 0000000000..06b49e23a9 --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/title.html @@ -0,0 +1,27 @@ + + + + + +Step-by-Step Examples + + + + + + + +
+

The deal.II tutorial - Step-by-step examples

+
+ + + + + + + + diff --git a/deal.II/doc/doxygen/tutorial/toc.html b/deal.II/doc/doxygen/tutorial/toc.html new file mode 100644 index 0000000000..d3dc69792c --- /dev/null +++ b/deal.II/doc/doxygen/tutorial/toc.html @@ -0,0 +1,180 @@ + + + + + +Step-by-Step + + + + + + + + +

Step-by-Step Examples

+ +

+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: +

    +
  1. A brief description of what the program does and what is new + compared to the previous programs. +
  2. The program, in commented form. +
  3. The output of the program, with some comments. +
  4. 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. +
+

+ +

+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 make in the respective directory, and run them +using make run. 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 in this section. +

+ + +

+At present, the following programs exist: +

+ +
+
Step 1
+
What's new: Everything. We create a grid + and show a simple way to write it to a file. +
+ +
Step 2
+
What's new: 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. +
+ +
Step 3
+
What's new: Actually solve Laplace's + problem. Object-orientation. Assembling matrices and + vectors. Boundary values. +
+ +
Step 4
+
What's new: 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. +
+ +
Step 5
+
What's new: 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. +
+ +
Step 6
+
What's new: Adaptive local + refinement. Handling of hanging nodes. Higher order elements. + Catching exceptions in the “main” function. +
+ +
Step 7
+
What's new: 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. +
+ +
Step 8
+
What's new: 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. +
+ +
Step 9
+
What's new: 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. + +
Step 10
+
What's new: Higher order mappings. Do not + solve equations, but rather compute the value of pi to high + accuracy. +
+ +
Step 11
+
What's new: Solving a Laplace problem with + higher order mappings. Using strange constraints and + intermediate representations of sparsity patterns. +
+ +
Step 12
+
What's new: General framework for + discontinuous Galerkin methods. Use of Timer class. +
+ +
Step 13
+
What's new: Software design questions and + how to write a modular, extensible finite element program. +
+ +
Step 14
+
What's new: Duality based error estimators, + more strategies to write a modular, extensible finite element + program. +
+ +
Step 15
+
What's new: 1d problems, nonlinear solvers, + transfering a solution across mesh refinement. +
+ +
Step 16
+
What's new: Based on step 5, a multilevel + preconditioner is implemented. +
+ +
Step 17
+
What's new: Using PETSc for linear algebra; running + in parallel on clusters of computers linked together by MPI. +
+ +
Step 18
+
What's new: A time dependent problem; using a much + simplified version of implementing elasticity; moving meshes; handling + large scale output of parallel programs. +
+ +
Step 19
+
What's new: Input parameter file handling. Merging + output of a parallel program. +
+ +
Step 20
+
What's new: Mixed finite elements. Using block + matrices and block vectors to define more complicated solvers and + preconditioners working on the Schur complement. +
+
+ + +
+
+The deal.II group
+ + -- 2.39.5