From f8a1399a13bffc57d413c701a2a412423686c7dd Mon Sep 17 00:00:00 2001 From: heister Date: Thu, 3 Jan 2013 21:37:23 +0000 Subject: [PATCH] reintegrate branch merge_mg_into_dof_handler git-svn-id: https://svn.dealii.org/trunk@27912 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/common/dealiitemplates.pm.in | 2 +- deal.II/common/template-arguments.in | 25 +- deal.II/doc/doxygen/headers/iterators.h | 21 +- deal.II/examples/step-50/Makefile | 143 + deal.II/examples/step-50/doc/builds-on | 1 + deal.II/examples/step-50/doc/intro.dox | 90 + deal.II/examples/step-50/doc/kind | 1 + deal.II/examples/step-50/doc/results.dox | 101 + .../examples/step-50/doc/step-16.solution.png | Bin 0 -> 172086 bytes deal.II/examples/step-50/doc/tooltip | 1 + deal.II/examples/step-50/step-50.cc | 1064 ++ deal.II/include/deal.II/dofs/block_info.h | 34 +- deal.II/include/deal.II/dofs/dof_accessor.h | 365 +- .../deal.II/dofs/dof_accessor.templates.h | 1104 +- deal.II/include/deal.II/dofs/dof_handler.h | 239 +- .../include/deal.II/dofs/dof_handler_policy.h | 24 + .../deal.II/dofs/dof_iterator_selector.h | 36 +- .../include/deal.II/dofs/dof_renumbering.h | 215 +- deal.II/include/deal.II/dofs/dof_tools.h | 11 +- deal.II/include/deal.II/fe/fe_values.h | 107 +- deal.II/include/deal.II/grid/tria.h | 14 + deal.II/include/deal.II/hp/dof_handler.h | 108 +- deal.II/include/deal.II/hp/fe_values.h | 225 +- .../deal.II/lac/trilinos_sparse_matrix.h | 837 +- .../deal.II/lac/trilinos_sparsity_pattern.h | 296 +- .../include/deal.II/matrix_free/matrix_free.h | 2 +- .../matrix_free/matrix_free.templates.h | 1 - deal.II/include/deal.II/meshworker/dof_info.h | 28 +- .../deal.II/meshworker/dof_info.templates.h | 43 - deal.II/include/deal.II/meshworker/loop.h | 3 +- deal.II/include/deal.II/meshworker/simple.h | 8 + deal.II/include/deal.II/multigrid/mg_base.h | 4 - .../deal.II/multigrid/mg_block_smoother.h | 3 - .../deal.II/multigrid/mg_constrained_dofs.h | 10 +- .../deal.II/multigrid/mg_dof_accessor.h | 831 +- .../deal.II/multigrid/mg_dof_handler.h | 431 +- deal.II/include/deal.II/multigrid/mg_matrix.h | 1 + .../include/deal.II/multigrid/mg_smoother.h | 3 - deal.II/include/deal.II/multigrid/mg_tools.h | 46 +- .../include/deal.II/multigrid/mg_transfer.h | 51 +- .../deal.II/multigrid/mg_transfer.templates.h | 55 +- .../deal.II/multigrid/mg_transfer_block.h | 32 +- .../multigrid/mg_transfer_block.templates.h | 12 +- .../deal.II/multigrid/mg_transfer_component.h | 24 +- .../mg_transfer_component.templates.h | 24 +- deal.II/include/deal.II/multigrid/multigrid.h | 27 +- .../source/distributed/solution_transfer.cc | 4 +- deal.II/source/distributed/tria.cc | 193 +- deal.II/source/dofs/block_info.cc | 45 +- deal.II/source/dofs/block_info.inst.in | 11 +- deal.II/source/dofs/dof_accessor.cc | 38 +- deal.II/source/dofs/dof_accessor.inst.in | 175 +- deal.II/source/dofs/dof_handler.cc | 759 +- deal.II/source/dofs/dof_handler.inst.in | 121 +- deal.II/source/dofs/dof_handler_policy.cc | 1128 +- deal.II/source/dofs/dof_renumbering.cc | 614 +- deal.II/source/dofs/dof_renumbering.inst.in | 149 +- deal.II/source/dofs/dof_tools.cc | 56 +- deal.II/source/dofs/dof_tools.inst.in | 71 +- deal.II/source/fe/fe_values.cc | 272 +- deal.II/source/fe/fe_values.inst.in | 16 +- deal.II/source/fe/mapping_q1_eulerian.cc | 6 +- deal.II/source/fe/mapping_q_eulerian.cc | 7 +- deal.II/source/grid/grid_tools.cc | 4 +- deal.II/source/grid/grid_tools.inst.in | 9 + deal.II/source/hp/dof_handler.cc | 83 +- deal.II/source/hp/dof_handler.inst.in | 58 + deal.II/source/hp/fe_values.cc | 255 +- deal.II/source/hp/fe_values.inst.in | 18 +- deal.II/source/lac/trilinos_sparse_matrix.cc | 5 +- .../source/lac/trilinos_sparsity_pattern.cc | 12 +- deal.II/source/multigrid/mg_base.cc | 27 +- deal.II/source/multigrid/mg_base.inst.in | 19 + deal.II/source/multigrid/mg_dof_accessor.cc | 706 -- .../source/multigrid/mg_dof_accessor.inst.in | 153 - deal.II/source/multigrid/mg_dof_handler.cc | 1196 +- .../source/multigrid/mg_dof_handler.inst.in | 127 - deal.II/source/multigrid/mg_tools.cc | 160 +- deal.II/source/multigrid/mg_tools.inst.in | 59 +- deal.II/source/multigrid/mg_transfer_block.cc | 34 +- .../multigrid/mg_transfer_block.inst.in | 46 +- .../source/multigrid/mg_transfer_component.cc | 127 +- .../multigrid/mg_transfer_component.inst.in | 30 +- .../source/multigrid/mg_transfer_prebuilt.cc | 69 +- .../multigrid/mg_transfer_prebuilt.inst.in | 35 +- deal.II/source/multigrid/multigrid.cc | 134 +- deal.II/source/multigrid/multigrid.inst.in | 16 + .../source/numerics/fe_field_function.inst.in | 4 - deal.II/source/numerics/vector_tools.inst.in | 34 +- tests/Makefile.paths.in | 2 +- tests/bits/step-16b.cc | 357 + tests/bits/step-16b/cmp/generic | 9640 +++++++++++++++++ tests/deal.II/accessor_02.cc | 84 + tests/deal.II/accessor_02/cmp/generic | 3 + tests/deal.II/block_info.cc | 3 +- tests/deal.II/block_info_02.cc | 104 + tests/deal.II/block_info_02/cmp/generic | 73 + tests/deal.II/dof_renumbering_07.cc | 133 + tests/deal.II/dof_renumbering_07/cmp/generic | 2821 +++++ tests/deal.II/grid_out_02.cc | 3 +- tests/deal.II/grid_out_05.cc | 63 + tests/deal.II/grid_out_05/cmp/generic | 21 + .../deal.II/memory_consumption_01/cmp/generic | 24 +- tests/lac/sparse_matrix_iterator.cc | 74 + tests/lac/sparse_matrix_iterator/cmp/generic | 28 + tests/mpi/mg_01.cc | 154 + tests/mpi/mg_01/ncpu_10/cmp/generic | 6 + tests/mpi/mg_01/ncpu_4/cmp/generic | 8 + tests/mpi/mg_02.cc | 154 + tests/mpi/mg_02/ncpu_10/cmp/generic | 86 + tests/mpi/mg_02/ncpu_4/cmp/generic | 44 + tests/mpi/mg_03.cc | 155 + tests/mpi/mg_03/ncpu_1/cmp/generic | 8 + tests/mpi/mg_03/ncpu_1/status | 1 + tests/mpi/mg_03/ncpu_10/cmp/generic | 41 + tests/mpi/mg_03/ncpu_4/cmp/generic | 23 + tests/multigrid/dof_01.cc | 9 +- tests/multigrid/dof_01/cmp/generic | 606 +- tests/multigrid/dof_02.cc | 9 +- tests/multigrid/dof_02/cmp/generic | 3612 +++--- tests/multigrid/dof_03.cc | 104 + tests/multigrid/dof_03/cmp/generic | 25 + tests/multigrid/renumbering_01.cc | 9 +- tests/multigrid/renumbering_02.cc | 7 +- tests/multigrid/renumbering_03.cc | 7 +- tests/trilinos/mg_transfer_prebuilt_01.cc | 166 + .../mg_transfer_prebuilt_01/cmp/generic | 169 + tests/trilinos/sparse_matrix_iterator.cc | 77 + .../sparse_matrix_iterator/cmp/generic | 28 + .../trilinos_sparse_matrix_iterator_01.cc | 84 + .../cmp/generic | 5 + .../trilinos_sparse_matrix_iterator_02.cc | 95 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_03.cc | 95 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_04.cc | 94 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_05.cc | 101 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_06.cc | 101 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_07.cc | 101 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_08.cc | 101 + .../cmp/generic | 15 + .../trilinos_sparse_matrix_iterator_09.cc | 85 + .../cmp/generic | 4 + .../trilinos_sparse_matrix_iterator_10.cc | 87 + .../cmp/generic | 4 + .../trilinos_sparse_matrix_iterator_11.cc | 95 + .../cmp/generic | 2 + .../trilinos_sparse_matrix_iterator_12.cc | 95 + .../cmp/generic | 2 + 153 files changed, 25141 insertions(+), 8844 deletions(-) create mode 100644 deal.II/examples/step-50/Makefile create mode 100644 deal.II/examples/step-50/doc/builds-on create mode 100644 deal.II/examples/step-50/doc/intro.dox create mode 100644 deal.II/examples/step-50/doc/kind create mode 100644 deal.II/examples/step-50/doc/results.dox create mode 100644 deal.II/examples/step-50/doc/step-16.solution.png create mode 100644 deal.II/examples/step-50/doc/tooltip create mode 100644 deal.II/examples/step-50/step-50.cc create mode 100644 deal.II/source/multigrid/mg_base.inst.in delete mode 100644 deal.II/source/multigrid/mg_dof_accessor.cc delete mode 100644 deal.II/source/multigrid/mg_dof_accessor.inst.in create mode 100644 deal.II/source/multigrid/multigrid.inst.in create mode 100644 tests/bits/step-16b.cc create mode 100644 tests/bits/step-16b/cmp/generic create mode 100644 tests/deal.II/accessor_02.cc create mode 100644 tests/deal.II/accessor_02/cmp/generic create mode 100644 tests/deal.II/block_info_02.cc create mode 100644 tests/deal.II/block_info_02/cmp/generic create mode 100644 tests/deal.II/dof_renumbering_07.cc create mode 100644 tests/deal.II/dof_renumbering_07/cmp/generic create mode 100644 tests/deal.II/grid_out_05.cc create mode 100644 tests/deal.II/grid_out_05/cmp/generic create mode 100644 tests/lac/sparse_matrix_iterator.cc create mode 100644 tests/lac/sparse_matrix_iterator/cmp/generic create mode 100644 tests/mpi/mg_01.cc create mode 100644 tests/mpi/mg_01/ncpu_10/cmp/generic create mode 100644 tests/mpi/mg_01/ncpu_4/cmp/generic create mode 100644 tests/mpi/mg_02.cc create mode 100644 tests/mpi/mg_02/ncpu_10/cmp/generic create mode 100644 tests/mpi/mg_02/ncpu_4/cmp/generic create mode 100644 tests/mpi/mg_03.cc create mode 100644 tests/mpi/mg_03/ncpu_1/cmp/generic create mode 100644 tests/mpi/mg_03/ncpu_1/status create mode 100644 tests/mpi/mg_03/ncpu_10/cmp/generic create mode 100644 tests/mpi/mg_03/ncpu_4/cmp/generic create mode 100644 tests/multigrid/dof_03.cc create mode 100644 tests/multigrid/dof_03/cmp/generic create mode 100644 tests/trilinos/mg_transfer_prebuilt_01.cc create mode 100644 tests/trilinos/mg_transfer_prebuilt_01/cmp/generic create mode 100644 tests/trilinos/sparse_matrix_iterator.cc create mode 100644 tests/trilinos/sparse_matrix_iterator/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_01.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_01/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_02.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_02/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_03.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_03/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_04.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_04/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_05.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_05/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_06.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_06/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_07.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_07/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_08.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_08/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_09.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_09/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_10.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_10/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_11.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_11/cmp/generic create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_12.cc create mode 100644 tests/trilinos/trilinos_sparse_matrix_iterator_12/cmp/generic diff --git a/deal.II/common/dealiitemplates.pm.in b/deal.II/common/dealiitemplates.pm.in index 80b7a15838..4642d80817 100644 --- a/deal.II/common/dealiitemplates.pm.in +++ b/deal.II/common/dealiitemplates.pm.in @@ -102,7 +102,7 @@ our @dimensions = (1,2,3); our @codim1_dimensions = (1,2); # DoFHandlers -our @dofhandler_templates = qw(DoFHandler hp::DoFHandler MGDoFHandler); +our @dofhandler_templates = qw(DoFHandler hp::DoFHandler); our @dofhandlers = map { $t = $_ ; map { "$_<$t>" } @dofhandler_templates } @dimensions; # All possible number types diff --git a/deal.II/common/template-arguments.in b/deal.II/common/template-arguments.in index 09d4d3354d..8178ad9af6 100644 --- a/deal.II/common/template-arguments.in +++ b/deal.II/common/template-arguments.in @@ -1,3 +1,4 @@ +BOOL := { true; false } REAL_SCALARS := { double; float; long double } COMPLEX_SCALARS := { std::complex; std::complex; @@ -36,23 +37,31 @@ SERIAL_VECTORS := { Vector; @DEAL_II_EXPAND_PETSC_MPI_BLOCKVECTOR@; } +VECTORS_WITH_MATRIX := { Vector; + Vector ; + Vector; + + BlockVector; + BlockVector; + BlockVector; + + @DEAL_II_EXPAND_TRILINOS_VECTOR@; + @DEAL_II_EXPAND_TRILINOS_MPI_VECTOR@; + } + DOFHANDLERS := { DoFHandler; - hp::DoFHandler; - MGDoFHandler } + hp::DoFHandler } DOFHANDLER_TEMPLATES := { DoFHandler; - hp::DoFHandler; - MGDoFHandler } + hp::DoFHandler } TRIANGULATION_AND_DOFHANDLER_TEMPLATES := { Triangulation; DoFHandler; - hp::DoFHandler; - MGDoFHandler} + hp::DoFHandler } TRIANGULATION_AND_DOFHANDLERS := { Triangulation; DoFHandler; - hp::DoFHandler; - MGDoFHandler } + hp::DoFHandler } FEVALUES_BASES := { FEValuesBase; diff --git a/deal.II/doc/doxygen/headers/iterators.h b/deal.II/doc/doxygen/headers/iterators.h index 0ab81cc360..52f44bea81 100644 --- a/deal.II/doc/doxygen/headers/iterators.h +++ b/deal.II/doc/doxygen/headers/iterators.h @@ -239,22 +239,19 @@ of accessor classes: topological connection of a mesh is available from an accessor such as to request iterators pointing to neighbors of a cell. -- The DoFAccessor class lets you access information related to degrees of - freedom associated with cells, faces, etc; it does so for both DoFHandler - and hp::DoFHandler objects. Note that the DoFAccessor class is derived from - either TriaAccessor or CellAccessor (depending on whether the DoFAccessor - points to an object of full dimension or not) and so is able to provide a - superset of information over its base classes. +- The DoFAccessor class lets you access information related to degrees + of freedom associated with cells, faces, etc; it does so for both + DoFHandler and hp::DoFHandler objects. Note that the DoFAccessor + class is derived from either TriaAccessor or CellAccessor (depending + on whether the DoFAccessor points to an object of full dimension or + not) and so is able to provide a superset of information over its + base classes. Additionally, the DoFAccessor class comes in two + flavors, one accessing degrees of freedom on the level of a cell and + the other accessing the active dofs of an active cell. - The DoFCellAccessor class has the same purpose and relation to DoFCellAccessor as the CellAccessor has to TriaAccessor. -- The MGDoFAccessor and MFCellDoFAccessor give access to the multilevel degree - of freedom information associated with MGDoFHandler objects. As before, - since the MGDoFHandler extends the data structures of regular DoFHandler - objects, the MGDoFAccessor is also derived from the DoFAccessor (or - DoFCellAccessor) class to provide a superset of information. - Except to look up member documentation, you will not usually have to deal with the actual class names listed above. Rather, one uses the typedefs provided by the container classes Triangulation, DoFHandler, hp::DoFHandler and diff --git a/deal.II/examples/step-50/Makefile b/deal.II/examples/step-50/Makefile new file mode 100644 index 0000000000..3af5d515e1 --- /dev/null +++ b/deal.II/examples/step-50/Makefile @@ -0,0 +1,143 @@ +# $Id$ + +# For the small projects Makefile, you basically need to fill in only +# four fields. +# +# The first is the name of the application. It is assumed that the +# application name is the same as the base file name of the single C++ +# file from which the application is generated. +target = step-50 + +# The second field determines whether you want to run your program in +# debug or optimized mode. The latter is significantly faster, but no +# run-time checking of parameters and internal states is performed, so +# you should set this value to `on' while you develop your program, +# and to `off' when running production computations. +debug-mode = on + + +# As third field, we need to give the path to the top-level deal.II +# directory. You need to adjust this to your needs. Since this path is +# probably the most often needed one in the Makefile internals, it is +# designated by a single-character variable, since that can be +# reference using $D only, i.e. without the parentheses that are +# required for most other parameters, as e.g. in $(target). +D = ../../ + + +# The last field specifies the names of data and other files that +# shall be deleted when calling `make clean'. Object and backup files, +# executables and the like are removed anyway. Here, we give a list of +# files in the various output formats that deal.II supports. +clean-up-files = *gmv *gnuplot *gpl *eps *pov *vtk *ucd *.d2 + + + + +# +# +# Usually, you will not need to change anything beyond this point. +# +# +# The next statement tells the `make' program where to find the +# deal.II top level directory and to include the file with the global +# settings +include $D/common/Make.global_options + + +# Since the whole project consists of only one file, we need not +# consider difficult dependencies. We only have to declare the +# libraries which we want to link to the object file. deal.II has two +# libraries: one for the debug mode version of the +# application and one for optimized mode. +libs.g := $(lib-deal2.g) +libs.o := $(lib-deal2.o) + + +# We now use the variable defined above to switch between debug and +# optimized mode to select the set of libraries to link with. Included +# in the list of libraries is the name of the object file which we +# will produce from the single C++ file. Note that by default we use +# the extension .g.o for object files compiled in debug mode and .o for +# object files in optimized mode (or whatever local default on your +# system is instead of .o) +ifeq ($(debug-mode),on) + libraries = $(target).g.$(OBJEXT) $(libs.g) +else + libraries = $(target).$(OBJEXT) $(libs.o) +endif + + +# Now comes the first production rule: how to link the single object +# file produced from the single C++ file into the executable. Since +# this is the first rule in the Makefile, it is the one `make' selects +# if you call it without arguments. +all: $(target)$(EXEEXT) +$(target)$(EXEEXT) : $(libraries) + @echo ============================ Linking $@ + @$(CXX) -o $@ $^ $(LIBS) $(LDFLAGS) + + +# To make running the application somewhat independent of the actual +# program name, we usually declare a rule `run' which simply runs the +# program. You can then run it by typing `make run'. This is also +# useful if you want to call the executable with arguments which do +# not change frequently. You may then want to add them to the +# following rule: +run: $(target)$(EXEEXT) + @echo ============================ Running $< + @./$(target)$(EXEEXT) + + +# As a last rule to the `make' program, we define what to do when +# cleaning up a directory. This usually involves deleting object files +# and other automatically created files such as the executable itself, +# backup files, and data files. Since the latter are not usually quite +# diverse, you needed to declare them at the top of this file. +clean: + -rm -f *.$(OBJEXT) *~ Makefile.dep $(target)$(EXEEXT) $(clean-up-files) + + +# Since we have not yet stated how to make an object file from a C++ +# file, we should do so now. Since the many flags passed to the +# compiler are usually not of much interest, we suppress the actual +# command line using the `at' sign in the first column of the rules +# and write the string indicating what we do instead. +./%.g.$(OBJEXT) : + @echo "==============debug========= $( $@" + @$(CXX) $(CXXFLAGS.g) -c $< -o $@ +./%.$(OBJEXT) : + @echo "==============optimized===== $( $@" + @$(CXX) $(CXXFLAGS.o) -c $< -o $@ + + +# The following statement tells make that the rules `run' and `clean' +# are not expected to produce files of the same name as Makefile rules +# usually do. +.PHONY: all run clean + + +# Finally there is a rule which you normally need not care much about: +# since the executable depends on some include files from the library, +# besides the C++ application file of course, it is necessary to +# re-generate the executable when one of the files it depends on has +# changed. The following rule creates a dependency file +# `Makefile.dep', which `make' uses to determine when to regenerate +# the executable. This file is automagically remade whenever needed, +# i.e. whenever one of the cc-/h-files changed. Make detects whether +# to remake this file upon inclusion at the bottom of this file. +# +# If the creation of Makefile.dep fails, blow it away and fail +Makefile.dep: $(target).cc Makefile \ + $(shell echo $D/include/deal.II/*/*.h) + @echo ============================ Remaking $@ + @$D/common/scripts/make_dependencies $(INCLUDE) -B. $(target).cc \ + > $@ \ + || (rm -f $@ ; false) + @if test -s $@ ; then true ; else rm $@ ; false ; fi + +# To make the dependencies known to `make', we finally have to include +# them: +include Makefile.dep + + diff --git a/deal.II/examples/step-50/doc/builds-on b/deal.II/examples/step-50/doc/builds-on new file mode 100644 index 0000000000..17402734c7 --- /dev/null +++ b/deal.II/examples/step-50/doc/builds-on @@ -0,0 +1 @@ +step-6 diff --git a/deal.II/examples/step-50/doc/intro.dox b/deal.II/examples/step-50/doc/intro.dox new file mode 100644 index 0000000000..99666726d3 --- /dev/null +++ b/deal.II/examples/step-50/doc/intro.dox @@ -0,0 +1,90 @@ +
+ +This program has evolved from a version originally written by Guido +Kanschat in 2003. It has undergone significant revisions by Bärbel +Janssen, Guido Kanschat and Wolfgang Bangerth in 2009 and 2010 to demonstrate +multigrid algorithms on adaptively refined meshes. + + + + +

Introduction

+ + +This example shows the basic usage of the multilevel functions in +deal.II. It solves the same problem as used in step-6, +but demonstrating the things one has to provide when using multigrid +as a preconditioner. In particular, this requires that we define a +hierarchy of levels, provide transfer operators from one level to the +next and back, and provide representations of the Laplace operator on +each level. + +In order to allow sufficient flexibility in conjunction with systems of +differential equations and block preconditioners, quite a few different objects +have to be created before starting the multilevel method, although +most of what needs to be done is provided by deal.II itself. These are +
    +
  • An the object handling transfer between grids; we use the + MGTransferPrebuilt class for this that does almost all of the work + inside the library. +
  • The solver on the coarsest level; here, we use MGCoarseGridHouseholder. +
  • The smoother on all other levels, which in our case will be the + MGSmootherRelaxation class using SOR as the underlying method +
  • And MGMatrix, a class having a special level multiplication, i.e. we + basically store one matrix per grid level and allow multiplication + with it. +
+Most of these objects will only be needed inside the function that +actually solves the linear system. There, these objects are combined +in an object of type Multigrid, containing the implementation of the +V-cycle, which is in turn used by the preconditioner PreconditionMG, +ready for plug-in into a linear solver of the LAC library. + +The multilevel method in deal.II follows in many respects the outlines +of the various publications by James Bramble, Joseph Pasciak and +Jinchao Xu (i.e. the "BPX" framework). In order to understand many of +the options, a rough familiarity with their work is quite helpful. + +However, in comparison to this framework, the implementation in +deal.II has to take into account the fact that we want to solve linear +systems on adaptively refined meshes. This leads to the complication +that it isn't quite as clear any more what exactly a "level" in a +multilevel hierarchy of a mesh is. The following image shows what we +consider to be a "level": + +

+ @image html "hanging_nodes.png" "" +

+ +In other words, the fine level in this mesh consists only of the +degrees of freedom that are defined on the refined cells, but does not +extend to that part of the domain that is not refined. While this +guarantees that the overall effort grows as ${\cal O}(N)$ as necessary +for optimal multigrid complexity, it leads to problems when defining +where to smooth and what boundary conditions to pose for the operators +defined on individual levels if the level boundary is not an external +boundary. These questions are discussed in detail in the +@ref mg_paper "Multigrid paper by Janssen and Kanschat" that describes +the implementation in deal.II. + + + +

The testcase

+ +The problem we solve here is exactly the same as in +step-6, the only difference being the solver we use +here. You may want to look there for a definition of what we solve, +right hand side and boundary conditions. Obviously, the program would +also work if we changed the geometry and other pieces of data that +defines this particular problem. + +The things that are new are all those parts that concern the +multigrid. In particular, this includes the following members of the +main class: +- LaplaceProblem::mg_dof_handler +- LaplaceProblem::mg_sparsity +- LaplaceProblem::mg_matrices +- LaplaceProblem::mg_interface_matrices_up +- LaplaceProblem::assemble_multigrid () +- LaplaceProblem::solve () +Take a look at these functions. diff --git a/deal.II/examples/step-50/doc/kind b/deal.II/examples/step-50/doc/kind new file mode 100644 index 0000000000..c1d9154931 --- /dev/null +++ b/deal.II/examples/step-50/doc/kind @@ -0,0 +1 @@ +techniques diff --git a/deal.II/examples/step-50/doc/results.dox b/deal.II/examples/step-50/doc/results.dox new file mode 100644 index 0000000000..762f8091b4 --- /dev/null +++ b/deal.II/examples/step-50/doc/results.dox @@ -0,0 +1,101 @@ +

Results

+ +The output that this program generates is, of course, the same as that +of step-6, so you may see there for more results. On the +other hand, since no tutorial program is a good one unless it has at +least one colorful picture, here is, again, the solution: + +

+ @image html step-16.solution.png +

+ +When run, the output of this program is +
+Cycle 0:
+   Number of active cells:       20
+   Number of degrees of freedom: 25 (by level: 8, 25)
+   7 CG iterations needed to obtain convergence.
+Cycle 1:
+   Number of active cells:       44
+   Number of degrees of freedom: 57 (by level: 8, 25, 48)
+   8 CG iterations needed to obtain convergence.
+Cycle 2:
+   Number of active cells:       92
+   Number of degrees of freedom: 117 (by level: 8, 25, 80, 60)
+   9 CG iterations needed to obtain convergence.
+Cycle 3:
+   Number of active cells:       188
+   Number of degrees of freedom: 221 (by level: 8, 25, 80, 200)
+   12 CG iterations needed to obtain convergence.
+Cycle 4:
+   Number of active cells:       416
+   Number of degrees of freedom: 485 (by level: 8, 25, 89, 288, 280)
+   13 CG iterations needed to obtain convergence.
+Cycle 5:
+   Number of active cells:       800
+   Number of degrees of freedom: 925 (by level: 8, 25, 89, 288, 784, 132)
+   14 CG iterations needed to obtain convergence.
+Cycle 6:
+   Number of active cells:       1628
+   Number of degrees of freedom: 1865 (by level: 8, 25, 89, 304, 1000, 1164, 72)
+   14 CG iterations needed to obtain convergence.
+Cycle 7:
+   Number of active cells:       3194
+   Number of degrees of freedom: 3603 (by level: 8, 25, 89, 328, 1032, 2200, 1392)
+   16 CG iterations needed to obtain convergence.
+
+That's not perfect — we would have hoped for a constant number +of iterations rather than one that increases as we get more and more +degrees of freedom — but it is also not far away. The reason for +this is easy enough to understand, however: since we have a strongly +varying coefficient, the operators that we assembly by quadrature on +the lower levels become worse and worse approximations of the operator +on the finest level. Consequently, even if we had perfect solvers on +the coarser levels, they would not be good preconditioners on the +finest level. This theory is easily tested by comparing results when +we use a constant coefficient: in that case, the number of iterations +remains constant at 9 after the first three or four refinement steps. + +We can also compare what this program produces with how @ref step_5 +"step-5" performed. To solve the same problem as in step-5, the only +two changes that are necessary are (i) to replace the body of the +function LaplaceProblem::refine_grid by a call to +triangulation.refine_global(1), and (ii) to use the same +SolverControl object and tolerance as in step-5 — the rest of the +program remains unchanged. In that case, here is how the solvers used +in step-5 and the multigrid solver used in the current program +compare: + + + + + + + + +
cellsstep-5step-16
20 13 6
80 17 7
320 29 9
1280 51 10
5120 94 11
2048018013
+This isn't only fewer iterations than in step-5 (each of which +is, however, much more expensive) but more importantly, the number of +iterations also grows much more slowly under mesh refinement (again, +it would be almost constant if the coefficient was constant rather +than strongly varying as chosen here). This justifies the common +observation that, whenever possible, multigrid methods should be used +for second order problems. + + +

Possible extensions

+ +A close inspection of this program's performance shows that it is mostly +dominated by matrix-vector operations. step-37 shows one way +how this can be avoided by working with matrix-free methods. + +Another avenue would be to use algebraic multigrid methods. The +geometric multigrid method used here can at times be a bit awkward to +implement because it needs all those additional data structures, and +it becomes even more difficult if the program is to run in %parallel on +machines coupled through MPI, for example. In that case, it would be +simpler if one could use a black-box preconditioner that uses some +sort of multigrid hierarchy for good performance but can figure out +level matrices and similar things out by itself. Algebraic multigrid +methods do exactly this, and we will use them in +step-31 for the solution of a Stokes problem. diff --git a/deal.II/examples/step-50/doc/step-16.solution.png b/deal.II/examples/step-50/doc/step-16.solution.png new file mode 100644 index 0000000000000000000000000000000000000000..2550b85a26728b78093c64c546c427691a23f493 GIT binary patch literal 172086 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�)a`B=e6k_Y}QXv-U?>{a&UXqUUm&3nVd_ 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 +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +// These, now, are the include necessary for +// the multi-level methods. The first two +// declare classes that allow us to enumerate +// degrees of freedom not only on the finest +// mesh level, but also on intermediate +// levels (that's what the MGDoFHandler class +// does) as well as allow to access this +// information (iterators and accessors over +// these cells). +// +// The rest of the include files deals with +// the mechanics of multigrid as a linear +// operator (solver or preconditioner). +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// This is C++: +#include +#include + +// The last step is as in all +// previous programs: +namespace Step16 +{ + using namespace dealii; + + + // @sect3{The LaplaceProblem class template} + + // This main class is basically the same + // class as in step-6. As far as member + // functions is concerned, the only addition + // is the assemble_multigrid + // function that assembles the matrices that + // correspond to the discrete operators on + // intermediate levels: + template + class LaplaceProblem + { + public: + LaplaceProblem (const unsigned int deg); + void run (); + + private: + void setup_system (); + void assemble_system (); + void assemble_multigrid (); + void solve (); + void refine_grid (); + void output_results (const unsigned int cycle) const; + + parallel::distributed::Triangulation triangulation; + FE_Q fe; + DoFHandler mg_dof_handler; + + typedef TrilinosWrappers::SparseMatrix matrix_t; + typedef TrilinosWrappers::MPI::Vector vector_t; + + SparsityPattern sparsity_pattern; + matrix_t system_matrix; + + // We need an additional object for the + // hanging nodes constraints. They are + // handed to the transfer object in the + // multigrid. Since we call a compress + // inside the multigrid these constraints + // are not allowed to be inhomogeneous so + // we store them in different ConstraintMatrix + // objects. + ConstraintMatrix hanging_node_constraints; + ConstraintMatrix constraints; + + vector_t solution; + vector_t system_rhs; + + const unsigned int degree; + + // The following four objects are the + // only additional member variables, + // compared to step-6. They first three + // represent the + // operators that act on individual + // levels of the multilevel hierarchy, + // rather than on the finest mesh as do + // the objects above while the last object + // stores information about the boundary + // indices on each level and information + // about indices lying on a refinement + // edge between two different refinement + // levels. + // + // To facilitate having objects on each + // level of a multilevel hierarchy, + // deal.II has the MGLevelObject class + // template that provides storage for + // objects on each level. What we need + // here are matrices on each level, which + // implies that we also need sparsity + // patterns on each level. As outlined in + // the @ref mg_paper, the operators + // (matrices) that we need are actually + // twofold: one on the interior of each + // level, and one at the interface + // between each level and that part of + // the domain where the mesh is + // coarser. In fact, we will need the + // latter in two versions: for the + // direction from coarse to fine mesh and + // from fine to coarse. Fortunately, + // however, we here have a self-adjoint + // problem for which one of these is the + // transpose of the other, and so we only + // have to build one; we choose the one + // from coarse to fine. + MGLevelObject mg_sparsity_patterns; + MGLevelObject mg_matrices; + MGLevelObject mg_interface_matrices; + MGConstrainedDoFs mg_constrained_dofs; + }; + + + + // @sect3{Nonconstant coefficients} + + // The implementation of nonconstant + // coefficients is copied verbatim + // from step-5 and step-6: + + template + class Coefficient : public Function + { + public: + Coefficient () : Function() {} + + virtual double value (const Point &p, + const unsigned int component = 0) const; + + virtual void value_list (const std::vector > &points, + std::vector &values, + const unsigned int component = 0) const; + }; + + + + template + double Coefficient::value (const Point &p, + const unsigned int) const + { + if (p.square() < 0.5*0.5) + return 20; + else + return 1; + } + + + + template + void Coefficient::value_list (const std::vector > &points, + std::vector &values, + const unsigned int component) const + { + const unsigned int n_points = points.size(); + + Assert (values.size() == n_points, + ExcDimensionMismatch (values.size(), n_points)); + + Assert (component == 0, + ExcIndexRange (component, 0, 1)); + + for (unsigned int i=0; i::value (points[i]); + } + + + // @sect3{The LaplaceProblem class implementation} + + // @sect4{LaplaceProblem::LaplaceProblem} + + // The constructor is left mostly + // unchanged. We take the polynomial degree + // of the finite elements to be used as a + // constructor argument and store it in a + // member variable. + // + // By convention, all adaptively refined + // triangulations in deal.II never change by + // more than one level across a face between + // cells. For our multigrid algorithms, + // however, we need a slightly stricter + // guarantee, namely that the mesh also does + // not change by more than refinement level + // across vertices that might connect two + // cells. In other words, we must prevent the + // following situation: + // + // @image html limit_level_difference_at_vertices.png "" + // + // This is achieved by passing the + // Triangulation::limit_level_difference_at_vertices + // flag to the constructor of the + // triangulation class. + template + LaplaceProblem::LaplaceProblem (const unsigned int degree) + : + triangulation (MPI_COMM_WORLD,Triangulation:: + limit_level_difference_at_vertices), + fe (degree), + mg_dof_handler (triangulation), + degree(degree) + {} + + + + // @sect4{LaplaceProblem::setup_system} + + // The following function extends what the + // corresponding one in step-6 did. The top + // part, apart from the additional output, + // does the same: + template + void LaplaceProblem::setup_system () + { + mg_dof_handler.distribute_dofs (fe); + mg_dof_handler.distribute_mg_dofs (fe); + + + // Here we output not only the + // degrees of freedom on the finest + // level, but also in the + // multilevel structure + deallog << "Number of degrees of freedom: " + << mg_dof_handler.n_dofs(); + + for (unsigned int l=0; l::type dirichlet_boundary; + ZeroFunction homogeneous_dirichlet_bc (1); + dirichlet_boundary[0] = &homogeneous_dirichlet_bc; + VectorTools::interpolate_boundary_values (static_cast&>(mg_dof_handler), + dirichlet_boundary, + constraints); + constraints.close (); + hanging_node_constraints.close (); + constraints.condense (sparsity_pattern); + sparsity_pattern.compress(); + system_matrix.reinit (sparsity_pattern); + + // The multigrid constraints have to be + // initialized. They need to know about + // the boundary values as well, so we + // pass the dirichlet_boundary + // here as well. + mg_constrained_dofs.clear(); + mg_constrained_dofs.initialize(mg_dof_handler, dirichlet_boundary); + + + // Now for the things that concern the + // multigrid data structures. First, we + // resize the multi-level objects to hold + // matrices and sparsity patterns for every + // level. The coarse level is zero (this is + // mandatory right now but may change in a + // future revision). Note that these + // functions take a complete, inclusive + // range here (not a starting index and + // size), so the finest level is + // n_levels-1. We first have + // to resize the container holding the + // SparseMatrix classes, since they have to + // release their SparsityPattern before the + // can be destroyed upon resizing. + const unsigned int n_levels = triangulation.n_levels(); + + mg_interface_matrices.resize(0, n_levels-1); + mg_interface_matrices.clear (); + mg_matrices.resize(0, n_levels-1); + mg_matrices.clear (); + mg_sparsity_patterns.resize(0, n_levels-1); + + // Now, we have to provide a matrix on each + // level. To this end, we first use the + // MGTools::make_sparsity_pattern function + // to first generate a preliminary + // compressed sparsity pattern on each + // level (see the @ref Sparsity module for + // more information on this topic) and then + // copy it over to the one we really + // want. The next step is to initialize + // both kinds of level matrices with these + // sparsity patterns. + // + // It may be worth pointing out that the + // interface matrices only have entries for + // degrees of freedom that sit at or next + // to the interface between coarser and + // finer levels of the mesh. They are + // therefore even sparser than the matrices + // on the individual levels of our + // multigrid hierarchy. If we were more + // concerned about memory usage (and + // possibly the speed with which we can + // multiply with these matrices), we should + // use separate and different sparsity + // patterns for these two kinds of + // matrices. + for (unsigned int level=0; level + void LaplaceProblem::assemble_system () + { + const QGauss quadrature_formula(degree+1); + + FEValues fe_values (fe, quadrature_formula, + update_values | update_gradients | + update_quadrature_points | update_JxW_values); + + const unsigned int dofs_per_cell = fe.dofs_per_cell; + const unsigned int n_q_points = quadrature_formula.size(); + + FullMatrix cell_matrix (dofs_per_cell, dofs_per_cell); + Vector cell_rhs (dofs_per_cell); + + std::vector local_dof_indices (dofs_per_cell); + + const Coefficient coefficient; + std::vector coefficient_values (n_q_points); + + typename DoFHandler::active_cell_iterator + cell = mg_dof_handler.begin_active(), + endc = mg_dof_handler.end(); + for (; cell!=endc; ++cell) + if (cell->is_locally_owned()) + { + cell_matrix = 0; + cell_rhs = 0; + + fe_values.reinit (cell); + + coefficient.value_list (fe_values.get_quadrature_points(), + coefficient_values); + + for (unsigned int q_point=0; q_pointget_dof_indices (local_dof_indices); + constraints.distribute_local_to_global (cell_matrix, cell_rhs, + local_dof_indices, + system_matrix, system_rhs); + } + } + + + // @sect4{LaplaceProblem::assemble_multigrid} + + // The next function is the one that builds + // the linear operators (matrices) that + // define the multigrid method on each level + // of the mesh. The integration core is the + // same as above, but the loop below will go + // over all existing cells instead of just + // the active ones, and the results must be + // entered into the correct matrix. Note also + // that since we only do multi-level + // preconditioning, no right-hand side needs + // to be assembled here. + // + // Before we go there, however, we have to + // take care of a significant amount of book + // keeping: + template + void LaplaceProblem::assemble_multigrid () + { + QGauss quadrature_formula(1+degree); + + FEValues fe_values (fe, quadrature_formula, + update_values | update_gradients | + update_quadrature_points | update_JxW_values); + + const unsigned int dofs_per_cell = fe.dofs_per_cell; + const unsigned int n_q_points = quadrature_formula.size(); + + FullMatrix cell_matrix (dofs_per_cell, dofs_per_cell); + + std::vector local_dof_indices (dofs_per_cell); + + const Coefficient coefficient; + std::vector coefficient_values (n_q_points); + + // Next a few things that are specific to + // building the multigrid data structures + // (since we only need them in the current + // function, rather than also elsewhere, we + // build them here instead of the + // setup_system + // function). Some of the following may be + // a bit obscure if you're not familiar + // with the algorithm actually implemented + // in deal.II to support multilevel + // algorithms on adaptive meshes; if some + // of the things below seem strange, take a + // look at the @ref mg_paper. + // + // Our first job is to identify those + // degrees of freedom on each level that + // are located on interfaces between + // adaptively refined levels, and those + // that lie on the interface but also on + // the exterior boundary of the domain. As + // in many other parts of the library, we + // do this by using boolean masks, + // i.e. vectors of booleans each element of + // which indicates whether the + // corresponding degree of freedom index is + // an interface DoF or not. The MGConstraints + // already computed the information for us + // when we called initialize in setup_system(). + std::vector > interface_dofs + = mg_constrained_dofs.get_refinement_edge_indices (); + std::vector > boundary_interface_dofs + = mg_constrained_dofs.get_refinement_edge_boundary_indices (); + + // The indices just identified will later + // be used to decide where the assembled value + // has to be added into on each level. + // On the other hand, + // we also have to impose zero boundary + // conditions on the external boundary of + // each level. But this the MGConstraints + // knows it. So we simply ask for them by calling + // get_boundary_indices (). + // The third step is to construct + // constraints on all those degrees of + // freedom: their value should be zero + // after each application of the level + // operators. To this end, we construct + // ConstraintMatrix objects for each level, + // and add to each of these constraints for + // each degree of freedom. Due to the way + // the ConstraintMatrix stores its data, + // the function to add a constraint on a + // single degree of freedom and force it to + // be zero is called + // Constraintmatrix::add_line(); doing so + // for several degrees of freedom at once + // can be done using + // Constraintmatrix::add_lines(): + std::vector boundary_constraints (triangulation.n_levels()); + std::vector boundary_interface_constraints (triangulation.n_levels()); + for (unsigned int level=0; levelassemble_system, with two + // exceptions: (i) we don't need a right + // hand side, and more significantly (ii) we + // don't just loop over all active cells, + // but in fact all cells, active or + // not. Consequently, the correct iterator + // to use is MGDoFHandler::cell_iterator + // rather than + // MGDoFHandler::active_cell_iterator. Let's + // go about it: + typename DoFHandler::cell_iterator cell = mg_dof_handler.begin(), + endc = mg_dof_handler.end(); + + for (; cell!=endc; ++cell) + if (cell->level_subdomain_id()==triangulation.locally_owned_subdomain()) + { + cell_matrix = 0; + fe_values.reinit (cell); + + coefficient.value_list (fe_values.get_quadrature_points(), + coefficient_values); + + for (unsigned int q_point=0; q_pointget_mg_dof_indices (local_dof_indices); + + // Next, we need to copy local + // contributions into the level + // objects. We can do this in the same + // way as in the global assembly, using + // a constraint object that takes care + // of constrained degrees (which here + // are only boundary nodes, as the + // individual levels have no hanging + // node constraints). Note that the + // boundary_constraints + // object makes sure that the level + // matrices contains no contributions + // from degrees of freedom at the + // interface between cells of different + // refinement level. + boundary_constraints[cell->level()] + .distribute_local_to_global (cell_matrix, + local_dof_indices, + mg_matrices[cell->level()]); + + // The next step is again slightly more + // obscure (but explained in the @ref + // mg_paper): We need the remainder of + // the operator that we just copied + // into the mg_matrices + // object, namely the part on the + // interface between cells at the + // current level and cells one level + // coarser. This matrix exists in two + // directions: for interior DoFs (index + // $i$) of the current level to those + // sitting on the interface (index + // $j$), and the other way around. Of + // course, since we have a symmetric + // operator, one of these matrices is + // the transpose of the other. + // + // The way we assemble these matrices + // is as follows: since the are formed + // from parts of the local + // contributions, we first delete all + // those parts of the local + // contributions that we are not + // interested in, namely all those + // elements of the local matrix for + // which not $i$ is an interface DoF + // and $j$ is not. The result is one of + // the two matrices that we are + // interested in, and we then copy it + // into the + // mg_interface_matrices + // object. The + // boundary_interface_constraints + // object at the same time makes sure + // that we delete contributions from + // all degrees of freedom that are not + // only on the interface but also on + // the external boundary of the domain. + // + // The last part to remember is how to + // get the other matrix. Since it is + // only the transpose, we will later + // (in the solve() + // function) be able to just pass the + // transpose matrix where necessary. + for (unsigned int i=0; ilevel()][local_dof_indices[i]]==true && + interface_dofs[cell->level()][local_dof_indices[j]]==false)) + cell_matrix(i,j) = 0; + + boundary_interface_constraints[cell->level()] + .distribute_local_to_global (cell_matrix, + local_dof_indices, + mg_interface_matrices[cell->level()]); + } + } + + + + // @sect4{LaplaceProblem::solve} + + // This is the other function that is + // significantly different in support of the + // multigrid solver (or, in fact, the + // preconditioner for which we use the + // multigrid method). + // + // Let us start out by setting up two of the + // components of multilevel methods: transfer + // operators between levels, and a solver on + // the coarsest level. In finite element + // methods, the transfer operators are + // derived from the finite element function + // spaces involved and can often be computed + // in a generic way independent of the + // problem under consideration. In that case, + // we can use the MGTransferPrebuilt class + // that, given the constraints on the global + // level and an MGDoFHandler object computes + // the matrices corresponding to these + // transfer operators. + // + // The second part of the following lines + // deals with the coarse grid solver. Since + // our coarse grid is very coarse indeed, we + // decide for a direct solver (a Householder + // decomposition of the coarsest level + // matrix), even if its implementation is not + // particularly sophisticated. If our coarse + // mesh had many more cells than the five we + // have here, something better suited would + // obviously be necessary here. + template + void LaplaceProblem::solve () + { + + // Create the object that deals with the transfer + // between different refinement levels. We need to + // pass it the hanging node constraints. + MGTransferPrebuilt mg_transfer(hanging_node_constraints, mg_constrained_dofs); + // Now the prolongation matrix has to be built. + // This matrix needs to take the boundary values on + // each level into account and needs to know about + // the indices at the refinement egdes. The + // MGConstraints knows about that so + // pass it as an argument. + mg_transfer.build_matrices(mg_dof_handler); + + matrix_t coarse_matrix; + coarse_matrix.copy_from (mg_matrices[0]); + //MGCoarseGridHouseholder coarse_grid_solver; + //coarse_grid_solver.initialize (coarse_matrix); + + SolverControl coarse_solver_control (1000, 1e-10, false, false); + SolverGMRES coarse_solver(coarse_solver_control); + PreconditionIdentity id; + MGCoarseGridLACIteration,vector_t> coarse_grid_solver(coarse_solver, + coarse_matrix, + id); + + // The next component of a multilevel + // solver or preconditioner is that we need + // a smoother on each level. A common + // choice for this is to use the + // application of a relaxation method (such + // as the SOR, Jacobi or Richardson method). The + // MGSmootherPrecondition class provides + // support for this kind of + // smoother. Here, we opt for the + // application of a single SOR + // iteration. To this end, we define an + // appropriate typedef and + // then setup a smoother object. + // + // Since this smoother needs temporary + // vectors to store intermediate results, + // we need to provide a VectorMemory + // object. Since these vectors will be + // reused over and over, the + // GrowingVectorMemory is more time + // efficient than the PrimitiveVectorMemory + // class in the current case. + // + // The last step is to initialize the + // smoother object with our level matrices + // and to set some smoothing parameters. + // The initialize() function + // can optionally take additional arguments + // that will be passed to the smoother + // object on each level. In the current + // case for the SOR smoother, this could, + // for example, include a relaxation + // parameter. However, we here leave these + // at their default values. The call to + // set_steps() indicates that + // we will use two pre- and two + // post-smoothing steps on each level; to + // use a variable number of smoother steps + // on different levels, more options can be + // set in the constructor call to the + // mg_smoother object. + // + // The last step results from the fact that + // we use the SOR method as a smoother - + // which is not symmetric - but we use the + // conjugate gradient iteration (which + // requires a symmetric preconditioner) + // below, we need to let the multilevel + // preconditioner make sure that we get a + // symmetric operator even for nonsymmetric + // smoothers: + typedef TrilinosWrappers::PreconditionSOR Smoother; + GrowingVectorMemory vector_memory; + MGSmootherPrecondition + mg_smoother(vector_memory); + mg_smoother.initialize(mg_matrices); + mg_smoother.set_steps(2); + mg_smoother.set_symmetric(true); + + // The next preparatory step is that we + // must wrap our level and interface + // matrices in an object having the + // required multiplication functions. We + // will create two objects for the + // interface objects going from coarse to + // fine and the other way around; the + // multigrid algorithm will later use the + // transpose operator for the latter + // operation, allowing us to initialize + // both up and down versions of the + // operator with the matrices we already + // built: + MGMatrix mg_matrix(&mg_matrices); + MGMatrix mg_interface_up(&mg_interface_matrices); + MGMatrix mg_interface_down(&mg_interface_matrices); + + // Now, we are ready to set up the + // V-cycle operator and the + // multilevel preconditioner. + Multigrid mg(mg_dof_handler, + mg_matrix, + coarse_grid_solver, + mg_transfer, + mg_smoother, + mg_smoother); + mg.set_edge_matrices(mg_interface_down, mg_interface_up); + + PreconditionMG > + preconditioner(mg_dof_handler, mg, mg_transfer); + + // With all this together, we can finally + // get about solving the linear system in + // the usual way: + SolverControl solver_control (1000, 1e-12); + SolverCG cg (solver_control); + + solution = 0; + + cg.solve (system_matrix, solution, system_rhs, + preconditioner); + constraints.distribute (solution); + } + + + + // @sect4{Postprocessing} + + // The following two functions postprocess a + // solution once it is computed. In + // particular, the first one refines the mesh + // at the beginning of each cycle while the + // second one outputs results at the end of + // each such cycle. The functions are almost + // unchanged from those in step-6, with the + // exception of two minor differences: The + // KellyErrorEstimator::estimate function + // wants an argument of type DoFHandler, not + // MGDoFHandler, and so we have to cast from + // derived to base class; and we generate + // output in VTK format, to use the more + // modern visualization programs available + // today compared to those that were + // available when step-6 was written. + template + void LaplaceProblem::refine_grid () + { + Vector estimated_error_per_cell (triangulation.n_active_cells()); + + KellyErrorEstimator::estimate (static_cast&>(mg_dof_handler), + QGauss(3), + typename FunctionMap::type(), + solution, + estimated_error_per_cell); + GridRefinement::refine_and_coarsen_fixed_number (triangulation, + estimated_error_per_cell, + 0.3, 0.03); + triangulation.execute_coarsening_and_refinement (); + } + + + + template + void LaplaceProblem::output_results (const unsigned int cycle) const + { + DataOut data_out; + + data_out.attach_dof_handler (mg_dof_handler); + data_out.add_data_vector (solution, "solution"); + data_out.build_patches (); + + std::ostringstream filename; + filename << "solution-" + << cycle + << ".vtk"; + + std::ofstream output (filename.str().c_str()); + data_out.write_vtk (output); + } + + + // @sect4{LaplaceProblem::run} + + // Like several of the functions above, this + // is almost exactly a copy of of the + // corresponding function in step-6. The only + // difference is the call to + // assemble_multigrid that takes + // care of forming the matrices on every + // level that we need in the multigrid + // method. + template + void LaplaceProblem::run () + { + for (unsigned int cycle=0; cycle<8; ++cycle) + { + deallog << "Cycle " << cycle << ':' << std::endl; + + if (cycle == 0) + { + GridGenerator::hyper_ball (triangulation); + + static const HyperBallBoundary boundary; + triangulation.set_boundary (0, boundary); + + triangulation.refine_global (1); + } + else + refine_grid (); + + + deallog << " Number of active cells: " + << triangulation.n_active_cells() + << std::endl; + + setup_system (); + + deallog << " Number of degrees of freedom: " + << mg_dof_handler.n_dofs() + << " (by level: "; + for (unsigned int level=0; level laplace_problem(1); + laplace_problem.run (); + } + catch (std::exception &exc) + { + std::cerr << std::endl << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/deal.II/include/deal.II/dofs/block_info.h b/deal.II/include/deal.II/dofs/block_info.h index 9738685202..835d5270e5 100644 --- a/deal.II/include/deal.II/dofs/block_info.h +++ b/deal.II/include/deal.II/dofs/block_info.h @@ -23,7 +23,6 @@ DEAL_II_NAMESPACE_OPEN // Forward declarations template class DoFHandler; -template class MGDoFHandler; namespace hp { template class DoFHandler; @@ -48,7 +47,7 @@ namespace hp * BlockIndices::block_start() will return the start index for each of * the blocks. * - * When an MGDoFHandler is used, the same structure is automatically + * When a DoFHandler with levels is used, the same structure is automatically * generated for each level. The level blocks can be accessed through * level(). * @@ -94,26 +93,25 @@ public: * describing block structure * of the DoFHandler. * + * By default, this function will + * attempt to initialize whatever + * is possible. If active dofs + * have been assigned int the + * DoFHandler argument, they + * BlockIndices for those will be + * generated. The same for level + * dofs. + * + * This default behavior can be + * overridden by the two + * parameters, which can switch + * off active dofs or level dofs. + * * This function will also clear * the local() indices. */ template - void initialize(const DoFHandler &); - - /** - * @brief Fill the object with values - * describing level block - * structure of the - * MGDoFHandler. If - * levels_only is false, - * the other initialize() is - * called as well. - * - * This function will also clear - * the local() indices. - */ - template - void initialize(const MGDoFHandler &, bool levels_only = false); + void initialize(const DoFHandler &, bool levels_only = false, bool active_only = false); /** * @brief Initialize block structure diff --git a/deal.II/include/deal.II/dofs/dof_accessor.h b/deal.II/include/deal.II/dofs/dof_accessor.h index d587001c98..beebb35966 100644 --- a/deal.II/include/deal.II/dofs/dof_accessor.h +++ b/deal.II/include/deal.II/dofs/dof_accessor.h @@ -120,32 +120,25 @@ namespace internal /** - * A class that gives access to the degrees of freedom stored in a DoFHandler - * or hp::DoFHandler object. Accessors are used to, well, access the data that + * A class that gives access to the degrees of freedom stored in a DoFHandler, + * MGSoDHandler, or hp::DoFHandler object. Accessors are used to, access the data that * pertains to edges, faces, and cells of a triangulation. The concept is * explained in more detail in connection to @ref Iterators. * - * This class follows mainly the route laid out by the accessor library - * declared in the triangulation library (TriaAccessor). It enables the user - * to access the degrees of freedom on lines, quads, or hexes. The first - * template argument of this class determines the dimensionality of the object - * under consideration: 1 for lines, 2 for quads, and 3 for hexes. From the - * second template argument we can deduce the dimensionality of the - * triangulation to which this object belongs as well as the dimensionality of - * the space in which it is embedded. The second argument also denotes the - * type of DoF handler we should work on. It can either be - * ::DoFHandler or hp::DoFHandler. + * This class follows mainly the route laid out by the accessor + * library declared in the triangulation library (TriaAccessor). It + * enables the user to access the degrees of freedom on lines, quads, + * or hexes. The first template argument of this class determines the + * dimensionality of the object under consideration: 1 for lines, 2 + * for quads, and 3 for hexes. The second argument denotes the type of + * DoF handler we should work on. It can either be ::DoFHandler or + * hp::DoFHandler. From the second template argument we also deduce + * the dimension of the Triangulation this object refers to as well as + * the dimension of the space into which it is embedded. Finally, the + * template argument level_dof_access governs the + * behavior of the function dof_indices(). See the section on Generic loops below. * - * Depending on whether the structural dimension of the object - * accessed equals the dimension on which the DoF handler object - * operates, this class is derived from CellAccessor or - * TriaAccessor. This means that, for example accessors to quads - * in 2d have access to all the mesh aspects of cells, whereas - * accessors to quads in 3d can only access things that make sense for - * faces. - * - * - *

Usage

+ *

Typedefs

* * Usage is best to happen through the typedefs to the various kinds * of iterators provided by the DoFHandler and hp::DoFHandler classes, @@ -153,6 +146,22 @@ namespace internal * template interface as well as providing easier typing (much less * complicated names!). * + *

Generic loops and the third template argument

+ * + * Many loops look very similar, whether they operate on the active + * dofs of the active cells of the Triangulation or on the level dodfs + * of a single level or the whole grid hierarchy. In order to use + * polymorphism in such loops, they access degrees of freedom through + * the function dof_indices(), which changes behavior according to the + * third template argument. If the argument is false, then the active + * dofs of active cells are accessed. If it is true, the level dofs + * are used. DoFHandler has functions, for instance begin() and + * begin_mg(), which return either type or the other. Additionally, + * they can be cast into each other, in case this is needed, since + * they access the same data. + * + * It is highly recommended to use the function dof_indices() in + * generic loops in lieu of get_dof_indices() or get_mg_dof_indices(). * *

Inheritance

* @@ -169,9 +178,9 @@ namespace internal * * @ingroup dofs * @ingroup Accessors - * @author Wolfgang Bangerth, 1998, 2006, 2008 + * @author Wolfgang Bangerth, 1998, 2006, 2008, Timo Heister, Guido Kanschat, 2012 */ -template +template class DoFAccessor : public dealii::internal::DoFAccessor::Inheritance::BaseClass { public: @@ -257,9 +266,16 @@ public: * make sense, just like the * previous one. */ - template - DoFAccessor (const DoFAccessor &); + template + DoFAccessor (const DoFAccessor &); + /** + * Copy constructor allowing to + * switch level access and active + * access. + */ + template + DoFAccessor(const DoFAccessor &); /** * @} */ @@ -276,7 +292,8 @@ public: * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const DoFAccessor &a); + template + void copy_from (const DoFAccessor &a); /** * Copy operator used by the @@ -287,11 +304,18 @@ public: */ void copy_from (const TriaAccessorBase &da); + /** + * Tell the caller whether + * dof_indices() accesses active + * or level dofs. + */ + static bool is_level_cell(); + /** * Return an iterator pointing to * the the parent. */ - TriaIterator > + TriaIterator > parent () const; /** @@ -305,7 +329,7 @@ public: * Return an iterator pointing to * the the @p c-th child. */ - TriaIterator > + TriaIterator > child (const unsigned int c) const; /** @@ -317,7 +341,7 @@ public: * function returns an iterator * to itself. */ - typename dealii::internal::DoFHandler::Iterators::line_iterator + typename dealii::internal::DoFHandler::Iterators::line_iterator line (const unsigned int i) const; /** @@ -329,7 +353,7 @@ public: * function returns an iterator * to itself. */ - typename dealii::internal::DoFHandler::Iterators::quad_iterator + typename dealii::internal::DoFHandler::Iterators::quad_iterator quad (const unsigned int i) const; /** @@ -417,6 +441,9 @@ public: void get_dof_indices (std::vector &dof_indices, const unsigned int fe_index = DH::default_fe_index) const; + void get_mg_dof_indices (const int level, std::vector &dof_indices, const unsigned int fe_index = DH::default_fe_index) const; + void set_mg_dof_indices (const int level, const std::vector &dof_indices, const unsigned int fe_index = DH::default_fe_index); + /** * Global DoF index of the i * degree associated with the @p vertexth @@ -457,6 +484,8 @@ public: const unsigned int i, const unsigned int fe_index = DH::default_fe_index) const; + unsigned int mg_vertex_dof_index (const int level, const unsigned int vertex, const unsigned int i, const unsigned int fe_index = DH::default_fe_index) const; + /** * Index of the ith degree * of freedom of this object. @@ -491,29 +520,31 @@ public: * freedom, and fe_index has to * match the result of * active_fe_index(). - * - * @note While the get_dof_indices() - * function returns an array that - * contains the indices of all degrees of - * freedom that somehow live on this - * object (i.e. on the vertices, edges or - * interior of this object), the current - * dof_index() function only considers - * the DoFs that really belong to this - * particular object's interior. In other - * words, as an example, if the current - * object refers to a quad (a cell in 2d, - * a face in 3d) and the finite element - * associated with it is a bilinear one, - * then the get_dof_indices() will return - * an array of size 4 while dof_index() - * will produce an exception because no - * degrees are defined in the interior of - * the face. + * + * @note While the get_dof_indices() + * function returns an array that + * contains the indices of all degrees of + * freedom that somehow live on this + * object (i.e. on the vertices, edges or + * interior of this object), the current + * dof_index() function only considers + * the DoFs that really belong to this + * particular object's interior. In other + * words, as an example, if the current + * object refers to a quad (a cell in 2d, + * a face in 3d) and the finite element + * associated with it is a bilinear one, + * then the get_dof_indices() will return + * an array of size 4 while dof_index() + * will produce an exception because no + * degrees are defined in the interior of + * the face. */ unsigned int dof_index (const unsigned int i, const unsigned int fe_index = DH::default_fe_index) const; + unsigned int mg_dof_index (const int level, const unsigned int i) const; + /** * @} */ @@ -646,17 +677,41 @@ protected: * to be accessed. */ DH *dof_handler; - - /** - * Compare for equality. - */ - bool operator == (const DoFAccessor &) const; - +public: /** - * Compare for inequality. - */ - bool operator != (const DoFAccessor &) const; - + * Compare for equality. Return + * true if the two + * accessors refer to the same object. + * + * The template parameters of this + * function allow for a comparison + * of very different + * objects. Therefore, some of them + * are disabled. + * Namely, if the dimension, or the dof + * handler of the two objects + * differ, an exception is + * generated. It can be + * expected that this is an + * unwanted comparison. + * + * The template parameter + * level_dof_access2 is ignored, such + * that an iterator with level + * access can be equal to one with + * access to the active degrees of + * freedom. + */ + template + bool operator == (const DoFAccessor &) const; + + /** + * Compare for inequality. The + * boolean not of operator==(). + */ + template + bool operator != (const DoFAccessor &) const; +protected: /** * Reset the DoF handler pointer. */ @@ -702,6 +757,8 @@ protected: const unsigned int index, const unsigned int fe_index = DH::default_fe_index) const; + void set_mg_dof_index (const int level, const unsigned int i, const unsigned int index) const; + /** * Set the global index of the i * degree on the @p vertex-th vertex of @@ -743,13 +800,15 @@ protected: const unsigned int index, const unsigned int fe_index = DH::default_fe_index) const; + void set_mg_vertex_dof_index (const int level, const unsigned int vertex, const unsigned int i, const unsigned int index, const unsigned int fe_index = DH::default_fe_index) const; + /** * Iterator classes need to be friends * because they need to access operator== * and operator!=. */ template friend class TriaRawIterator; - + template friend class DoFAccessor; private: /** @@ -769,8 +828,8 @@ private: * will give a linker error if used * anyway. */ - DoFAccessor & - operator = (const DoFAccessor &da); + DoFAccessor & + operator = (const DoFAccessor &da); /** * Make the DoFHandler class a friend so @@ -784,6 +843,7 @@ private: friend struct dealii::internal::DoFHandler::Implementation; friend struct dealii::internal::hp::DoFHandler::Implementation; friend struct dealii::internal::DoFCellAccessor::Implementation; + friend struct dealii::internal::DoFAccessor::Implementation; }; @@ -798,8 +858,8 @@ private: * * @author Wolfgang Bangerth, 2010 */ -template