-# $Id$
-#
-# Makefile for the whole library
+default:
++<<<<<<< .working
++=======
+ SHELL=/bin/bash
+
+ help:
+ @echo "========================================================================"
+ @echo "= Global Makefile for the deal.II libraries ="
+ @echo "========================================================================"
+ @echo "= ="
+ @echo "= The following targets exist: ="
+ @echo "= all : debug and optimized libraries ="
+ @echo "= debug : the debug version of the deal.II library ="
+ @echo "= optimized : the optimized version of the deal.II library ="
+ @echo "= ="
+ @echo "= contrib : additional libraries in contrib, if there are any ="
+ @echo "= ="
+ @echo "= online-doc : generate the documentation in HTML format ="
+ @echo "= TODO : create a \"TODO\" file from the source files ="
+ @echo "= TAGS : create a TAGS file from include and source files ="
+ @echo "= ="
+ @echo "= clean : removes all object files in subdirs ="
+ @echo "= distclean : removes all object files, libraries, etc in subdirs ="
+ @echo "========================================================================"
+
+ config.log: configure common/template-arguments.in common/dealiitemplates.pm.in
+ $(error Error: configuration not up to date. Please run ./configure or ./reconfigure)
+
+ deps: config.log
+ @cd common/scripts && $(MAKE) $(MAKEOPTIONS)
+ @cd source && if $(MAKE) $(MAKEOPTIONS) Makefile.dep;\
+ then : ;\
+ else rm Makefile.dep && $(MAKE) $(MAKEOPTIONS) Makefile.dep; fi
+ @cd lib && $(MAKE) $(MAKEOPTIONS) external-links
+ @if test ! -d lib/debug ; then mkdir -p lib/debug && echo "Created lib/debug" ; fi
+ @if test ! -d lib/optimized ; then mkdir -p lib/optimized && echo "Created lib/optimized" ; fi
+
+
+
+ all: debug optimized
+
+ debug: deps contrib
+ @cd source && $(MAKE) debug
+
+ optimized: deps contrib
+ @cd source && $(MAKE) optimized
+
+ contrib:
+ @cd contrib && $(MAKE)
+
+ online-doc doc:
+ cd doc && $(MAKE)
+ @echo
+ @echo
+ @echo =======================================================
+ @echo "The online documentation can now be accessed through"
+ @echo " doc/index.html"
+ @echo =======================================================
+ @echo
+ @echo
+
+ TAGS:
+ @cd common ; etags --language=c++ \
+ ../include/deal.II/*/*.h ../source/*/*.cc \
+ ../examples/*/*.cc ; \
+ perl -pi -e 's/ \* .*//g; s&[\t]*/\*.*&&g; s&[\t]*\*/.*&&g;' TAGS
+
+
+ clean: clean-contrib clean-source \
+ clean-doc clean-examples clean-lib clean-tests
+ -rm -f TODO common/TAGS
+
+ clean-contrib:
+ @cd contrib && $(MAKE) clean
+
+ clean-source:
+ @cd source && $(MAKE) CLEAN=yes clean
+
+ clean-doc:
+ @cd doc && $(MAKE) CLEAN=yes clean
+
+ clean-examples:
+ @cd examples && $(MAKE) CLEAN=yes clean
+
+ clean-lib:
+ @cd lib && $(MAKE) CLEAN=yes clean
+
+ # if that directory exists, go into 'tests' and clean up there as well
+ clean-tests:
+ @-cd tests && $(MAKE) clean
+
+ clean-common-scripts:
+ @cd common/scripts && $(MAKE) clean
+
+ distclean: clean
+ @cd lib && $(MAKE) distclean
+ @-cd tests && $(MAKE) distclean
+ @-rm source/*/*.inst
+ @$(MAKE) clean-common-scripts
+
+
+
+ # #############################################################################
+ # targets for build tests. these targets are supposed to be called for regular
+ # build tests that send their results back home to our build test server. note
+ # that this target is supposed to be called right after checking out a version
+ # from our CVS server, so at this time, common/Make.global_options doesn't
+ # exist yet (and isn't included at the top of this file, due to a
+ # conditional), and we first have to set up all this stuff.
+ #
+ # the way this target works is that it first generates a bunch of lines for
+ # the output file that will ultimately be sent home. it then calls ./configure
+ # and stashes away both the output and the return value. if ./configure
+ # succeeds, we extract a little more information concluding the
+ # header. irrespective of this, we then append the output of ./configure to
+ # the log file. if the call to ./configure failed, we send the result back
+ # home and exit.
+ #
+ # if ./configure succeeded, we then go on to the build-test-do target, which
+ # actually compiles something, and when we come back from there we send the
+ # whole thing over to the server
+ build-test:
+ echo AUTOMATED DEAL.II BUILD TEST | tee build-test-log
+ -(./configure $(BUILDTESTFLAGS) 2>&1) > build-test-config
+ echo BEGIN HEADER `date -u '+%Y-%m-%d %T'` | tee -a build-test-log
+ (cd common ; $(MAKE) BUILDTEST=yes -f Make.global_options print-summary) | tee -a build-test-log
+ echo END HEADER `date -u '+%Y-%m-%d %T'` | tee -a build-test-log
+ echo | tee -a build-test-log
+ echo BEGIN CONFIGURE OUTPUT `date -u '+%Y-%m-%d %T'` | tee -a build-test-log
+ cat build-test-config | tee -a build-test-log
+ echo END CONFIGURE OUTPUT `date -u '+%Y-%m-%d %T'` | tee -a build-test-log
+ echo | tee -a build-test-log
+ -$(MAKE) BUILDTEST= build-test-do 2>&1 | tee -a build-test-log
+
+ # target to do the actual compilation tests for an automated build test. build
+ # the library, the example programs, and the doxygen example programs. if the
+ # testsuite has been checked out, run that, too, and send the results to the
+ # testsuite server
+ build-test-do:
+ @echo BEGIN MAKE LIB OUTPUT `date -u '+%Y-%m-%d %T'`
+ $(MAKE) all
+ @echo END MAKE LIB OUTPUT `date -u '+%Y-%m-%d %T'`
+ @echo
+ @echo BEGIN MAKE EXAMPLES OUTPUT `date -u '+%Y-%m-%d %T'`
+ cd examples ; $(MAKE)
+ @echo END MAKE EXAMPLES OUTPUT `date -u '+%Y-%m-%d %T'`
+ @echo
+ @echo BEGIN MAKE RUN EXAMPLES OUTPUT `date -u '+%Y-%m-%d %T'`
+ cd examples/doxygen ; $(MAKE) run
+ @echo END MAKE RUN EXAMPLES OUTPUT `date -u '+%Y-%m-%d %T'`
+ @echo
+ @echo BUILD TEST SUCCESSFUL `date -u '+%Y-%m-%d %T'`
+
+
++>>>>>>> .merge-right.r27927
style-h-files:= $(wildcard include/deal.II/*/*.h)
style-cc-files:= $(wildcard source/*/*.cc)
style-examples:= $(wildcard examples/*/*.cc)
@DEAL_II_EXPAND_PETSC_MPI_BLOCKVECTOR@;
}
+EXTERNAL_SEQUENTIAL_VECTORS := { @DEAL_II_EXPAND_TRILINOS_VECTOR@;
+ @DEAL_II_EXPAND_TRILINOS_BLOCKVECTOR@;
+ @DEAL_II_EXPAND_PETSC_VECTOR@;
+ @DEAL_II_EXPAND_PETSC_BLOCKVECTOR@
+ }
+
+EXTERNAL_PARALLEL_VECTORS := { @DEAL_II_EXPAND_TRILINOS_MPI_VECTOR@;
+ @DEAL_II_EXPAND_TRILINOS_MPI_BLOCKVECTOR@;
+ @DEAL_II_EXPAND_PETSC_MPI_VECTOR@;
+ @DEAL_II_EXPAND_PETSC_MPI_BLOCKVECTOR@
+ }
+
+ VECTORS_WITH_MATRIX := { Vector<double>;
+ Vector<float> ;
+ Vector<long double>;
+
+ BlockVector<double>;
+ BlockVector<float>;
+ BlockVector<long double>;
+
+ @DEAL_II_EXPAND_TRILINOS_VECTOR@;
+ @DEAL_II_EXPAND_TRILINOS_MPI_VECTOR@;
+ }
+
DOFHANDLERS := { DoFHandler<deal_II_dimension>;
- hp::DoFHandler<deal_II_dimension>;
- MGDoFHandler<deal_II_dimension> }
+ hp::DoFHandler<deal_II_dimension> }
DOFHANDLER_TEMPLATES := { DoFHandler;
- hp::DoFHandler;
- MGDoFHandler }
+ hp::DoFHandler }
TRIANGULATION_AND_DOFHANDLER_TEMPLATES := { Triangulation;
DoFHandler;
<ul>
<li> <p> Documentation of the <a href="svn.html">SVN Archive</a> and
- information on <a href="http://www.dealii.org/changelogs/index.html"
- target="body">recent changes to the library</a>.</p>
- information on <a href="http://www.dealii.org/websvn/log.php?repname=deal.II+Repository&path=%2F&isdir=1&" target="_top">Recent changes to the library</a>: If you want to stay
- informed about what is going on with the library itself, you may want
- to take a look at this page. You can browse the repository and
- subscribe to an rss feed too.</p>
++ information on <a href="http://www.dealii.org/websvn/log.php?repname=deal.II+Repository&path=%2F&isdir=1&" target="_top">recent changes to the library</a>.
- <li> <p><a href="makefiles.html" target="body">Makefiles</a>:
- The library has a file which exports several make variables
- to Makefiles which include it. This information may be used
- to make writing Makefiles more portable and simple. The
- exported variables are explained in this page and we show two
- generic Makefiles, one for small and one for larger projects.
+ <li> <p>
+ <a href="cmake.html">deal.II CMake documentation</a>:
+ This page provides extensive information about usage and
+ development of the <acronym>deal.II</acronym> CMake build system.
+
+ <li> <p><a href="cmakelists.html" target="body">Example CMakeLists.txt</a>:
+ An overview of how to write the <code>CMakeLists.txt</code> input
+ files that control <code>cmake</code> if you want to use it for your
+ own project and want it to compile and link against
+ the <acronym>deal.II</acronym> library.
</p>
<li> <p><a href="writing-documentation.html" target="body">Writing
--- /dev/null
- <meta name="copyright" content="Copyright (C) 2008, 2009, 2010, 2011, 2012 by the deal.II authors">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <title>The deal.II Readme on interfacing to Trilinos</title>
+ <link href="../screen.css" rel="StyleSheet">
+ <meta name="author" content="the deal.II authors <authors @ dealii.org>">
- matrices and vectors. Versions tested to work are 10.4.2, 10.8.5, and
- 10.12.2. We recommend only using one of the tested versions for the time
- being.
++ <meta name="copyright" content="Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 by the deal.II authors">
+ <meta name="date" content="$Date$">
+ <meta name="svn_id" content="$Id$">
+ <meta name="keywords" content="deal.II">
+ </head>
+
+ <body>
+
+ <h1>Interfacing <acronym>deal.II</acronym> to Trilinos</h1>
+
+ <p>
+ <a href="http://trilinos.sandia.gov" target="_top">Trilinos</a> is a
+ software package that provides lots of functionality for linear
+ algebra, among other things. For example, it includes implementations of a variety of
+ linear solvers, as well as various different sparse and dense matrix and
+ vector formats. Trilinos also has many subpackages that deal with
+ problems that go far beyond linear algebra, for example nonlinear
+ solvers, automatic differentiation packages, uncertainty propagation
+ engines, etc. Of particular interest to deal.II is their ability to
+ provide this functionality both on sequential and parallel (using MPI)
+ computers. Compared to <a href="http://www.mcs.anl.gov/petsc/"
+ target="_top">PETSc</a>, which is written in C, Trilinos is written in
+ C++ and can be
+ considered to be a more modern version of PETSc though both packages are
+ under continuing development at their respective national laboratories.
+ </p>
+
+ <p>
+ <acronym>deal.II</acronym> has wrapper classes to the linear algebra
+ parts of Trilinos that provide almost the
+ same interfaces as the built-in <acronym>deal.II</acronym> linear
+ algebra classes. We use these interfaces for parallel computations based
+ on MPI since the native deal.II linear algebra classes lack this
+ ability. They are used, among other programs, in step-31 and step-32.
+ </p>
+
+ <p>
+ While building deal.II with Trilinos is covered in
+ the <a href="../readme.html">ReadMe file</a>, we here give an
+ introduction to building Trilinos in such a way that it contains
+ everything that we need from the <acronym>deal.II</acronym> side.
+ </p>
+
+
+ <h5>Installing Trilinos</h5>
+
+ <p style="color: red">
+ Note: Trilinos versions 10.6.x, 10.8.0, 10.8.1, 10.10.2, 10.12.1 are not
+ compatible with deal.II. They contain subtle bugs related to (parallel)
++ matrices and vectors. Versions tested to work are 10.4.2, 10.8.5,
++ 10.12.2, and 11.0.3. We recommend only using one of the tested versions
++ for the time being.
+ </p>
+
+ <p>
+ Trilinos uses <a href="http://cmake.org/">cmake</a> to configure and
+ build. The following slightly longish set of commands will set up a
+ reasonable configuration:
+ <pre>
+
+ cd trilinos-10.12.2
+ mkdir build
+ cd build
+
+ cmake -D Trilinos_ENABLE_OPTIONAL_PACKAGES:BOOL=ON \
+ -D Trilinos_ENABLE_Sacado:BOOL=ON \
+ -D Trilinos_ENABLE_Stratimikos:BOOL=ON \
+ -D CMAKE_BUILD_TYPE:STRING=RELEASE \
+ -D CMAKE_CXX_FLAGS:STRING="-g -O3" \
+ -D CMAKE_C_FLAGS:STRING="-g -O3" \
+ -D CMAKE_FORTRAN_FLAGS:STRING="-g -O5" \
+ -D Trilinos_EXTRA_LINK_FLAGS:STRING="-lgfortran" \
+ -D CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE \
+ -D Trilinos_VERBOSE_CONFIGURE:BOOL=FALSE \
+ -D TPL_ENABLE_MPI:BOOL=OFF \
+ -D CMAKE_INSTALL_PREFIX:PATH=/w/bangerth/share/x86_64/trilinos-10.12.2 \
+ -D BUILD_SHARED_LIBS:BOOL=ON ..
+
+ make
+ make install
+ </pre>
+ You will need to adjust the path into which you want to install Trilinos
+ in the second to last line of the cmake command.
+ </p>
+
+ <p>
+ <b>Using MPI:</b> If you
+ want to use Trilinos with MPI on parallel machines,
+ use <code>TPL_ENABLE_MPI=ON</code> instead.
+ </p>
+
+ <p>
+ <b>Parallel builds:</b>
+ If your computer has more than one processor core, use
+ <code>make -jN</code> instead of <code>make</code> in the last two lines
+ above, where <code>N</code> is the number of processors you have.
+ </p>
+
+ <p>
+ Trilinos sometimes searches for other libraries but can't find
+ them if they are not in the usual directories or have other
+ names. A common example are BLAS or LAPACK. In a case like
+ this, you may have to specifically pass the directories and/or
+ library names under which they can be found
+ to <code>cmake</code>. For example, this may mean to add the
+ following flags to the call above:
+ <pre>
+
+ -D BLAS_LIBRARY_NAMES:STRING=goto \
+ -D BLAS_LIBRARY_DIRS:STRING=/apps/GotoBLAS/lib64 \
+ -D LAPACK_LIBRARY_NAMES:STRING=lapack \
+ -D LAPACK_LIBRARY_DIRS:STRING=/apps/lapack-3.2.1/lib64
+ </pre>
+ </p>
+
+ <hr>
+
+ <address>
+ <a href="../mail.html" target="body">The deal.II Group</a>
+ $Date$
+ </address>
+ </body>
+</html>
void clear();
- void reinit (const MGDoFHandler<dim> &dof_handler,
+ void reinit (const DoFHandler<dim> &dof_handler,
- const ConstraintMatrix &constraints,
+ const ConstraintMatrix &constraints,
- const unsigned int level = numbers::invalid_unsigned_int);
+ const unsigned int level = numbers::invalid_unsigned_int);
unsigned int m () const;
unsigned int n () const;
// FEEvaluation class (and its template arguments) will be explained below.
template <int dim, int fe_degree, typename number>
void
- LaplaceOperator<dim,fe_degree,number>::reinit (const MGDoFHandler<dim> &dof_handler,
+ LaplaceOperator<dim,fe_degree,number>::reinit (const DoFHandler<dim> &dof_handler,
- const ConstraintMatrix &constraints,
+ const ConstraintMatrix &constraints,
const unsigned int level)
{
typename MatrixFree<dim,number>::AdditionalData additional_data;
//---------------------------------------------------------------------------
// $Id$
//
--// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 by the deal.II authors
++// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
//---------------------------------------------------------------------------
// $Id$
//
--// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 by the deal.II authors
++// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012, 2013 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
/*@}*/
- /* ----------------------- Inline functions of MGDoFHandler -------------------*/
-
- template <int dim, int spacedim>
- inline
- unsigned int MGDoFHandler<dim,spacedim>::n_dofs() const
- {
- return DoFHandler<dim,spacedim>::n_dofs();
- }
-
-
- template <int dim, int spacedim>
- inline
- void MGDoFHandler<dim,spacedim>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
- {
- return DoFHandler<dim,spacedim>::renumber_dofs (new_numbers);
- }
-
-
- /* ----------------------- Inline functions of MGVertexDoFs -------------------*/
-
- template <int dim, int spacedim>
- inline
- void MGDoFHandler<dim,spacedim>::MGVertexDoFs::set_index (const unsigned int level,
- const unsigned int dof_number,
- const unsigned int dofs_per_vertex,
- const unsigned int index)
- {
- Assert ((level >= coarsest_level) && (level <= finest_level),
- ExcInvalidLevel(level));
- Assert (dof_number < dofs_per_vertex,
- ExcIndexRange(dof_number, 0, dofs_per_vertex));
-
- indices[(level-coarsest_level)*dofs_per_vertex + dof_number] = index;
- }
-
-
- template <int dim, int spacedim>
- inline
- unsigned int
- MGDoFHandler<dim,spacedim>::MGVertexDoFs::get_index (const unsigned int level,
- const unsigned int dof_number,
- const unsigned int dofs_per_vertex) const
- {
- Assert ((level >= coarsest_level) && (level <= finest_level),
- ExcInvalidLevel(level));
- Assert (dof_number < dofs_per_vertex,
- ExcIndexRange (dof_number, 0, dofs_per_vertex));
-
- return indices[(level-coarsest_level)*dofs_per_vertex + dof_number];
- }
-
-
-
- template <>
- void MGDoFHandler<1>::renumber_dofs (const unsigned int level,
- const std::vector<unsigned int> &new_numbers);
- template <>
- void MGDoFHandler<2>::renumber_dofs (const unsigned int level,
- const std::vector<unsigned int> &new_numbers);
- template <>
- void MGDoFHandler<3>::renumber_dofs (const unsigned int level,
- const std::vector<unsigned int> &new_numbers);
+
DEAL_II_NAMESPACE_CLOSE
*/
template <int dim, int spacedim>
void
- make_boundary_list (const MGDoFHandler<dim,spacedim> &mg_dof,
+ make_boundary_list (const DoFHandler<dim,spacedim> &mg_dof,
const typename FunctionMap<dim>::type &function_map,
- std::vector<std::set<unsigned int> > &boundary_indices,
+ std::vector<std::set<unsigned int> > &boundary_indices,
const ComponentMask &component_mask = ComponentMask());
/**
*/
template <int dim, int spacedim>
void
- extract_inner_interface_dofs (const MGDoFHandler<dim,spacedim> &mg_dof_handler,
+ extract_inner_interface_dofs (const DoFHandler<dim,spacedim> &mg_dof_handler,
- std::vector<std::vector<bool> > &interface_dofs,
- std::vector<std::vector<bool> > &boundary_interface_dofs);
+ std::vector<std::vector<bool> > &interface_dofs,
+ std::vector<std::vector<bool> > &boundary_interface_dofs);
/**
* Does the same as the function above,
*/
template <int dim, int spacedim>
void
- extract_inner_interface_dofs (const MGDoFHandler<dim,spacedim> &mg_dof_handler,
+ extract_inner_interface_dofs (const DoFHandler<dim,spacedim> &mg_dof_handler,
- std::vector<std::vector<bool> > &interface_dofs);
+ std::vector<std::vector<bool> > &interface_dofs);
template <int dim, int spacedim>
void
- extract_non_interface_dofs (const MGDoFHandler<dim,spacedim> &mg_dof_handler,
+ extract_non_interface_dofs (const DoFHandler<dim,spacedim> &mg_dof_handler,
- std::vector<std::set<unsigned int> > &non_interface_dofs);
+ std::vector<std::set<unsigned int> > &non_interface_dofs);
}
/* @} */
// $Id$
// Version: $name$
//
--// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
--- /dev/null
- ## Copyright (C) 2012 by the deal.II authors
+#####
+##
- mg_dof_accessor.cc
++## Copyright (C) 2012, 2013 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## <TODO: Full License information>
+## This file is dual licensed under QPL 1.0 and LGPL 2.1 or any later
+## version of the LGPL license.
+##
+## Author: Matthias Maier <matthias.maier@iwr.uni-heidelberg.de>
+##
+#####
+
+SET(src
+ mg_base.cc
- mg_dof_accessor.inst.in
+ mg_dof_handler.cc
+ mg_tools.cc
+ mg_transfer_block.cc
+ mg_transfer_component.cc
+ mg_transfer_prebuilt.cc
+ multigrid.cc
+ )
+
+SET(inst_in_files
-
++ mg_base.inst.in
+ mg_dof_handler.inst.in
+ mg_tools.inst.in
+ mg_transfer_block.inst.in
+ mg_transfer_component.inst.in
+ mg_transfer_prebuilt.inst.in
++ multigrid.inst.in
+ )
+
+DEAL_II_ADD_LIBRARY(obj_multigrid OBJECT ${src})
+EXPAND_INSTANTIATIONS(obj_multigrid "${inst_in_files}")
// $Id$
// Version: $Name$
//
--// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 by the deal.II authors
++// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012, 2013 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
// $Id$
// Version: $Name$
//
--// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
//---------------------------------------------------------------------------
// $Id$
//
--// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 by the deal.II authors
++// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer