dnl BOOST uses long long, so don't warn about this
CXXFLAGSG="$CXXFLAGSG -Wno-long-long"
- dnl See whether the gcc we use already has a flag for C++2011 features.
+ dnl Newer versions have a flag -Wunused-local-typedefs that, though in principle
+ dnl a good idea, triggers a lot in BOOST in various places. Unfortunately,
+ dnl this warning is included in -W/-Wall, so disable it if the compiler
+ dnl supports it.
+ CXXFLAGS="-Wunused-local-typedefs"
+ AC_MSG_CHECKING(whether the compiler supports the -Wunused-local-typedefs flag)
+ AC_TRY_COMPILE(
+ [
+ ],
+ [;],
+ [
+ AC_MSG_RESULT(yes)
+ CXXFLAGSG="$CXXFLAGSG -Wno-unused-local-typedefs"
+ ],
+ [
+ AC_MSG_RESULT(no)
+ dnl Nothing to do here then. We can't disable it if the
+ dnl flag doesn't exist
+ ])
+
+
+ dnl See whether the gcc we use already has a flag for C++2011 features
+ dnl and whether we can mark functions as deprecated with an attributed
DEAL_II_CHECK_CXX1X
+ DEAL_II_CHECK_DEPRECATED
dnl On some gcc 4.3 snapshots, a 'const' qualifier on a return type triggers a
dnl somewhere in BOOST with BOOST_ASSERT. I have no idea
dnl what happens here
dnl #284: "NULL references not allowed"
- CXXFLAGSG="$CXXFLAGSG -DDEBUG -g --display_error_number --diag_suppress 68 --diag_suppress 111 --diag_suppress 128 --diag_suppress 155 --diag_suppress 177 --diag_suppress 175 --diag_suppress 185 --diag_suppress 236 --diag_suppress 284"
- CXXFLAGSO="$CXXFLAGSO -fast -O2 --display_error_number --diag_suppress 68 --diag_suppress 111 --diag_suppress 128 --diag_suppress 155 --diag_suppress 177 --diag_suppress 175 --diag_suppress 185 --diag_suppress 236 --diag_suppress 284"
+ dnl #497: "declaration of "dim" hides template parameter" (while
+ dnl theoretically useful, pgCC unfortunately gets this one
+ dnl wrong on legitimate code where no such parameter is
+ dnl hidden, see the email by ayaydemir on 9/3/2012)
+ CXXFLAGSG="$CXXFLAGSG -DDEBUG -g --display_error_number --diag_suppress 68 --diag_suppress 111 --diag_suppress 128 --diag_suppress 155 --diag_suppress 177 --diag_suppress 175 --diag_suppress 185 --diag_suppress 236 --diag_suppress 284 --diag_suppress 497"
+ CXXFLAGSO="$CXXFLAGSO -fast -O2 --display_error_number --diag_suppress 68 --diag_suppress 111 --diag_suppress 128 --diag_suppress 155 --diag_suppress 177 --diag_suppress 175 --diag_suppress 185 --diag_suppress 236 --diag_suppress 284 --diag_suppress 497"
CXXFLAGSPIC="-Kpic"
dnl pgCC can't (as of writing this, with version 12.5 in mid-2012) compile a part of BOOST.
dnl Given the command line flag specified as argument to this macro,
dnl test whether all components that we need from the C++1X
dnl standard are actually available. If so, add the flag to
-dnl CXXFLAGS.g and CXXFLAGS.o, and set a flag in config.h
+dnl CXXFLAGSG and CXXFLAGSO, and set a flag in config.h
dnl
dnl Usage: DEAL_II_CHECK_CXX1X_COMPONENTS(cxxflag)
dnl
])
+
+dnl -------------------------------------------------------------
+dnl See if the compiler understands the attribute to mark functions
+dnl as deprecated.
+dnl
+dnl Usage: DEAL_II_CHECK_DEPRECATED
+dnl
+dnl -------------------------------------------------------------
+AC_DEFUN(DEAL_II_CHECK_DEPRECATED, dnl
+[
+ AC_MSG_CHECKING(whether compiler has attributes to deprecate functions)
+
+
+ OLD_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS=""
+
+ dnl First see if the following compiles without error (it should
+ dnl produce a warning but we don't care about this
+ AC_TRY_COMPILE(
+ [
+ int old_fn () __attribute__((deprecated));
+ int old_fn ();
+ int (*fn_ptr)() = old_fn;
+ ],
+ [;],
+ [
+ test1=yes
+ ],
+ [
+ test1=no
+ ])
+
+ dnl Now try this again with -Werror. It should now fail
+ CXXFLAGS=-Werror
+ AC_TRY_COMPILE(
+ [
+ int old_fn () __attribute__((deprecated));
+ int old_fn ();
+ int (*fn_ptr)() = old_fn;
+ ],
+ [;],
+ [
+ test2=yes
+ ],
+ [
+ test2=no
+ ])
+ CXXFLAGS="${OLD_CXXFLAGS}"
+
+ if test "$test1$test2" = "yesno" ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(DEAL_II_DEPRECATED, [__attribute__((deprecated))],
+ [If the compiler supports this, then this variable is
+ defined to a string that when written after a function
+ name makes the compiler emit a warning whenever this
+ function is used somewhere that its use is deprecated.])
+ else
+ AC_MSG_RESULT(no)
+ AC_DEFINE(DEAL_II_DEPRECATED, [],
+ [If the compiler supports this, then this variable is
+ defined to a string that when written after a function
+ name makes the compiler emit a warning whenever this
+ function is used somewhere that its use is deprecated.])
+ fi
+])
+
+
+
dnl -------------------------------------------------------------
dnl Determine the C compiler in use. Return the name and possibly
dnl version of this compiler in CC_VERSION. This function is almost
clang)
CFLAGS="$CFLAGS -g"
- CFLAGSO="$CFLAGS -fast -O2"
+ CFLAGSO="$CFLAGS -O2"
CFLAGSPIC="-fPIC"
;;
AC_MSG_CHECKING(for dynamic_cast problem with shared libs)
if (cd contrib/config/tests/darwin-dynamic-cast ; \
+ echo $CXX > compile_line; \
$CXX -dynamiclib BaseClass.cpp -o libDynamicCastTestLib.dylib ; \
$CXX -L. -lDynamicCastTestLib main.cc -o main ; \
./main) ; then
AC_DEFINE(DEAL_II_HAVE_DARWIN_DYNACAST_BUG, 1,
[Defined if the compiler has a bug with dynamic casting
and dynamic libraries])
- CXXFLAGSG="$CXXFLAGSG -mmacosx-version-min=10.4"
- CXXFLAGSO="$CXXFLAGSO -mmacosx-version-min=10.4"
- LDFLAGS="$LDFLAGS -mmacosx-version-min=10.4"
+ if(test "`sw_vers -productVersion`" != "10.8");then
+ CXXFLAGSG="$CXXFLAGSG -mmacosx-version-min=10.4"
+ CXXFLAGSO="$CXXFLAGSO -mmacosx-version-min=10.4"
+ LDFLAGS="$LDFLAGS -mmacosx-version-min=10.4"
+ fi
fi
rm -f contrib/config/tests/darwin-dynamic-cast/libDynamicCastTestLib.dylib
rm -f contrib/config/tests/darwin-dynamic-cast/main.o
dnl from time-to-time; so make sure that what was specified is
dnl actually correct.
case "${DEAL_II_PETSC_VERSION_MAJOR}.${DEAL_II_PETSC_VERSION_MINOR}.${DEAL_II_PETSC_VERSION_SUBMINOR}" in
- 2.3*) dnl
- if test ! -d $DEAL_II_PETSC_DIR/lib/$DEAL_II_PETSC_ARCH \
- ; then
- AC_MSG_ERROR([PETSc has not been compiled for the architecture specified with --with-petsc-arch])
- fi
- ;;
3.*) dnl
if test ! -d $DEAL_II_PETSC_DIR/$DEAL_II_PETSC_ARCH/lib \
; then
dnl
dnl Like always, we have to cake care of version control!
case "${DEAL_II_PETSC_VERSION_MAJOR}.${DEAL_II_PETSC_VERSION_MINOR}.${DEAL_II_PETSC_VERSION_SUBMINOR}" in
- 2.3.*) dnl
- AC_TRY_COMPILE(
- [#include "$DEAL_II_PETSC_DIR/bmake/$DEAL_II_PETSC_ARCH/petscconf.h"
- ],
- [#ifdef PETSC_HAVE_MPIUNI
- compile error;
- #endif
- ],
- [AC_MSG_RESULT(yes)],
- [AC_MSG_ERROR([PETSc was not built for MPI, but deal.II is!]
- )])
- ;;
3.*) dnl
AC_TRY_COMPILE(
[#include "$DEAL_II_PETSC_DIR/$DEAL_II_PETSC_ARCH/include/petscconf.h"
esac
else
case "${DEAL_II_PETSC_VERSION_MAJOR}.${DEAL_II_PETSC_VERSION_MINOR}.${DEAL_II_PETSC_VERSION_SUBMINOR}" in
- 2.3*) dnl
- AC_TRY_COMPILE(
- [#include "$DEAL_II_PETSC_DIR/bmake/$DEAL_II_PETSC_ARCH/petscconf.h"
- ],
- [#ifndef PETSC_HAVE_MPIUNI
- compile error;
- #endif
- ],
- [AC_MSG_RESULT(yes)],
- [AC_MSG_ERROR([PETSc was built for MPI, but deal.II is not!]
- )])
- ;;
3.*) dnl
AC_TRY_COMPILE(
[#include "$DEAL_II_PETSC_DIR/$DEAL_II_PETSC_ARCH/include/petscconf.h"
[
AC_MSG_CHECKING([for PETSc libmpiuni library])
case "${DEAL_II_PETSC_VERSION_MAJOR}.${DEAL_II_PETSC_VERSION_MINOR}.${DEAL_II_PETSC_VERSION_SUBMINOR}" in
- 2.3*) dnl
- if test -f $DEAL_II_PETSC_DIR/lib/$DEAL_II_PETSC_ARCH/libmpiuni.a ; then
- DEAL_II_PETSC_MPIUNI_LIB="$DEAL_II_PETSC_DIR/lib/$DEAL_II_PETSC_ARCH/libmpiuni.a"
- fi
- ;;
3.*) dnl
if test -f $DEAL_II_PETSC_DIR/$DEAL_II_PETSC_ARCH/lib/libmpiuni.a ; then
DEAL_II_PETSC_MPIUNI_LIB="$DEAL_II_PETSC_DIR/$DEAL_II_PETSC_ARCH/lib/libmpiuni.a"
AC_DEFUN(DEAL_II_CONFIGURE_PETSC_COMPLEX, dnl
[
case "${DEAL_II_PETSC_VERSION_MAJOR}.${DEAL_II_PETSC_VERSION_MINOR}.${DEAL_II_PETSC_VERSION_SUBMINOR}" in
- 3.1*)
+ 3.3*)
AC_MSG_CHECKING([for PETSc scalar complex])
DEAL_II_PETSC_COMPLEX=`cat $DEAL_II_PETSC_DIR/$DEAL_II_PETSC_ARCH/include/petscconf.h \
| grep "#define PETSC_USE_COMPLEX" \
CXXFLAGS="${OLD_CXXFLAGS}"
])
+dnl ===========================================================================
+dnl http://www.gnu.org/software/autoconf-archive/ax_lib_hdf5.html
+dnl ===========================================================================
+dnl
+dnl SYNOPSIS
+dnl
+dnl AX_LIB_HDF5([serial/parallel])
+dnl
+dnl DESCRIPTION
+dnl
+dnl This macro provides tests of the availability of HDF5 library.
+dnl
+dnl The optional macro argument should be either 'serial' or 'parallel'. The
+dnl former only looks for serial HDF5 installations via h5cc. The latter
+dnl only looks for parallel HDF5 installations via h5pcc. If the optional
+dnl argument is omitted, serial installations will be preferred over
+dnl parallel ones.
+dnl
+dnl The macro adds a --with-hdf5 option accepting one of three values:
+dnl
+dnl no - do not check for the HDF5 library.
+dnl yes - do check for HDF5 library in standard locations.
+dnl path - complete path to where lib/libhdf5* libraries and
+dnl include/H5* include files reside.
+dnl
+dnl If HDF5 is successfully found, this macro calls
+dnl
+dnl AC_SUBST(DEAL_II_HDF5_VERSION)
+dnl AC_SUBST(DEAL_II_HDF5_CFLAGS)
+dnl AC_SUBST(DEAL_II_HDF5_CPPFLAGS)
+dnl AC_SUBST(DEAL_II_HDF5_LDFLAGS)
+dnl AC_SUBST(DEAL_II_HDF5_INCDIR)
+dnl AC_DEFINE(DEAL_II_HAVE_HDF5)
+dnl
+dnl and sets with_hdf5="yes".
+dnl
+dnl If HDF5 is disabled or not found, this macros sets with_hdf5="no".
+dnl
+dnl Your configuration script can test $with_hdf to take any further
+dnl actions. HDF5_{C,CPP,LD}FLAGS may be used when building with C or C++.
+dnl
+dnl LICENSE
+dnl
+dnl Copyright (c) 2009 Timothy Brown <tbrown@freeshell.org>
+dnl Copyright (c) 2010 Rhys Ulerich <rhys.ulerich@gmail.com>
+dnl
+dnl Copying and distribution of this file, with or without modification, are
+dnl permitted in any medium without royalty provided the copyright notice
+dnl and this notice are preserved. This file is offered as-is, without any
+dnl warranty.
+
+AC_DEFUN(DEAL_II_CONFIGURE_HDF5, dnl
+[
+
+AC_REQUIRE([AC_PROG_SED])
+AC_REQUIRE([AC_PROG_AWK])
+AC_REQUIRE([AC_PROG_GREP])
+
+dnl Add a default --with-hdf5 configuration option.
+AC_ARG_WITH([hdf5],
+ AS_HELP_STRING(
+ [--with-hdf5=[yes/no/PATH]],
+ m4_case(m4_normalize([$1]),
+ [serial], [location of h5cc for serial HDF5 configuration],
+ [parallel], [location of h5pcc for parallel HDF5 configuration],
+ [location of h5cc or h5pcc for HDF5 configuration])
+ ),
+ [if test "$withval" = "no"; then
+ with_hdf5="no"
+ elif test "$withval" = "yes"; then
+ with_hdf5="yes"
+ warn_if_cannot_find_hdf5="yes"
+ elif test -z "$withval"; then
+ with_hdf5="yes"
+ H5CC="$withval"
+ else
+ warn_if_cannot_find_hdf5="yes"
+ with_hdf5="yes"
+ H5CC="$withval"
+ fi],
+ [with_hdf5="yes"]
+)
+
+dnl Set defaults to blank
+USE_CONTRIB_HDF5=no
+DEAL_II_HDF5_VERSION=""
+DEAL_II_HDF5_CFLAGS=""
+DEAL_II_HDF5_CPPFLAGS=""
+DEAL_II_HDF5_LDFLAGS=""
+DEAL_II_HDF5_INCDIR=""
+
+dnl Try and find hdf5 compiler tools and options.
+if test "$with_hdf5" = "yes"; then
+ if test -z "$H5CC"; then
+ dnl Check to see if H5CC is in the path.
+ AC_PATH_PROGS(
+ [H5CC],
+ m4_case(m4_normalize([$1]),
+ [serial], [h5cc],
+ [parallel], [h5pcc],
+ [h5cc h5pcc]),
+ [])
+ else
+ AC_MSG_CHECKING([Using provided HDF5 C wrapper])
+ AC_MSG_RESULT([$H5CC])
+ fi
+ AC_MSG_CHECKING([for HDF5 libraries])
+ if test ! -x "$H5CC"; then
+ AC_MSG_RESULT([no])
+ if test "$warn_if_cannot_find_hdf5" = "yes"; then
+ AC_MSG_WARN(m4_case(m4_normalize([$1]),
+ [serial], [
+Unable to locate serial HDF5 compilation helper script 'h5cc'.
+Please specify --with-hdf5=<LOCATION> as the full path to h5cc.
+HDF5 support is being disabled (equivalent to --with-hdf5=no).
+], [parallel],[
+Unable to locate parallel HDF5 compilation helper script 'h5pcc'.
+Please specify --with-hdf5=<LOCATION> as the full path to h5pcc.
+HDF5 support is being disabled (equivalent to --with-hdf5=no).
+], [
+Unable to locate HDF5 compilation helper scripts 'h5cc' or 'h5pcc'.
+Please specify --with-hdf5=<LOCATION> as the full path to h5cc or h5pcc.
+HDF5 support is being disabled (equivalent to --with-hdf5=no).
+]))
+ fi
+ with_hdf5="no"
+ else
+ dnl h5cc provides both AM_ and non-AM_ options
+ dnl depending on how it was compiled either one of
+ dnl these are empty. Lets roll them both into one.
+
+ dnl Look for "HDF5 Version: X.Y.Z"
+ DEAL_II_HDF5_VERSION=$(eval $H5CC -showconfig | grep 'HDF5 Version:' \
+ | $AWK '{print $[]3}')
+
+dnl A ideal situation would be where everything we needed was
+dnl in the AM_* variables. However most systems are not like this
+dnl and seem to have the values in the non-AM variables.
+dnl
+dnl We try the following to find the flags:
+dnl (1) Look for "NAME:" tags
+dnl (2) Look for "NAME/H5_NAME:" tags
+dnl (3) Look for "AM_NAME:" tags
+dnl
+ dnl (1)
+ dnl Look for "CFLAGS: "
+ DEAL_II_HDF5_CFLAGS=$(eval $H5CC -showconfig | grep '\bCFLAGS:' \
+ | $AWK -F: '{print $[]2}')
+ dnl Look for "CPPFLAGS"
+ DEAL_II_HDF5_CPPFLAGS=$(eval $H5CC -showconfig | grep '\bCPPFLAGS:' \
+ | $AWK -F: '{print $[]2}')
+ dnl Look for "LD_FLAGS"
+ DEAL_II_HDF5_LDFLAGS=$(eval $H5CC -showconfig | grep '\bLDFLAGS:' \
+ | $AWK -F: '{print $[]2}')
+
+ dnl (2)
+ dnl CFLAGS/H5_CFLAGS: .../....
+ dnl We could use $SED with something like the following
+ dnl 's/CFLAGS.*\/H5_CFLAGS.*[:]\(.*\)\/\(.*\)/\1/p'
+ if test -z "$DEAL_II_HDF5_CFLAGS"; then
+ DEAL_II_HDF5_CFLAGS=$(eval $H5CC -showconfig \
+ | $SED -n 's/CFLAGS.*[:]\(.*\)\/\(.*\)/\1/p')
+ fi
+ dnl Look for "CPPFLAGS"
+ if test -z "$DEAL_II_HDF5_CPPFLAGS"; then
+ DEAL_II_HDF5_CPPFLAGS=$(eval $H5CC -showconfig \
+ | $SED -n 's/CPPFLAGS.*[:]\(.*\)\/\(.*\)/\1/p')
+ fi
+ dnl Look for "LD_FLAGS"
+ if test -z "$DEAL_II_HDF5_LDFLAGS"; then
+ DEAL_II_HDF5_LDFLAGS=$(eval $H5CC -showconfig \
+ | $SED -n 's/LDFLAGS.*[:]\(.*\)\/\(.*\)/\1/p')
+ fi
+
+ dnl (3)
+ dnl Check to see if these are not empty strings. If so
+ dnl find the AM_ versions and use them.
+ if test -z "$DEAL_II_HDF5_CFLAGS"; then
+ DEAL_II_HDF5_CFLAGS=$(eval $H5CC -showconfig \
+ | grep '\bAM_CFLAGS:' | $AWK -F: '{print $[]2}')
+ fi
+ if test -z "$DEAL_II_HDF5_CPPFLAGS"; then
+ DEAL_II_HDF5_CPPFLAGS=$(eval $H5CC -showconfig \
+ | grep '\bAM_CPPFLAGS:' | $AWK -F: '{print $[]2}')
+ fi
+ if test -z "$DEAL_II_HDF5_LDFLAGS"; then
+ DEAL_II_HDF5_LDFLAGS=$(eval $H5CC -showconfig \
+ | grep '\bAM_LDFLAGS:' | $AWK -F: '{print $[]2}')
+ fi
+
+ dnl Frustratingly, the necessary -Idir,-Ldir still may not be found!
+ dnl Attempt to pry any more required include directories from wrapper.
+ for arg in `$H5CC -c -show`
+ do
+ case "$arg" in #(
+ -I*) echo $DEAL_II_HDF5_CPPFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \
+ || DEAL_II_HDF5_CPPFLAGS="$arg $DEAL_II_HDF5_CPPFLAGS"
+ ;;
+ esac
+ done
+ for arg in `$H5CC -show`
+ do
+ case "$arg" in #(
+ -L*) echo $DEAL_II_HDF5_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \
+ || DEAL_II_HDF5_LDFLAGS="$arg $DEAL_II_HDF5_LDFLAGS"
+ ;;
+ esac
+ done
+
+ AC_MSG_RESULT([yes (version $[DEAL_II_HDF5_VERSION])])
+
+ dnl Look for any extra libraries also needed to link properly
+ EXTRA_LIBS=$(eval $H5CC -showconfig | grep 'Extra libraries:'\
+ | $AWK -F: '{print $[]2}')
+
+ dnl Look for HDF5's high level library
+ ax_lib_hdf5_save_LDFLAGS=$LDFLAGS
+ ax_lib_hdf5_save_LIBS=$LIBS
+ LDFLAGS=$DEAL_II_HDF5_LDFLAGS
+ AC_HAVE_LIBRARY([hdf5_hl],
+ [DEAL_II_HDF5_LDFLAGS="$DEAL_II_HDF5_LDFLAGS -lhdf5_hl"],
+ [],
+ [-lhdf5 $EXTRA_LIBS])
+ LIBS=$ax_lib_hdf5_save_LIBS
+ LDFLAGS=$ax_lib_hdf5_save_LDFLAGS
+
+ dnl Add the HDF5 library itself
+ DEAL_II_HDF5_LDFLAGS="$DEAL_II_HDF5_LDFLAGS -lhdf5"
+
+ dnl Add any EXTRA_LIBS afterwards
+ if test "$EXTRA_LIBS"; then
+ DEAL_II_HDF5_LDFLAGS="$DEAL_II_HDF5_LDFLAGS $EXTRA_LIBS"
+ fi
+
+ dnl remove "-I" from cpp flags to get include path
+ DEAL_II_HDF5_INCDIR=$(eval echo $DEAL_II_HDF5_CPPFLAGS | cut -c 3-)
+
+ LDFLAGS="$LDFLAGS $DEAL_II_HDF5_LDFLAGS"
+ USE_CONTRIB_HDF5=yes
+ AC_DEFINE([DEAL_II_HAVE_HDF5], [1], [Defined if you have HDF5 support])
+ fi
+fi
+])
+
+
+
dnl ------------------------------------------------------------
AC_ARG_WITH(metis,
[AS_HELP_STRING([--with-metis=/path/to/metis],
- [Specify the path to the Metis installation, of which the include and library directories are subdirs; use this if you want to override the METIS_DIR environment variable.])],
+ [Specify the path to the Metis installation, of which the include and library directories are subdirs; use this if you want to override the METIS_DIR environment variable.])],
[
+ AC_MSG_CHECKING([for METIS library directory])
USE_CONTRIB_METIS=yes
DEAL_II_METIS_DIR="$withval"
AC_MSG_RESULT($DEAL_II_METIS_DIR)
- dnl Make sure that what was specified is actually correct
- if test ! -d $DEAL_II_METIS_DIR/Lib ; then
+ dnl Make sure that what was specified is actually correct. The
+ dnl libraries could be in either $DEAL_II_METIS_DIR/lib (metis was
+ dnl make installed) or $DEAL_II_METIS_DIR/libmetis (metis was make
+ dnl only and PETSc).
+ if test ! -d $DEAL_II_METIS_DIR/lib \
+ && test ! -d $DEAL_II_METIS_DIR/libmetis ; then
AC_MSG_ERROR([Path to Metis specified with --with-metis does not point to a complete Metis installation])
fi
- DEAL_II_METIS_LIBDIR="$DEAL_II_METIS_DIR"
+ dnl If lib is not found, we must have libraries in libmetis
+ dnl (which was found above).
+ if test -d $DEAL_II_METIS_DIR/lib ; then
+ DEAL_II_METIS_LIBDIR="$DEAL_II_METIS_DIR/lib"
+ else
+ DEAL_II_METIS_LIBDIR="$DEAL_II_METIS_DIR/libmetis"
+ fi
+
+ if test ! -d $DEAL_II_METIS_DIR/include ; then
+ AC_MSG_ERROR([Path to Metis specified with --with-metis does not point to a complete Metis installation])
+ fi
+
+ DEAL_II_METIS_INCDIR="$DEAL_II_METIS_DIR/include"
],
[
dnl Take something from the environment variables, if it is there
if test "x$METIS_DIR" != "x" ; then
+ AC_MSG_CHECKING([for METIS from the environment])
USE_CONTRIB_METIS=yes
DEAL_II_METIS_DIR="$METIS_DIR"
AC_MSG_RESULT($DEAL_II_METIS_DIR)
- dnl Make sure that what this is actually correct
- if test ! -d $DEAL_II_METIS_DIR/Lib ; then
+ dnl Make sure that what this is actually correct (see notes above).
+ if test ! -d $DEAL_II_METIS_DIR/lib \
+ && test ! -d $DEAL_II_METIS_DIR/libmetis ; then
AC_MSG_ERROR([The path to Metis specified in the METIS_DIR environment variable does not point to a complete Metis installation])
fi
- DEAL_II_METIS_LIBDIR="$DEAL_II_METIS_DIR"
- else
- USE_CONTRIB_METIS=no
- DEAL_II_METIS_DIR=""
- fi
- ])
- AC_ARG_WITH(metis-libs,
- [AS_HELP_STRING([--with-metis-libs=/path/to/metis],
- [Specify the path to the METIS libraries; use this if you want to override the METIS_LIBDIR environment variable.])],
- [
- USE_CONTRIB_METIS=yes
- DEAL_II_METIS_LIBDIR="$withval"
- AC_MSG_RESULT($DEAL_II_METIS_LIBDIR)
+ if test -d $DEAL_II_METIS_DIR/lib ; then
+ DEAL_II_METIS_LIBDIR="$DEAL_II_METIS_DIR/lib"
+ else
+ DEAL_II_METIS_LIBDIR="$DEAL_II_METIS_DIR/libmetis"
+ fi
- dnl Make sure that what was specified is actually correct
- if test ! -d $DEAL_II_METIS_LIBDIR ; then
- AC_MSG_ERROR([Path to Metis specified with --with-metis does not point to a complete Metis installation])
- fi
- ],
- [
- dnl Take something from the environment variables, if it is there
- if test "x$METIS_LIBDIR" != "x" ; then
- USE_CONTRIB_METIS=yes
- DEAL_II_METIS_LIBDIR="$METIS_LIBDIR"
- AC_MSG_RESULT($DEAL_II_METIS_LIBDIR)
+ DEAL_II_METIS_INCDIR="$DEAL_II_METIS_DIR/include"
- dnl Make sure that what this is actually correct
- if test ! -d $DEAL_II_METIS_LIBDIR ; then
- AC_MSG_ERROR([The path to Metis specified in the METIS_DIR environment variable does not point to a complete Metis installation])
- fi
else
- dnl Unless --with-metis has been set before, declare that METIS
- dnl is not desired.
- if test "x$USE_CONTRIB_METIS" != "xyes" ; then
- USE_CONTRIB_METIS=no
- DEAL_II_METIS_LIBDIR=""
- fi
+ USE_CONTRIB_METIS=no
+ DEAL_II_METIS_DIR=""
fi
])
to be used])
LDFLAGS="$LDFLAGS -L$DEAL_II_METIS_LIBDIR -lmetis"
+ if test "x$DEAL_II_LD_UNDERSTANDS_RPATH" = "xyes" ; then
+ LDFLAGS="$LDFLAGS $LD_PATH_OPTION$DEAL_II_METIS_LIBDIR"
+ fi
+
dnl AC_MSG_CHECKING(for Metis version)
dnl DEAL_II_METIS_VERSION=`cat $DEAL_II_METIS_DIR/VERSION`
dnl AC_MSG_RESULT($DEAL_II_METIS_VERSION)
DEAL_II_TRILINOS_VERSION_SUBMINOR = @DEAL_II_TRILINOS_VERSION_SUBMINOR@
DEAL_II_TRILINOS_LIBPREFIX = @DEAL_II_TRILINOS_LIBPREFIX@
+USE_CONTRIB_HDF5 = @USE_CONTRIB_HDF5@
+DEAL_II_HDF5_VERSION = @DEAL_II_HDF5_VERSION@
+DEAL_II_HDF5_CFLAGS = @DEAL_II_HDF5_CFLAGS@
+DEAL_II_HDF5_CPPFLAGS = @DEAL_II_HDF5_CPPFLAGS@
+DEAL_II_HDF5_LDFLAGS = @DEAL_II_HDF5_LDFLAGS@
+DEAL_II_HDF5_INCDIR = @DEAL_II_HDF5_INCDIR@
+
USE_CONTRIB_BLAS = @USE_CONTRIB_BLAS@
USE_CONTRIB_LAPACK = @USE_CONTRIB_LAPACK@
DEAL_II_ARPACK_ARCH = @DEAL_II_ARPACK_ARCH@
USE_CONTRIB_METIS = @USE_CONTRIB_METIS@
+DEAL_II_METIS_DIR = @DEAL_II_METIS_DIR@
DEAL_II_METIS_LIBDIR = @DEAL_II_METIS_LIBDIR@
+DEAL_II_METIS_INCDIR = @DEAL_II_METIS_INCDIR@
USE_CONTRIB_HSL = @USE_CONTRIB_HSL@
USE_CONTRIB_UMFPACK = @USE_CONTRIB_UMFPACK@
# we can link to directly. This avoids problems with recent versions
# of gcc.
ifeq ($(USE_CONTRIB_PETSC),yes)
- ifeq ($(DEAL_II_PETSC_VERSION_MAJOR),2)
- lib-contrib-petsc-path.g = $(DEAL_II_PETSC_DIR)/lib/$(DEAL_II_PETSC_ARCH)
- lib-contrib-petsc-path.o = $(DEAL_II_PETSC_DIR)/lib/$(DEAL_II_PETSC_ARCH)
- else
- lib-contrib-petsc-path.g = $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib
- lib-contrib-petsc-path.o = $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib
- endif
+ lib-contrib-petsc-path.g = $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib
+ lib-contrib-petsc-path.o = $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib
ifeq ($(enable-shared),yes)
- # Starting with PETSc versions 2.3.*:
- ifeq ($(DEAL_II_PETSC_VERSION_MAJOR),2)
- lib-contrib-petsc.g = $(shell echo $(DEAL_II_PETSC_DIR)/lib/$(DEAL_II_PETSC_ARCH)/*$(lib-suffix))
- lib-contrib-petsc.o = $(shell echo $(DEAL_II_PETSC_DIR)/lib/$(DEAL_II_PETSC_ARCH)/*$(lib-suffix))
+ # Starting with PETSc versions 3.0.0:
+ ifeq ($(DEAL_II_PETSC_VERSION_MAJOR)$(DEAL_II_PETSC_VERSION_MINOR),30)
+ lib-contrib-petsc.g = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/*$(lib-suffix))
+ lib-contrib-petsc.o = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/*$(lib-suffix))
else
- # which is the similar as for PETSc 3.0.0:
- ifeq ($(DEAL_II_PETSC_VERSION_MAJOR)$(DEAL_II_PETSC_VERSION_MINOR),30)
- lib-contrib-petsc.g = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/*$(lib-suffix))
- lib-contrib-petsc.o = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/*$(lib-suffix))
- else
- # but after that (petsc-3.1++), we can use the simpler PETSc
- # default "--with-single-library=1" like this:
- lib-contrib-petsc.g = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/libpetsc$(lib-suffix))
- lib-contrib-petsc.o = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/libpetsc$(lib-suffix))
- endif
- endif # if PETSC_VERSION
+ # but after that (petsc-3.1++), we can use the simpler PETSc
+ # default "--with-single-library=1" like this:
+ lib-contrib-petsc.g = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/libpetsc$(lib-suffix))
+ lib-contrib-petsc.o = $(shell echo $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/lib/libpetsc$(lib-suffix))
+ endif
else
# and finally this goes for static libraries
lib-contrib-petsc.g = $(LIBDIR)/libpetscall.g$(lib-suffix)
# same for metis, except that there is only one library in that case
ifeq ($(USE_CONTRIB_METIS),yes)
- lib-contrib-metis = $(DEAL_II_METIS_LIBDIR)/libmetis.a
+ lib-contrib-metis = $(DEAL_II_METIS_LIBDIR)/libmetis$(lib-suffix)
endif
# List all trilinos libraries that we want to link with. These must be sorted
# environment variable, since the compiler will evaluate the value of
# that anyway at compile time
include-path-petsc = $(DEAL_II_PETSC_DIR)/include
-ifeq ($(DEAL_II_PETSC_VERSION_MAJOR),2)
- include-path-petsc-bmake = $(DEAL_II_PETSC_DIR)/bmake/$(DEAL_II_PETSC_ARCH)
-else
- include-path-petsc-bmake = $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/include
-endif
+include-path-petsc-bmake = $(DEAL_II_PETSC_DIR)/$(DEAL_II_PETSC_ARCH)/include
include-path-slepc = $(DEAL_II_SLEPC_DIR)/include
include-path-slepc-bmake = $(DEAL_II_SLEPC_DIR)/$(DEAL_II_PETSC_ARCH)/include
include-path-slepc-conf = $(DEAL_II_SLEPC_DIR)/$(DEAL_II_PETSC_ARCH)/conf
include-path-trilinos = $(DEAL_II_TRILINOS_INCDIR)
include-path-mumps = $(DEAL_II_MUMPS_DIR)/include
+include-path-metis = $(DEAL_II_METIS_INCDIR)
+include-path-hdf5 = $(DEAL_II_HDF5_INCDIR)
+
# include paths as command line flags. while compilers allow a space between
# the '-I' and the actual path, we also send these flags to the
#
# also, note that this only works for PETSc before 2.3 :-]
ifeq ($(USE_CONTRIB_PETSC),yes)
- ifeq ($(DEAL_II_PETSC_VERSION_MAJOR)$(DEAL_II_PETSC_VERSION_MINOR),22)
- include $(DEAL_II_PETSC_DIR)/bmake/$(DEAL_II_PETSC_ARCH)/packages
- endif
INCLUDE += -I$(include-path-petsc) \
-I$(include-path-petsc-bmake) \
$(MPI_INCLUDE)
INCLUDE += -I$(include-path-mumps)
endif
+ifeq ($(USE_CONTRIB_METIS),yes)
+ INCLUDE += -I$(include-path-metis)
+endif
+
+ifeq ($(USE_CONTRIB_HDF5),yes)
+ INCLUDE += -I$(include-path-hdf5)
+endif
+
+
ifeq ($(enable-threads),yes)
INCLUDE += -I$(shell echo $D/contrib/tbb/tbb*/include)
endif
# set PETSC_DIR and PETSC_ARCH to be used in variables file
PETSC_DIR = $(DEAL_II_PETSC_DIR)
PETSC_ARCH = $(DEAL_II_PETSC_ARCH)
- ifeq ($(DEAL_II_PETSC_VERSION_MAJOR),2)
- ifeq ($(DEAL_II_PETSC_VERSION_MINOR),2)
- include $(DEAL_II_PETSC_DIR)/bmake/$(DEAL_II_PETSC_ARCH)/variables
- else
- include $(DEAL_II_PETSC_DIR)/bmake/common/variables
- endif
- else
- # PETSC's $(PETSC_ARCH)/conf/petscvariables include file happens
- # to have a variable $(CXX) of itself. we need to save our own
- # variable and restore it later. this isn't pretty :-(
- SAVE_CXX := $(CXX)
- include $(DEAL_II_PETSC_DIR)/conf/variables
- CXX := $(SAVE_CXX)
- endif
+
+ # PETSC's $(PETSC_ARCH)/conf/petscvariables include file happens
+ # to have a variable $(CXX) of itself. we need to save our own
+ # variable and restore it later. this isn't pretty :-(
+ SAVE_CXX := $(CXX)
+ include $(DEAL_II_PETSC_DIR)/conf/variables
+ CXX := $(SAVE_CXX)
+
CXXFLAGS.g += $(GCXX_PETSCFLAGS)
CXXFLAGS.o += $(OCXX_PETSCFLAGS)
endif
+ifeq ($(USE_CONTRIB_HDF5),yes)
+ CFLAGS.g += $(DEAL_II_HDF5_CFLAGS)
+ CFLAGS.o += $(DEAL_II_HDF5_CFLAGS)
+ CXXFLAGS.g += $(DEAL_II_HDF5_CXXFLAGS)
+ CXXFLAGS.o += $(DEAL_II_HDF5_CXXFLAGS)
+endif
+
ifneq ($(enable-threads),no)
MT = MT
else
ifeq ($(BUILDTEST),yes)
print-summary:
- @echo "dealii-feature: revision=`svn info .. | grep Revision | sed 's/Revision: //'`"
+ @svn info .. | perl -ne 'print "dealii-feature: revision=$$_\n" if s/Revision: //; print "dealii-feature: branch=$$1\n" if m/svn\/dealii\/(.+)\/deal.II/;'
@echo "dealii-feature: user=$(USER)"
@echo "dealii-feature: host=`hostname`"
@echo "dealii-feature: target=$(TARGET)"
@echo "dealii-feature: compiler=$(GXX-VERSION-DETAILED)"
@echo "dealii-feature: multithreading=$(enable-threads)"
@echo "dealii-feature: shared_libs=$(enable-shared)"
- @echo "dealii-feature: parser=$(subst no,,$(enable-parser))"
- @echo "dealii-feature: PETSc=$(subst ..,,$(DEAL_II_PETSC_VERSION_MAJOR).$(DEAL_II_PETSC_VERSION_MINOR).$(DEAL_II_PETSC_VERSION_SUBMINOR))"
@echo "dealii-feature: METIS=$(subst no,,$(USE_CONTRIB_METIS))"
@cd $D/common/scripts ; make report_features && ./report_features
endif
// $Id$
// Version: $Name$
//
-// Copyright (C) 2010, 2011 by the deal.II authors
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
# include <slepcversion.h>
#endif
+// Output configuration options from config.h.
+// The format of each line is
+//
+// deal-feature: FEATURE=value
+//
+// no spaces in any token!
int main()
{
#if defined(DEAL_II_COMPILER_SUPPORTS_MPI)
# ifdef OMPI_MAJOR_VERSION
- std::cout << "dealii-feature: MPI=OpenMPI<br>"
+ std::cout << "dealii-feature: MPI=OpenMPI-"
<< OMPI_MAJOR_VERSION << '.'
<< OMPI_MINOR_VERSION << '.'
<< OMPI_RELEASE_VERSION << std::endl;
#endif
std::cout << std::endl;
#endif
+
+#ifdef DEAL_II_USE_P4EST
+ std::cout << "dealii-feature: P4est=yes" << std::endl;
+#endif
+
+#ifdef DEAL_II_HAVE_HDF5
+ std::cout << "dealii-feature: HDF5=yes" << std::endl;
+#endif
+
+#ifdef DEAL_II_HAVE_TECPLOT
+ std::cout << "dealii-feature: Tecplot=yes" << std::endl;
+#endif
+
+#ifdef HAVE_LIBNETCDF
+ std::cout << "dealii-feature: NetCDF=yes" << std::endl;
+#endif
+
+#ifdef HAVE_LIBZ
+ std::cout << "dealii-feature: LibZ=yes" << std::endl;
+#endif
+
+#ifdef DEAL_II_DISABLE_PARSER
+ std::cout << "dealii-feature: parser=no" << std::endl;
+#else
+ std::cout << "dealii-feature: parser=yes" << std::endl;
+#endif
+
}
define([AC_CACHE_LOAD], )dnl
define([AC_CACHE_SAVE], )dnl
-AC_INIT(deal.II, 7.2.pre, dealii@dealii.org, deal.II)
+AC_INIT(deal.II, 7.3.pre, dealii@dealii.org, deal.II)
AC_REVISION($Revision$)
AC_PREREQ(2.61)
AC_SUBST(DEAL_II_TRILINOS_SHARED)
AC_SUBST(DEAL_II_TRILINOS_STATIC)
+DEAL_II_CONFIGURE_HDF5
+AC_SUBST(USE_CONTRIB_HDF5)
+AC_SUBST(DEAL_II_HDF5_VERSION)
+AC_SUBST(DEAL_II_HDF5_CFLAGS)
+AC_SUBST(DEAL_II_HDF5_CPPFLAGS)
+AC_SUBST(DEAL_II_HDF5_LDFLAGS)
+AC_SUBST(DEAL_II_HDF5_INCDIR)
+
+
DEAL_II_CONFIGURE_ARPACK
AC_SUBST(USE_CONTRIB_ARPACK)
AC_SUBST(DEAL_II_ARPACK_DIR)
DEAL_II_CONFIGURE_METIS
AC_SUBST(USE_CONTRIB_METIS)
+AC_SUBST(DEAL_II_METIS_DIR)
AC_SUBST(DEAL_II_METIS_LIBDIR)
+AC_SUBST(DEAL_II_METIS_INCDIR)
dnl Check for UMFPack
DEAL_II_WITH_UMFPACK
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
+ "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<head>
- <link href="screen.css" rel="StyleSheet">
- <title>deal.II Credits</title>
- <meta name="author" content="the deal.II authors <authors@dealii.org>">
- <meta name="copyright" content="Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors">
- <meta name="date" content="$Date$">
- <meta name="keywords" content="deal.II">
- <meta name="svn_id" content="$Id$">
-
-</head>
-<body>
-<h1>deal.II Credits</h1>
-
-<p>
- The <acronym>deal.II</acronym> project was initially started by members
- of the Numerical Methods group at the University of Heidelberg, Germany but
- has since become a global, open source project.
- The current maintainers of the library are:
-</p>
-<ul>
- <li>
- <a href="http://www.math.tamu.edu/~bangerth"
- target="_top">Wolfgang Bangerth</a>,
- Texas A&M University, TX, USA
- </li>
-
- <li>
- <a href="http://www.math.tamu.edu/~heister"
- target="_top">Timo Heister</a>,
- Texas A&M University, TX, USA
- </li>
-
- <li>
- <a href="http://www.math.tamu.edu/~kanschat"
- target="_top">Guido Kanschat</a>,
- Texas A&M University, TX, USA
- </li>
-</ul>
-
-<p>In order to get in contact with them, send email to <tt>authors</tt>
-at <tt>dealii.org</tt>.
-</p>
-
-<p>Many people have contributed to deal.II over the years, some of them very
- substantial parts of the library. Their work
- is greatly appreciated: no open source project can survice without a
- community. The following people contributed major parts
- of the library (in alphabetical order):
-</p>
-
-<ul>
-<li><em>Moritz Allmaras:</em>
- Step-29 tutorial program.
-
-<li><em>Michael Anderson:</em>
- Linear complexity grid reordering algorithm in 2d and 3d.
-
-<li><em>Andrea Bonito:</em>
- Step-38.
-
-<li><em>Markus Bürg:</em>
- Conical meshes and geometries; step-45 tutorial program;
- VectorTools::project_boundary_values_curl_conforming; MUMPS
- interface, FE_Nedelec for arbitrary polynomial degrees.
-
-<li><em>John Burnell:</em>
- Configuration on Microsoft Windows systems.
-
-<li><em>Brian Carnes:</em>
- Hierarchical finite element classes;
+ <head>
+ <link href="screen.css" rel="StyleSheet">
+ <title>deal.II Credits</title>
+ <meta name="author" content="the deal.II authors <authors@dealii.org>">
+ <meta name="copyright" content="Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors">
+ <meta name="date" content="$Date$">
+ <meta name="keywords" content="deal.II">
+ <meta name="svn_id" content="$Id$">
+
+ </head>
+ <body>
+ <h1>deal.II Credits</h1>
+
+ <p>
+ The <acronym>deal.II</acronym> project was initially started by members
+ of the Numerical Methods group at the University of Heidelberg, Germany but
+ has since become a global, open source project.
+ The current maintainers of the library are:
+ </p>
+ <ul>
+ <li>
+ <a href="http://www.math.tamu.edu/~bangerth"
+ target="_top">Wolfgang Bangerth</a>,
+ Texas A&M University, TX, USA
+ </li>
+
+ <li>
+ <a href="http://www.math.tamu.edu/~heister"
+ target="_top">Timo Heister</a>,
+ Texas A&M University, TX, USA
+ </li>
+
+ <li>
+ <a href="http://www.iwr.uni-heidelberg.de/groups/MathSim/"
+ target="_top">Guido Kanschat</a>,
+ Texas A&M University, TX, USA and Universität Heidelberg, Germany
+ </li>
+ </ul>
+
+ <p>In order to get in contact with them, send email to <tt>authors</tt>
+ at <tt>dealii.org</tt>.
+ </p>
+
+ <p>Many people have contributed to deal.II over the years, some of them very
+ substantial parts of the library. Their work
+ is greatly appreciated: no open source project can survice without a
+ community. The following people contributed major parts
+ of the library (in alphabetical order), with many more that have
+ sent in fixed and small enhancements:
+ </p>
+
+ <ul>
+ <li><em>Moritz Allmaras:</em>
+ Step-29 tutorial program.
+
+ <li><em>Michael Anderson:</em>
+ Linear complexity grid reordering algorithm in 2d and 3d.
+
+ <li><em>Andrea Bonito:</em>
+ Step-38.
+
+ <li><em>Markus Bürg:</em>
+ Conical meshes and geometries; step-45 tutorial program;
+ VectorTools::project_boundary_values_curl_conforming; MUMPS
+ interface, FE_Nedelec for arbitrary polynomial degrees.
+
+ <li><em>John Burnell:</em>
+ Configuration on Microsoft Windows systems.
+
+ <li><em>Brian Carnes:</em>
+ Hierarchical finite element classes;
random fixes and enhancements.
-<li><em>Ivan Christov:</em>
- Step-25 tutorial program.
-
-<li><em>Martin Genet:</em>
- Make SparseDirectUMFPACK work with block matrices.
-
-<li><em>Ralf Hartmann:</em>
- Ralf was one of the original developers and maintainers of the library until
- 2011. He has written significant chunks of code throughout the library.
-
-<li><em>Timo Heister:</em>
- CompressedSimpleSparsityPattern class; a lot of the work for
- massively parallel computations; step-32; step-40; many
- enhancements all throughout the library.
-
-<li><em>Luca Heltai:</em>
- Gmsh format mesh reader and writer;
- some of the meshes in the GridGenerator class;
- generalization of FilteredMatrix;
- integration of the function parser library;
- cubit journal file to export to ucd mesh format;
- FEFieldFunction and ParsedFunction classes;
- work on the codimension-one meshes, DoFHandler, and finite
- elements;
- singular integration;
- Step-34 tutorial program;
- random bug fixes and enhancements.
-
-<li><em>Bärbel Janssen:</em>
- Lots of work on multigrid for adaptive meshes; multigrid in the
- MeshWorker framework; step-16.
-
-<li><em>Xing Jin:</em>
- step-24 tutorial program.
-
-<li><em>Oliver Kayser-Herold:</em>
- Lots of work on hp finite elements;
- integration of PETSc's LU decomposition;
- hanging node constraints for higher order elements in 3d.
-
-<li><em>Seungil Kim:</em>
- Help on the step-16 tutorial program.
-
-<li><em>Benjamin Shelton Kirk:</em>
- Tecplot output.
-
-<li><em>Katharina Kormann:</em>
- Support for arbitrary nodes in FE_Q. Matrix-free
- framework. step-37 and step-48 tutorial programs.
-
-<li><em>Martin Kronbichler:</em>
- step-22, step-31, step-32, step-37, step-48, interfaces to
- Trilinos, significant parts of ConstraintMatrix, matrix-free
- computations, support for massively parallel computations, and
- many enhancements in random places.
-
-<li><em>Tobias Leicht:</em>
- Lots of work on internal data structures: anisotropic refinement
- (including step-30), faces
- without level,
- support for previously unorientable meshes;
- extension of DataOut to higher order mapping functions; DataPostprocessor;
- GridIn::read_tecplot;
- made SolutionTransfer independent of Triangulation::user_pointers;
- random bug fixes and enhancements.
-
-<li><em>Yan Li:</em>
- step-21 tutorial program.
-
-<li><em>Cataldo Manigrasso:</em>
- Work on the codimension-one meshes, DoFHandler, and finite
- elements.
-
-<li><em>Andrew McBride:</em>
- FEValues extractors for symmetric tensors.
-
-<li><em>Helmut Müller:</em>
- Multiprocessor detection on Mac OS X.
-
-<li><em>Stefan Nauber:</em>
+ <li><em>Ivan Christov:</em>
+ Step-25 tutorial program.
+
+ <li><em>Chih-Che Chueh:</em>
+ Step-43 tutorial program.
+
+ <li><em>Marco Engelhard:</em>
+ Better support for output for Paraview.
+
+ <li><em>Jörg Frohne:</em>
+ step-41. Fixes in many places.
+
+ <li><em>Thomas Geenen:</em>
+ Support for different geometries.
+
+ <li><em>Martin Genet:</em>
+ Make SparseDirectUMFPACK work with block matrices.
+
+ <li><em>Christian Goll:</em>
+ Abstraction of material and boundary indicators. Enhancements in
+ various places.
+
+ <li><em>Ralf Hartmann:</em>
+ Ralf was one of the original developers and maintainers of the library until
+ 2011. He has written significant chunks of code throughout the library.
+
+ <li><em>Eric Heien:</em>
+ HDF5 output.
+
+ <li><em>Timo Heister:</em>
+ CompressedSimpleSparsityPattern class; a lot of the work for
+ massively parallel computations; step-32; step-40; many
+ enhancements all throughout the library.
+
+ <li><em>Luca Heltai:</em>
+ Gmsh format mesh reader and writer;
+ some of the meshes in the GridGenerator class;
+ generalization of FilteredMatrix;
+ integration of the function parser library;
+ cubit journal file to export to ucd mesh format;
+ FEFieldFunction and ParsedFunction classes;
+ work on the codimension-one meshes, DoFHandler, and finite
+ elements;
+ singular integration;
+ Step-34 tutorial program;
+ random bug fixes and enhancements.
+
+ <li><em>Bärbel Janssen:</em>
+ Lots of work on multigrid for adaptive meshes; multigrid in the
+ MeshWorker framework; step-16.
+
+ <li><em>Xing Jin:</em>
+ step-24 tutorial program.
+
+ <li><em>Oliver Kayser-Herold:</em>
+ Lots of work on hp finite elements;
+ integration of PETSc's LU decomposition;
+ hanging node constraints for higher order elements in 3d.
+
+ <li><em>Seungil Kim:</em>
+ Help on the step-16 tutorial program.
+
+ <li><em>Benjamin Shelton Kirk:</em>
+ Tecplot output.
+
+ <li><em>Katharina Kormann:</em>
+ Support for arbitrary nodes in FE_Q. Matrix-free
+ framework. step-37 and step-48 tutorial programs.
+
+ <li><em>Martin Kronbichler:</em>
+ step-22, step-31, step-32, step-37, step-48, interfaces to
+ Trilinos, significant parts of ConstraintMatrix, matrix-free
+ computations, support for massively parallel computations, and
+ many enhancements in random places.
+
+ <li><em>Tobias Leicht:</em>
+ Lots of work on internal data structures: anisotropic refinement
+ (including step-30), faces
+ without level,
+ support for previously unorientable meshes;
+ extension of DataOut to higher order mapping functions; DataPostprocessor;
+ GridIn::read_tecplot;
+ made SolutionTransfer independent of Triangulation::user_pointers;
+ random bug fixes and enhancements.
+
+ <li><em>Yan Li:</em>
+ step-21 tutorial program.
+
+ <li><em>Vijay Mahadevan:</em>
+ Enhancements in the interface to PETSc. Support for reading GMSH
+ 2.5 format.
+
+ <li><em>Matthias Maier:</em>
+ Periodic boundary conditions. Enhancements throughout the library.
+
+ <li><em>Cataldo Manigrasso:</em>
+ Work on the codimension-one meshes, DoFHandler, and finite
+ elements.
+
+ <li><em>Andrew McBride:</em>
+ FEValues extractors for symmetric tensors. step-44.
+
+ <li><em>Scott Miller:</em>
+ Enhancements to FE_Nothing.
+
+ <li><em>Helmut Müller:</em>
+ Multiprocessor detection on Mac OS X.
+
+ <li><em>Stefan Nauber:</em>
Postscript output.
-<li><em>David Neckels:</em>
- step-33 tutorial program.
+ <li><em>David Neckels:</em>
+ step-33 tutorial program.
+
+ <li><em>M. Sebastian Pauletti:</em>
+ Making meshes embedded in higher space dimensions more usable; many
+ bug fixes and enhancements for codimension-one computations and
+ throughout the library.
+
+ <li><em>Jean-Paul Pelteret:</em>
+ step-44.
-<li><em>M. Sebastian Pauletti:</em>
- Making meshes embedded in higher space dimensions more usable; many
- bug fixes and enhancements for codimension-one computations.
+ <li><em>Jonathan Pitt:</em>
+ Enhancements to FE_Nothing. Changes in a variety of places.
-<li><em>Adam Powell IV:</em>
- Configuration issues, Debian packages.
+ <li><em>Adam Powell IV:</em>
+ Configuration issues, Debian packages.
-<li><em>Florian Prill:</em>
+ <li><em>Florian Prill:</em>
Gauss Lobatto quadrature, random bug fixes.
-<li><em>Daniel Castanon Quiroz:</em>
- Torus domain and boundary.
+ <li><em>Daniel Castanon Quiroz:</em>
+ Torus domain and boundary.
-<li><em>Michael Rapson:</em>
- PointValueHistory class.
+ <li><em>Michael Rapson:</em>
+ PointValueHistory class.
-<li><em>Thomas Richter:</em>
+ <li><em>Thomas Richter:</em>
Povray output;
multi-threading work;
refinement functions;
- MinRes linear solver.
+ MinRes linear solver.
-<li><em>Abner Salgado-Gonzalez:</em>
+ <li><em>Abner Salgado-Gonzalez:</em>
step-35 tutorial program.
-<li><em>Anna Schneebeli:</em>
+ <li><em>Anna Schneebeli:</em>
Help and advice for Nedelec elements, writing the excellent
report on Nedelec elements.
-<li><em>Jan Schrage:</em>
+ <li><em>Jan Schrage:</em>
Initial parts of the tutorial.
-<li><em>Ralf B. Schulz:</em>
+ <li><em>Ralf B. Schulz:</em>
Support for DLLs on Windows systems.
-<li><em>Michael Stadler:</em>
- Reading 3d data in UCD, accepting boundary data in 3d;
+ <li><em>Jason Sheldon:</em>
+ More generic FESystems. Enhancements in a variety of places.
+
+ <li><em>Michael Stadler:</em>
+ Reading 3d data in UCD, accepting boundary data in 3d;
Eulerian mappings.
-<li><em>Martin Steigemann:</em>
- Graphical user interface for the ParameterHandler class.
+ <li><em>Martin Steigemann:</em>
+ Graphical user interface for the ParameterHandler class.
+
+ <li><em>Franz-Theo Suttmeier:</em>
+ Initial parts of the linear algebra libraries.
-<li><em>Franz-Theo Suttmeier:</em>
- Initial parts of the linear algebra libraries.
+ <li><em>Habib Talavatifard:</em>
+ Bug fixes in the Trilinos interfaces.
-<li><em>Habib Talavatifard:</em>
- Bug fixes in the Trilinos interfaces.
+ <li><em>Christophe Trophime:</em>
+ Packaging and configuration issues.
-<li><em>Christophe Trophime:</em>
- Packaging and configuration issues.
+ <li><em>Yaqi Wang:</em>
+ The step-28 tutorial program;
+
+ some grid generation functions.
-<li><em>Yaqi Wang:</em>
- The step-28 tutorial program;
-
- some grid generation functions.
+ <li><em>Sven Wetterauer:</em>
+ Step-15 tutorial program.
-<li><em>Joshua White:</em>
- Arbitrary order Eulerian mappings.
+ <li><em>Joshua White:</em>
+ Arbitrary order Eulerian mappings.
-<li><em>Toby D. Young:</em>
- Interfaces to SLEPc; many changes in the interfaces to PETSc;
- MUMPS interface.
-</ul>
+ <li><em>Toby D. Young:</em>
+ Interfaces to SLEPc; many changes in the interfaces to PETSc;
+ MUMPS interface;
+ METIS interface.
+ </ul>
-<h2>deal.II mailing list members</h2>
+ <h2>deal.II mailing list and discussion group members</h2>
-<p>
- We thank the numerous people sending questions, suggestions, bug reports, bug
- fixes and improvements. deal.II would be much less without their contribution.
-</p>
+ <p>
+ We thank the numerous people sending questions, suggestions, bug reports, bug
+ fixes and improvements. deal.II would be much less without their contribution.
+ </p>
-<h2>History</h2>
+ <h2>History</h2>
<p>
- deal.II draws from some ideas which were first implemented in the
- predecessor library,
- <A HREF="http://www.math.uni-siegen.de/suttmeier/deal/deal.html"
- TARGET="_top">DEAL</a>, developed by Guido Kanschat, Franz-Theo
- Suttmeier, and Roland Becker. This library is now being maintained
- by Franz-Theo Suttmeier at the University of
- Siegen, Germany.
+ deal.II draws from some ideas which were first implemented in the
+ predecessor library,
+ <A HREF="http://www.math.uni-siegen.de/suttmeier/deal/deal.html"
+ TARGET="_top">DEAL</a>, developed by Guido Kanschat, Franz-Theo
+ Suttmeier, and Roland Becker. This library is now being maintained
+ by Franz-Theo Suttmeier at the University of
+ Siegen, Germany.
</p>
-<div class="right">
- <a href="http://validator.w3.org/check?uri=referer" target="_top"><img
- style="border:0"
- src="http://www.w3.org/Icons/valid-html401"
- alt="Valid HTML 4.01!"></a>
- <a href="http://jigsaw.w3.org/css-validator/check/referer"
- target="_top"><img
- style="border:0;width:88px;height:31px"
- src="http://jigsaw.w3.org/css-validator/images/vcss"
- alt="Valid CSS!">
- </a>
- </div>
-
-</body>
+ <div class="right">
+ <a href="http://validator.w3.org/check?uri=referer" target="_top"><img
+ style="border:0"
+ src="http://www.w3.org/Icons/valid-html401"
+ alt="Valid HTML 4.01!"></a>
+ <a href="http://jigsaw.w3.org/css-validator/check/referer"
+ target="_top"><img
+ style="border:0;width:88px;height:31px"
+ src="http://jigsaw.w3.org/css-validator/images/vcss"
+ alt="Valid CSS!">
+ </a>
+ </div>
+
+ </body>
</html>
<hr>
<address>
- <a href="../mail.html">The deal.II mailing list</a></address>
+ <a href="../mail.html">The deal.II Group</a></address>
<div class="right">
<p>
<link href="../screen.css" rel="StyleSheet">
<title>The deal.II Testsuite</title>
<meta name="author" content="the deal.II authors <authors@dealii.org>">
- <meta name="copyright" content="Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors">
+ <meta name="copyright" content="Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors">
<meta name="date" content="$Date$">
<meta name="svn_id" content="$Id$">
<meta name="keywords" content="deal dealii finite elements fem triangulation">
tests nightly through a cron-job with this command, to have
regular test runs.
</p>
+
+ <p>
+ To get a quick overview you can run
+ <pre>
+ make report+summary
+ </pre>
+ instead. This runs all the tests and outputs a table in the following format
+ at the end:
+ <pre>
+ Compiling Linking Running Check OK all
+ a-framework 1 1 1 1 1 5
+ base 0 0 0 2 185 187
+ lac 0 0 0 0 117 117
+ fe 0 0 0 4 114 118
+ deal.II 0 0 0 2 291 293
+ integrators 0 0 0 0 15 15
+ multigrid 0 0 0 0 35 35
+ ...
+ </pre>
+ </p>
<p>
If a test failed, you have to find out what exactly went
</p>
<p>
- If you don't have subversion write access, talk to us on the mailing
- list; writing testcases is a worthy and laudable task, and we would
+ If you don't have subversion write access, talk to us in the discussion group;
+ writing testcases is a worthy and laudable task, and we would
like to encourage it by giving people the opportunity to
contribute!
</p>
<address>
- <a href="../mail.html">The deal.II mailing list</a></address>
+ <a href="../mail.html">The deal.II Group</a></address>
<div class="right">
<p>
<a href="http://validator.w3.org/check?uri=referer"><img border="0"
<link href="../screen.css" rel="StyleSheet">
<title>The deal.II Development Page</title>
<meta name="author" content="the deal.II authors <authors@dealii.org>">
- <meta name="copyright" content="Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010 by the deal.II authors">
+ <meta name="copyright" content="Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2012 by the deal.II authors">
<meta name="date" content="$Date$">
<meta name="svn_id" content="$Id$">
<meta name="keywords" content="deal dealii finite elements fem triangulation">
<hr>
<address>
- <a href="../mail.html">The deal.II mailing list</a></address>
+ <a href="../mail.html">The deal.II Group</a></address>
<div class="right">
<p>
<a href="http://validator.w3.org/check?uri=referer"><img border="0"
<link href="../screen.css" rel="StyleSheet">
<title>Writing documentation</title>
<meta name="author" content="the deal.II authors <authors@dealii.org>">
- <meta name="copyright" content="Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2010 by the deal.II authors">
+ <meta name="copyright" content="Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2010, 2012 by the deal.II authors">
<meta name="date" content="$Date$">
<meta name="svn_id" content="$Id$">
<meta name="keywords" content="deal dealii finite elements fem triangulation">
<hr>
<address>
- <a href="../mail.html">The deal.II mailing list</a></address>
+ <a href="../mail.html">The deal.II Group</a></address>
<div class="right">
<p>
<a href="http://validator.w3.org/check?uri=referer"><img border="0"
<link href="screen.css" rel="StyleSheet" type="text/css">
<title>The deal.II Online Documentation</title>
<meta name="author" content="the deal.II authors <authors@dealii.org>">
- <meta name="copyright" content="Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors">
+ <meta name="copyright" content="Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors">
<meta name="date" content="2006/02/07 22:49:01">
<meta name="keywords" content="deal.II">
<meta name="svn_id" content="$Id$">
<p>
Note that along with the rest of the documentation, the local HTML pages
- of the tutorials need to be generated first. Please follow the
+ of the tutorials need to be generated first. Please follow the
instructions in the
<a href="readme.html" target="body">ReadMe file</a> on how to do
this.
Bangerth).
</p>
- <li> <p>
- A report on how
- <a href="reports/multithreading/index.html"
- target="body">multithreading</a> is implemented and
- supported in <acronym>deal.II</acronym> (by Wolfgang
- Bangerth). This report is also available as preprint
- 2000-11 from the
- <a href="http://www.iwr.uni-heidelberg.de" target="_top">
- IWR preprint server</a>. However, this report described a
- previous version of the threading scheme. After
- <acronym>deal.II</acronym> 3.4, this scheme was replaced by
- another one that is more flexible and easier to use. While the
- general observations of the report are still valid, the syntax
- presented there is no longer. There is a <a
- href="reports/new-threads/index.html" target="body">short
- document</a> describing the new syntax and some considerations we
- had in implementing it.
- </p>
-
<li> <p>
A brief report on <a href="reports/mapping_q/index.html"
target="body">mapping</a> functions of higher polynomial
<h3>Contact</h3>
- <p>We have a <a href="mail.html">mailing list</a> for discussion
+ <p>We have a <a href="mail.html">discussion group</a> for discussion
of issues of general interest to users and developers of
<acronym>deal.II</acronym>.</p>
<p>More specific questions may be sent to the authors
- immediately at the address <tt>firstName.last_name</tt><i> at
+ immediately at the address <tt>firstName.lastname</tt><i> at
</i> <tt>dealii.org</tt>.</p>
<div class="right">
* too many details. All the algorithms described below are implement in
* classes and functions in namespace parallel::distributed.
*
+ * One important aspect in parallel computations using MPI is that write
+ * access to matrix and vector elements requires a call to compress() after
+ * the operation is finished and before the object is used (for example read
+ * from). Also see @ref GlossCompress.
*
* <h4>Other resources</h4>
*
* information is provided by the
* DoFTools::extract_locally_relevant_dofs() function.
*
+ * <h5>Vectors with Ghost-elements</h5>
+ *
+ * A typical parallel application is dealing with two different kinds
+ * of parallel vectors: vectors with ghost elements (also called
+ * ghosted vectors) and vectors without ghost elements. Of course
+ * these might be different flavours (BlockVector, Vector; using
+ * Trilinos or PETSc, etc.).
+ *
+ * In vectors without ghost elements knowledge about a single entry i
+ * in the vector is only known to a single processor. They are
+ * constructed with an IndexSet reflecting the
+ * locally_owned_dofs(). There is no overlap in the IndexSets.
+ * Ghosted vectors are typically created using locally_active or
+ * locally_relevant IndexSets and contain elements on processors that
+ * are owned by a different processor.
+ *
+ * One important aspect is that we forbid any modification of ghosted
+ * vectors. This is because it would create subtle bugs if elements
+ * are edited on one processor but do not immediately transfer to the
+ * ghosted entries on the other processors.
+ *
+ * The usage is typically split up in the following way: ghosted
+ * vectors are used for data output, postprocessing, error estimation,
+ * input in integration. Vectors without ghost entries are used in all
+ * other places like assembling, solving, or any other form of
+ * manipulation. You can copy between vectors with and without ghost
+ * elements (you can see this in step-40 and step-32) using operator=.
*
* <h5>Sparsity patterns</h5>
*
+
//-------------------------------------------------------------------------
// $Id$
// Version: $Name$
* ways:
*
* - You tell the object that you want to compress what operation is
- * intended. The TrilinosWrappers::VectorBase::compress() can take
- * such an additional argument.
+ * intended. This can be done using the VectorOperation argument in
+ * the various compress() functions.
* - You do a fake addition or set operation on the object in question. For
* example, you can add a zero to an element of the matrix or vector,
* which has no effect other than telling the object that the next
* @defgroup vector_valued Handling vector valued problems
*
*
- * Vector-valued problems are partial differential equations in which the
+ * Vector-valued problems are systems of partial differential
+ * equations. These are problems where the
* solution variable is not a scalar function, but a vector-valued function or
* a set of functions. This includes, for example:
* <ul>
* </ul>
*
* This page gives an overview of how to implement such vector-valued problems
- * efficiently in deal.II.
+ * easily in deal.II. In particular, it explains the usage of the class
+ * FESystem, which allows us to write code for systems of partial
+ * differential very much like we write code for single equations.
*
* <table class="tutorial" width="50%">
* <tr><th><b>%Table of contents</b></th></tr>
--- /dev/null
+<!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 HDF5</title>
+ <link href="screen.css" rel="StyleSheet">
+ <meta name="author" content="the deal.II authors <authors @ dealii.org>">
+ <meta name="copyright" content="Copyright (C) 2012 by the deal.II authors">
+ <meta name="date" content="$Date: 2010-05-05 (Thu, 05 May 2010) $">
+ <meta name="svn_id" content="$Id: readme-hdf5.html$">
+ <meta name="keywords" content="deal.II">
+ </head>
+ <body>
+
+
+ <h1>Using and Installing <acronym>HDF5</acronym></h1>
+ <p> <a href="http://www.hdfgroup.org/HDF5/">HDF5</a>
+ is a library for high-performance parallel data output. Deal.II can use it to write
+ graphical solutions. They can be displayed using paraview for example.
+ <p>
+
+ <p>
+ This is how you can download, configure, and build hdf5:
+ <code>
+ <pre>
+wget http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.9.tar.gz
+tar xf hdf5-1.8.9.tar.gz
+cd hdf5-1.8.9/
+./configure --prefix=`pwd`/build/ -enable-parallel
+make install
+ </pre>
+ </code>
+
+ You will end up with a script called <code>h5pcc</code> (or <code>h5cc</code> if you
+ decided to not build the parallel version) in the build/bin directory.
+
+ <h1>Interfacing <acronym>deal.II</acronym>
+ to <acronym>HDF5</acronym></h1>
+
+ <p> To be able to use the interface of <acronym>deal.II</acronym>
+ for <acronym>HDF5</acronym> we then
+ configure <acronym>deal.II</acronym> with the following
+ additional option:
+ <code>--with-hdf5=path/to/hdf5/build/bin/h5pcc</code>
+ </p>
+ </body>
+</html>
<hr>
<address>
- <a href="mail.html">The deal.II mailing list</a>
+ <a href="mail.html">The deal.II Group</a>
$Date$
</address>
</body>
<hr>
<address>
- <a href="mail.html">The deal.II mailing list</a>
+ <a href="mail.html">The deal.II Group</a>
</address>
</body>
</html>
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
- <title>deal.II Email Portal</title>
+ <title>deal.II Communications</title>
<link href="screen.css" rel="StyleSheet">
<meta name="author" content="the deal.II authors <authors at dealii.org>">
- <meta name="copyright" content="Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2011 by the deal.II authors">
+ <meta name="copyright" content="Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2011, 2012 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>
- <acronym>deal.II</acronym> Email Portal
+ <acronym>deal.II</acronym> Communications
</h1>
<p>
This page summarizes your possibilities of establishing contact to other
<acronym>deal.II</acronym> users and to the <acronym>deal.II</acronym>
- authors. We are sorry if all this looks a little complicated, but since
- public email addresses are abused too often, we want to protect all
- members of our mailing lists.
+ authors.
</p>
<br>
<h2>
- Users
+ User Group
</h2>
<p>
- All <acronym>deal.II</acronym> users (and everybody interested) can
- enter themselves into the <acronym>deal.II</acronym> mailing list.
+ All <acronym>deal.II</acronym> users (and everybody interested)
+ are encouraged to join the <acronym>deal.II</acronym>
+ Discussion group on Google Groups.
</p>
<ul>
<li>
- <strong class="red"><strong>Join</strong> the mailing list</strong>
- <p>
- If you want to receive comments of other users and react to them,
- you should join the mailing list. To do this, don't write to
- the list.
- </p>
- <p>
- Either write an email to <b>join</b> at <b>dealii.org</b> or
- go to the <a
- href="http://dealii.org/mailman/listinfo/dealii_dealii.org">list's web site</a> and follow the instructions.
- </p>
+ In order to join, go to
+ the <a href="https://groups.google.com/d/forum/dealii">deal.II
+ Discussion Group web page</a> and register your email address
+ there. Or click on the membership button below. This is also a
+ good place to browse through existing discussion
+ topics. There, you can manage your group membership and email
+ delivery options.
</li>
<li>
- <strong class="red"><strong>Unsubscribe</strong> from the list</strong>
- <p>
- You can decide to leave the mailing list whenever you want.
- </p>
- <p>
- Write an email to <b>leave</b> at <b>dealii.org</b> from your
- registered address or go to the <a
- href="http://dealii.org/mailman/listinfo/dealii_dealii.org">list's web site</a> and follow the instructions.
- </p>
- </li>
- <li>
- <strong class="red"><strong>Write</strong> to the mailing list</strong>
- <p>
- Send an email to <b>dealii</b> at <b>dealii.org</b>.
- Please, use a significant subject line, such that everybody
- can identify your message. Note that you must be subscribed
- to the list before you can send a message!
- </p>
- <p>
- Remember that you <b>must be subscribed</b> to write to the list. Here,
- <i>you</i> means the email address identifying the sender of your mail.
- </p>
- </li>
- <li>
- <strong class="red"><strong>Reading</strong> archives of the mailing list</strong>
- <p>
- All mails that have been sent through the mailing lists are
- archived
- and can be read from the <a href="http://dealii.org/pipermail/dealii_dealii.org/"
- target="body">mailing list archive page</a>.
- </p>
- <p> The <a href="http://www.dealii.org/mail/maillist.html"
- target="body">old archives</a> can also be checked for reference.
- </p>
+ In order to post a question or a reply, you can either go to
+ the
+ the <a href="https://groups.google.com/d/forum/dealii">deal.II
+ Discussion Group page</a> and click on the corresponding
+ button (preferred), or you can send email
+ to <a href="mailto:dealii@googlegroups.com">dealii@googlegroups.com</a>. Or
+ just post from the window below. Note that you have to be a
+ group member with your specific sender address in order to be
+ allowed to post there.
</li>
</ul>
+<iframe id="forum_embed"
+ src="javascript:void(0)"
+ scrolling="no"
+ frameborder="0"
+ width="900"
+ height="700">
+</iframe>
+<script type="text/javascript">
+ document.getElementById('forum_embed').src =
+ "https://groups.google.com/forum/embed/?place=forum/dealii&showsearch=false&showpopout=true&showtabs=false&hideforumtitle=true";
+</script>
<br>
<h2>
<hr>
<address>
- <a href="mail.html" target="body">The deal.II mailing list</a>
+ <a href="mail.html" target="body">The deal.II Group</a>
</address>
<div class="right">
<p>
--- /dev/null
+/**
+ * @page changes_between_7_1_and_7_2 Changes between Version 7.1 and 7.2
+
+<p>
+This is the list of changes made between the release of
+deal.II version 7.1.0 and that of 7.2.0.
+All entries are signed with the names of the author.
+</p>
+
+
+
+<!-- ----------- INCOMPATIBILITIES ----------------- -->
+
+<a name="incompatible"></a>
+<h3 style="color:red">Incompatibilities</h3>
+
+<p style="color:red">
+Following are a few modifications to the library that unfortunately
+are incompatible with previous versions of the library, but which we
+deem necessary for the future maintainability of the
+library. Unfortunately, some of these changes will require
+modifications to application programs. We apologize for the
+inconvenience this causes.
+</p>
+
+<ol>
+<li> Changed/fixed: Several operations on Trilinos vectors that change the
+elements of these vectors were allowed accidentally for vectors that have
+ghost elements. This is a source of errors because a change on one
+MPI process will not show up on a different processor. Consequently, we
+intended to disallow all functions that modify vectors with ghost elements
+but this was not enforced for all of these functions. This is now fixed
+but it may lead to errors if your code relied on the existing behavior. The
+way to work around this is to only ever modify fully distributed vectors,
+and then copy it into a vector with ghost elements.
+<br>
+(Wolfgang Bangerth, 2012/08/06)
+
+<li> Changed: The argument material_id of the estimate-functions of
+the KellyErrorEstimator class is now of type types::material_id
+with default value numbers::invalid_material_id, instead of type
+unsigned int with default value numbers::invalid_unsigned_int. This
+should not make a difference to most users unless you specified the
+argument's default value by hand.
+<br>
+(Wolfgang Bangerth, Christian Goll 2012/02/27)
+
+<li>
+The member functions Triangulation::set_boundary and
+Triangulation::get_boundary now take a types::boundary_id instead of
+an unsigned int as argument. This now matches the actual data type
+used to store boundary indicators internally.
+<br>
+(Wolfgang Bangerth, Christian Goll 2012/02/27)
+</ol>
+
+
+<!-- ----------- GENERAL IMPROVEMENTS ----------------- -->
+
+<a name="general"></a>
+<h3>General</h3>
+
+
+<ol>
+<li>
+New: We now support parallel output using HDF5/xdmf.
+<br>
+(Eric Heien, Timo Heister, 2012/08/28)
+
+<li>
+New: We are now compatible with Trilinos 10.4.2, 10.8.5, and 10.12.2. See the
+readme for more information.
+<br>
+(Timo Heister, 2012/08/24)
+
+<li>
+Changed: To make the naming of types defined in namespace types
+consistent, we have renamed types::subdomain_id_t to
+types::subdomain_id. The old name has been retained as a typedef
+but is now deprecated.
+<br>
+(Wolfgang Bangerth, 2012/08/22)
+
+<li>
+Changed: Unify the concept of compress() for all linear algebra
+objects. Introduce type VectorOperation to decide between
+add and insert. Implement also for serial vectors. Note:
+this breaks distributed::vector::compress(bool). See
+@ref GlossCompress for more information.
+<br>
+(Timo Heister, 2012/08/13)
+
+<li>
+Changed: Support for the METIS 4.x has been replaced with support for
+METIS 5.x. Use <code>--with-metis=path/to/metis</code> to configure
+with METIS 5.x.
+<br>
+(Stefano Zampini, Toby D. Young 2012/08/13)
+
+<li>
+Changed: numerics/vectors.h is now called numerics/vector_tools.h and
+numerics/matrices.h is now called numerics/matrix_tools.h The old files are
+deprecated.
+<br>
+(Timo Heister 2012/08/09)
+
+<li>
+New: officially added support for clang 3.1 or newer.
+<br>
+(Timo Heister and Wolfgang Bangerth, 2012/08/07)
+
+<li>
+Changed: PETSc linking now prefers to use the libpetsc.so generated
+by PETSc starting from version 3.1+. This fixes the problem
+of linker errors on recent gcc/ubuntu versions.
+<br>
+(Timo Heister, 2012/08/07)
+
+<li>
+Fixed: On some 64-bit systems, we build deal.II with the <code>-m64</code>
+flag but forgot to build UMFPACK with this flag as well, leading to
+linker errors. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2012/07/31)
+
+Fixed: The Intel compiler, when using MPI, wants that <code>mpi.h</code>
+is included before header files like <code>stdio.h</code>. This can't
+be ensured in general because the inclusion might be indirectly, but
+we now work around the problem in other ways.
+<br>
+(Timo Heister, Wolfgang Bangerth, Michael Thomadakis, 2012/07/26)
+
+<li>
+Fixed: On some systems, the p4est library we use for distributed
+parallel computations installs its libraries into a <code>lib64/</code>
+directory instead of the usual <code>lib/</code>. deal.II can now deal
+with this.
+<br>
+(Wolfgang Bangerth, 2012/07/25)
+
+<li>
+New: step-43 is an extension of step-21 that shows efficient methods
+to solve multi-phase flow.
+<br>
+(Chih-Che Chueh, Wolfgang Bangerth, 2012/06/06)
+
+<li>
+New: step-15 has been replaced by a program that demonstrates the
+solution of nonlinear problem (the minimal surface equation) using
+Newton's method.
+<br>
+(Sven Wetterauer, 2012/06/03)
+
+<li>
+New: step-48 demonstrates the solution of a nonlinear wave equation
+with an explicit time stepping method. The usage of Gauss-Lobatto
+elements gives diagonal mass matrices, which obviates the solution of
+linear systems of equations. The nonlinear right hand side is
+evaluated with the matrix-free framework.
+<br>
+(Katharina Kormann and Martin Kronbichler, 2012/05/05)
+
+<li>
+New: step-37 shows how the matrix-free framework can be utilized to
+efficiently solve the Poisson equation without building global
+matrices. It combines fast operator evaluation with a multigrid solver
+based on polynomial Chebyshev smoother.
+<br>
+(Katharina Kormann and Martin Kronbichler, 2012/05/05)
+
+<li>
+New: A new matrix-free interface has been implemented. The framework
+is parallelized with MPI, TBB, and explicit vectorization instructions
+(new data type VectorizedArray). The class MatrixFree caches
+cell-based data in an efficient way. Common operations can be
+implemented using the FEEvaluation class.
+<br>
+(Katharina Kormann and Martin Kronbichler, 2012/05/05)
+
+<li>
+New: step-44 demonstrates one approach to modeling large
+deformations of nearly-incompressible elastic solids. The
+elastic response is governed by a non-linear, hyperelastic
+free-energy function. The geometrical response is also
+nonlinear, i.e., the program considers finite deformations.
+<br>
+(Andrew McBride and Jean-Paul Pelteret, 2012/04/25)
+
+<li>
+New: step-41 demonstrates solving the obstacle problem,
+a variational inequality.
+<br>
+(Joerg Frohne, 2012/04/22)
+
+<li>
+Changed: The version of BOOST we ship with deal.II has been upgraded
+to 1.49.0.
+<br>
+(Martin Kronbichler, 2012/04/07)
+
+<li>
+New: We have added a brief section to the step-12 tutorial programs that
+compares the DG solution computed there with one that one would obtain by
+using a continuous finite element.
+<br>
+(Wolfgang Bangerth, 2012/03/25)
+
+<li>
+New: Added support for codimension 2, i.e. for dim-dimensional objects
+embedded into spacedim=dim+2 dimensional space.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
+<li> Changed: Material and Boundary indicators have been both of the
+type unsigned char. Throughout the library, we changed their datatype
+to <code>types::material_id</code>
+resp. <code>types::boundary_id</code>, both typedefs of unsigned
+char. Internal faces are now characterized by
+numbers::internal_face_boundary_id(<code>=static_cast@<types::boundary_id@>(-1)</code>)
+instead of 255, so we get rid of that mysterious number in the source
+code. Material_ids are also assumed to lie in the range from 0 to
+numbers::invalid_material_id-1 (where <code>numbers::invalid_material_id =
+static_cast<types::material_id>(-1)</code>). With this change, it is now
+much easier to extend the range of boundary or material ids, if
+needed.
+<br>
+(Christian Goll 2012/02/27)
+
+<li> New: Functions like FEValues::get_function_values have long been
+able to extract values from pretty much any vector kind given to it (e.g.
+of kind Vector, BlockVector, PETScWrappers::Vector, etc). The list of
+allowed "vector" types now also includes IndexSet, which is interpreted
+as a vector of elements that are either zero or one, depending on whether
+an index is in the IndexSet or not.
+<br>
+As a consequence of this, the DataOut::add_data_vector functions now also
+work for such types of vectors, a use demonstrated in step-41.
+<br>
+(Wolfgang Bangerth, 2012/02/14)
+
+<li> New: It has long been a nuisance that the deal.II vector classes
+could only be accessed using <code>operator()</code> whereas the C++
+<code>std::vector</code> class required <code>operator[]</code>. This
+diminished the usefulness of template code. Historically, the reason
+was that the deal.II vector classes should use the same operator as
+the matrix classes, and C++ does not allow to use <code>operator[]</code>
+for matrices since this operator can only take a single argument.
+<br>
+In any case, all deal.II vector classes now support both kinds of
+access operators interchangeably.
+<br>
+(Wolfgang Bangerth, 2012/02/12)
+
+<li> Fixed: Linking shared libraries on PowerPC systems (e.g. on
+BlueGene systems) failed due to a miscommunication between compiler
+and linker. This is now worked around.
+<br>
+(Aron Ahmedia, Wolfgang Bangerth, 2012/02/06)
+
+<li> New: There is now a distributed deal.II vector class
+parallel::distributed::Vector that can be used with MPI. The
+vector is based on a contiguous locally owned range and allows easy
+access of ghost entries from other processors. The vector interface is
+very similar to the non-distributed class Vector<Number>.
+<br>
+(Katharina Kormann, Martin Kronbichler, 2012/01/25)
+
+<li> Fixed: The <code>common/scripts/make_dependencies</code> program
+now behaves like the C++ compiler when
+searching include paths for <code># include "..."</code> directives.
+<br>
+(Timo Heister, 2012/01/10)
+
+<li> Fixed: The Intel compiler complains that it can't copy Trilinos vector
+reference objects, preventing the compiling of step-32. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/11/09)
+
+<li> Fixed: Intel ICC 12.1 gets into trouble with BOOST because BOOST
+believes that the compiler supports C++0x but one then still has to
+specify the corresponding flag on the command line to avoid compiler
+errors. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/11/06)
+
+<li> Fixed: On some systems, <code>mpiCC</code> turns out to alias the
+C compiler, not the C++ compiler as expected. Consequently, try to use
+<code>mpic++</code> or <code>mpicxx</code> before <code>mpiCC</code> as
+these should really be unambiguous.
+<br>
+(Wolfgang Bangerth, 2011/11/05)
+
+<li> Fixed: Intel's ICC compiler identifies itself as <code>icpc version
+12.1.0 (gcc version 4.2.1 compatibility)</code> which we mistook as being
+GCC version 4.2. The same is true for the Intel C compiler. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/11/05)
+
+<li> Fixed: deal.II could not be compiled with gcc 4.6.1 when MPI is
+enabled due to a missing include file in file
+<code>source/base/utilities.cc</code>. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/10/25)
+</ol>
+
+
+<!-- ----------- SPECIFIC IMPROVEMENTS ----------------- -->
+
+<a name="specific"></a>
+<h3>Specific improvements</h3>
+
+<ol>
+<li> Changed: To support Trilinos version 10.12.x we need to cache the
+result of has_ghost_elements() in parallel vectors at construction time
+of the vector. Starting from 10.12 Trilinos will communicate in this
+call, which therefore only works if called from all CPUs.
+<br>
+(Timo Heister, 2012/08/22)
+
+<li> New: The copy constructor of FullMatrix from IdentityMatrix
+used to be explicit, but that didn't appear to be necessary in hindsight.
+Consequently, it is now a regular copy constructor.
+<br>
+(Wolfgang Bangerth, 2012/08/14)
+
+<li> New: The Patterns::Map pattern allows to describe maps from keys
+to values in input files.
+<br>
+(Wolfgang Bangerth, 2012/08/01)
+
+<li> Fixed: DoFTools::make_zero_boundary_constraints now also works for parallel distributed triangulations.
+<br>
+(Wolfgang Bangerth, 2012/07/24)
+
+<li> Fixed: GridTools::find_active_cell_around_point() works now also if the cell in which the point we look for lies is not adjacent to the closest vertex of p. The tests bits/find_cell_8 and _9 illustrate this.
+<br>
+(Wolfgang Bangerth, Christian Goll 2012/07/20)
+
+<li> Fixed: Using the SolutionTransfer class with hp::DoFHandler
+and on meshes where some cells are associated with a FE_Nothing element
+could result in an error. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2012/06/29)
+
+<li> Fixed: The MappingQ1::transform_real_to_unit_cell function as
+well as the equivalent ones in derived classes sometimes get into
+trouble if they are asked to compute the preimage of this point
+in reference cell coordinates. This is because for points outside
+the reference cell, the mapping from unit to real cell is not
+necessarily invertible, and consequently the Newton iteration to
+find the preimage did not always converge, leading to an exception.
+While this is not entirely wrong (we could, after all, not compute
+the desired quantity), not all callers of this function were prepared
+to accept this result -- in particular, the function
+CellAccessor<3>::point_inside should have really just returned false
+in such cases but instead let the exception so generated propagate
+through. This should now be fixed.
+<br>
+(Wolfgang Bangerth, Eric Heien, Sebastian Pauletti, 2012/06/27)
+
+<li> Fixed: The function VectorTools::compute_no_normal_flux_constraints had
+a bug that led to an exception whenever we were computing constraints for
+vector fields located on edges shared between two faces of a 3d cell if those
+faces were not parallel to the axes of the coordinate system. This is now fixed.
+<br>
+(Wolfgang Bangerth, Jennifer Worthen, 2012/06/27)
+
+<li>
+Fixed: Due to an apparent bug in autoconf, it was not possible to
+override the <code>F77</code> environment variable to select anything
+else than gfortran. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2012/06/08)
+
+<li> Fixed: TrilinosWrappers::VectorBase::swap() is now working as expected. (thanks Uwe Köcher)
+<br>
+(Timo Heister 2012/07/03)
+
+<li> Fixed: Some instantiations for
+DerivativeApproximation::approximate_derivative_tensor() were missing.
+<br>
+(Timo Heister 2012/06/07)
+
+<li> New: The finite element type FE_DGQArbitraryNodes is now
+working also in codimension one spaces.
+<br>
+(Luca Heltai, Andrea Mola 2012/06/06)
+
+<li> Fixed: Computing the $W^{1,\infty}$ norm and seminorm in
+VectorTools::integrate_difference was not implemented. This is now
+fixed.
+<br>
+(Wolfgang Bangerth 2012/06/02)
+
+<li> Fixed: A problem in MappingQ::transform_real_to_unit_cell
+that sometimes led the algorithm in this function to abort.
+<br>
+(Wolfgang Bangerth 2012/05/30)
+
+<li> New: The function DataOutInterface::write_pvd_record can be used
+to provide Paraview with metadata that describes which time in a
+simulation a particular output file corresponds to.
+<br>
+(Marco Engelhard 2012/05/30)
+
+<li> Fixed: A bug in 3d with hanging nodes in GridTools::find_cells_adjacent_to_vertex()
+that caused find_active_cell_around_point() to fail in those cases.
+<br>
+(Timo Heister, Wolfgang Bangerth 2012/05/30)
+
+<li> New: DoFTools::make_periodicity_constraints implemented which
+inserts algebraic constraints due to periodic boundary conditions
+into a ConstraintMatrix.
+<br>
+(Matthias Maier, 2012/05/22)
+
+<li> New: The GridIn::read_unv function can now read meshes generated
+by the Salome framework, see http://www.salome-platform.org/ .
+<br>
+(Valentin Zingan, 2012/04/27)
+
+<li> New: There is now a second DoFTools::map_dofs_to_support_points
+function that also works for parallel::distributed::Triangulation
+triangulations.
+<br>
+(Wolfgang Bangerth, 2012/04/26)
+
+<li> New: There is now a second DoFTools::extract_boundary_dofs
+function that also works for parallel::distributed::Triangulation
+triangulations.
+<br>
+(Wolfgang Bangerth, 2012/04/26)
+
+<li> New: The FullMatrix::extract_submatrix_from, FullMatrix::scatter_matrix_to,
+FullMatrix::set functions are new.
+<br>
+(Andrew McBride, Jean Paul Pelteret, Wolfgang Bangerth, 2012/04/24)
+
+<li> Fixed:
+The method FEValues<dim>::inverse_jacobian() previously returned the transpose of the
+inverse Jacobians instead of just the inverse Jacobian as documented. This is now fixed.
+<br>
+(Sebastian Pauletti, Katharina Kormann, Martin Kronbichler, 2012/03/11)
+
+<li> Extended:
+SolutionTransfer is now also able to transfer solutions between hp::DoFHandler where
+the finite element index changes during refinement.
+<br>
+(Katharina Kormann, Martin Kronbichler, 2012/03/10)
+
+<li> Changed:
+A new method to determine an initial guess for the Newton method was coded
+in MappingQ::transform_real_to_unit_cell.
+The code in transform_real_to_unit_cell was cleaned a little bit and a new code
+for the @<2,3@> case was added.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
+<li> Changed:
+In the context of codim@>0, Mapping::transform would require different inputs
+depending on the mapping type.
+For mapping_covariant, mapping_contravariant the input is DerivativeForm<1, dim, spacedim>
+but for mapping_covariant_gradient, mapping_contravariant_gradient the input is Tensor<2,dim>.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
+<li> New:
+A new class DerivativeForm was added.
+This class is supposed to represent the derivatives of a mapping.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
+<li> Fixed: TrilinosWrappers::Vector::all_zero() in parallel.
+<br>
+(Timo Heister, Jörg Frohne, 2012/03/06)
+
+<li> New: GridGenerator::quarter_hyper_shell() in 3d.
+<br>
+(Thomas Geenen, 2012/03/05)
+
+<li> New: DataOut::write_vtu_in_parallel(). This routine uses MPI I/O to write
+a big vtu file in parallel.
+<br>
+(Timo Heister, 2012/02/29)
+
+<li> Fixed: parallel::distributed::Triangulation::clear() forgot
+to update the number cache of this class, leading to wrong results
+when calling functions like
+parallel::distributed::Triangulation::n_global_active_cells();
+<br>
+(Wolfgang Bangerth, 2012/02/20)
+
+<li> Improved: FEFieldFunction allows now for the computation of Laplacians.
+<br>
+(Christian Goll, 2012/02/16)
+
+<li> New: The function IndexSet::fill_binary_vector creates a numerical
+representation of an IndexSet containing zeros and ones.
+<br>
+(Wolfgang Bangerth, 2012/02/12)
+
+<li> New: The function IndexSet::clear resets an index set to be empty.
+<br>
+(Wolfgang Bangerth, 2012/02/12)
+
+<li> New: There are now global functions l1_norm() and linfty_norm() that compute
+the respective norms of a rank-2 tensor.
+<br>
+(Wolfgang Bangerth, 2012/02/08)
+
+<li> New: VectorTools::interpolate_to_different_mesh implemented which interpolates between
+ DoFHandlers with different triangulations based on a common coarse grid.
+<br>
+(Matthias Maier, 2012/02/08)
+
+<li> Improved: DoFTools::map_dofs_to_support_points() now also works within the hp framework.
+<br>
+(Christian Goll, 2012/02/02)
+
+<li> Improved: There is now a constructor for FESystem that allows to
+create collections of finite elements of arbitrary length.
+<br>
+(Jason Sheldon, 2012/01/27)
+
+<li> Improved: VectorTools::point_value() now also works within the hp framework.
+<br>
+(Christian Goll, 2012/01/26)
+
+<li> Fixed: GridTools::find_active_cell_around_point() for the hp-case works now also with MappingCollections containing only one mapping, as is the standard case in other functions using hp.
+<br>
+(Christian Goll, 2012/01/26)
+
+<li> Fixed: parallel::distributed::refine_and_coarsen_fixed_fraction()
+contained a rounding bug that often produced wrong results.
+<br>
+(Timo Heister, 2012/01/24)
+
+<li> Improved: Utilities::break_text_into_lines now also splits the string at '\\n'.
+<br>
+(Timo Heister, 2012/01/17)
+
+<li> Fixed: When <code>./configure</code> does not detect the presence
+of <code>zlib</code>, writing output in VTU format failed to produce
+a valid output file.
+<br>
+(Timo Heister, 2012/01/03)
+
+<li> Improved: <code>PETScWrappers::SolverXXX</code> class was
+restricted to using default solver options for the KSP only. It is now
+possible to override those by using PETSc command-line options
+<code>-ksp_*</code>; giving greater flexibility in controlling PETSc
+solvers. (See the class's documentation).
+<br>
+(Vijay S. Mahadevan, 2011/12/22)
+
+<li> New: The GridIn class now also reads the GMSH format 2.2 as written by
+GMSH 2.5.
+<br>
+(Vijay S. Mahadevan, Wolfgang Bangerth, 2011/12/19)
+
+<li> Improved: The GridRefinement::refine_and_coarsen_optimize function
+assumed that the expected convergence order was 2. It has now gotten an
+argument by which the user can prescribe a different value. A bug has also
+been fixed in which the function incorrectly assumed in its algorithm that
+the mesh was two-dimensional.
+<br>
+(Christian Goll, 2011/12/16)
+
+<li> Fixed: Restriction and prolongation didn't work for elements of
+kind FE_Nothing. Consequently, many other parts of the library also
+didn't work, such as the SolutionTransfer class. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/12/15)
+
+<li> Fixed: The DerivativeApproximation class now works for distributed computations.
+<br>
+(Timo Heister, 2011/12/15)
+
+<li> Changed: The ExcMessage exception class took an argument of
+type <code>char*</code> that was displayed when the exception
+was raised. However, character pointers are awkward to work with
+because (i) they can not easily be composed to contain things like
+file names that are only known at run-time, and (ii) the string
+pointed to by the pointer had to live longer than the local expression
+in which the exception is generated when using the AssertThrow macro
+(because, when we create an exception, the exception object is passed
+up the call stack until we find a catch-clause; at that time, however,
+the scope in which the exception object was created has long been left).
+This restriction made it impossible to construct the message using std::string
+and then just do something like <code>(std::string("file: ")+filename).c_str()</code>.
+<br>
+To remedy this flaw, the type of the argument to ExcMessage has been
+changed to std::string since objects of this type are readily copyable
+and therefore live long enough.
+<br>
+(Wolfgang Bangerth, 2011/12/14)
+
+<li> New: Setting up a class derived from DataPostprocessor required some
+pretty mechanical steps in which one has to overload four member functions.
+For common cases where a postprocessor only computes a single scalar or
+a single vector, this is tedious and unnecessary. For these cases, the
+new classes DataPostprocessorScalar and DataPostprocessorVector provide
+short cuts that make life simpler.
+<br>
+(Wolfgang Bangerth, 2011/12/14)
+
+<li> Changed: The DataPostprocessor class previously required users of this
+class to overload DataPostprocessor::get_names(),
+DataPostprocessor::get_data_component_interpretation()
+and DataPostprocessor::n_output_variables(). The latter function is redundant
+since its output must equal the length of the arrays returned by the
+first two of these functions. It has therefore been removed.
+<br>
+(Wolfgang Bangerth, 2011/12/14)
+
+<li> Improved: Objects of the type LogStream::Prefix can now be used
+as a safe implementation of the push and pop mechanism for log
+prefices.
+<br>
+(Guido Kanschat, 2011/12/09)
+
+<li> New: IndexSet::add_indices(IndexSet).
+<br>
+(Timo Heister, 2011/12/09)
+
+<li> Fixed: Finite element Hessians get computed for codimension one,
+at least for FE_Poly derived classes.
+<br>
+(Guido Kanschat, 2011/12/07)
+
+<li> Changed: Output of ParameterHandler::print_parameters with argument
+ParameterHandler::LaTeX was not particularly readable. The output has
+therefore been rewritten to be more structured and readable.
+<br>
+(Wolfgang Bangerth, 2011/11/28)
+
+<li> Fixed: The TimerOutput class set the alignment of output to right-aligned
+under some circumstances, but didn't reset this to the previous value at the
+end of output. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/11/28)
+
+<li> New: The copy constructor of the SparseMatrixEZ function now works
+(rather than throwing an exception) if the copied matrix has size zero.
+This is in accordance to the other matrix classes.
+<br>
+(Wolfgang Bangerth, 2011/11/15)
+
+<li> New: The class ScalarFunctionFromFunctionObject provides a quick way to
+convert an arbitrary function into a function object that can be passed
+to part of the library that require the Function@<dim@> interface.
+The VectorFunctionFromScalarFunctionObject class does a similar thing.
+<br>
+(Wolfgang Bangerth, 2011/11/15)
+
+<li> New: The DoFTools::count_dofs_per_block function now also works
+for objects of type hp::DoFHandler.
+<br>
+(Jason Sheldon, 2011/11/13)
+
+<li> New: FETools::get_fe_from_name() can now return objects of type FE_Nothing.
+<br>
+(Scott Miller, Jonathan Pitt, 2011/11/10)
+
+<li> New: Implementation of an alternative handling of
+inhomogeneous constraints in ConstraintMatrix. This is controlled with
+a new parameter use_inhomogeneities_for_rhs in
+distribute_local_to_global() and determines whether the correct or
+zero values (this was the case before and still is the default) are
+kept in the linear system during the solution process.
+<br>
+(Jörg Frohne, 2011/11/01)
+
+<li> Fixed: SparseMatrix::mmult and SpareMatrix::Tmmult had a number of
+issues that are now fixed: (i) rebuilding the sparsity pattern was allowed
+even if several of the matrices involved in these operations shared a
+sparsity pattern; (ii) the functions had a vector argument that had a default
+value but the default value could not be used because it wasn't used in a
+template context deducible by the compiler.
+<br>
+(Wolfgang Bangerth, 2011/10/30)
+
+<li> New:
+parallel::distributed::Triangulation::mesh_reconstruction_after_repartitioning
+setting which is necessary for save()/load() to be deterministic. Otherwise
+the matrix assembly is done in a different order depending on the order of old
+refinements.
+<br>
+(Timo Heister, 2011/10/26)
+
+<li> New: TriaAccessor<>::minimum_vertex_distance().
+<br>
+(Timo Heister, 2011/10/25)
+
+<li> New: TableHandler::print_text now supports not only printing column
+keys above their own column, but also in a separate header, to make it simpler
+for external plotting programs to skip this line.
+<br>
+(Wolfgang Bangerth, 2011/10/22)
+
+<li> Fixed: Trying to write a TableHandler object that is empty resulted
+in a segmentation fault. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/10/21)
+
+<li> New: The TableHandler class can now pad columns that have only been
+partially filled. See the documentation of the class for a description.
+<br>
+(Wolfgang Bangerth, 2011/10/18)
+
+<li> Fixed: In TableHandler::print_text, it can happen that the function
+wants to print an empty string as the element of the table to be printed.
+This can confuse machine readers of this table, for example for visualization,
+since they then do not see this column in that row. To prevent this, we now
+print <code>""</code> in such places.
+<br>
+(Wolfgang Bangerth, 2011/10/18)
+
+<li> Fixed: Using Trilinos versions 10.4 and later on Debian failed to
+configure due to a different naming scheme of Trilinos libraries on
+Debian. This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/10/17)
+
+<li> Changed: The TableHandler class has been changed significantly
+internally. It could previously store arbitrary values (though in practice,
+only int, unsigned int, double and std::string were implemented). The class is
+now restricted to this particular set of types. On the other hand, the
+TableHandler class can now be serialized.
+<br>
+(Wolfgang Bangerth, 2011/10/17)
+
+<li> Fixed: searching in the doxygen documentation.
+<br>
+(Timo Heister, 2011/10/13)
+
+<li> New: parallel::distributed::Triangulation::save()/load() to store
+the refinement information to disk. Also supports saving solution vectors
+using the SolutionTransfer class.
+<br>
+(Timo Heister, 2011/10/12)
+
+<li> Fixed: The DataOut_DoFData::merge_patches did not compile with newer compilers.
+This is now fixed.
+<br>
+(Wolfgang Bangerth, 2011/10/11)
+</ol>
+
+
+*/
/**
- * @page changes_after_7_1 Changes after Version 7.1
+ * @page changes_after_7_2 Changes after Version 7.2
<p>
This is the list of changes made after the release of
-deal.II version 7.1.0.
+deal.II version 7.2.0.
All entries are signed with the names of the author.
</p>
</p>
<ol>
-<li> Changed/fixed: Several operations on Trilinos vectors that change the
-elements of these vectors were allowed accidentally for vectors that have
-ghost elements. This is a source of errors because a change on one
-MPI process will not show up on a different processor. Consequently, we
-intended to disallow all functions that modify vectors with ghost elements
-but this was not enforced for all of these functions. This is now fixed
-but it may lead to errors if your code relied on the existing behavior. The
-way to work around this is to only ever modify fully distributed vectors,
-and then copy it into a vector with ghost elements.
+<li> Changed: the optional argument offset got removed from
+DoFHandler and MGDoFHandler::distribute_dofs() because it was
+never working correctly and it is not used.
<br>
-(Wolfgang Bangerth, 2012/08/06)
+(Timo Heister, 2012/09/03)
-<li> Changed: The argument material_id of the estimate-functions of
-the KellyErrorEstimator class is now of type types::material_id_type
-with default value types::invalid_material_id, instead of type
-unsigned int with default value numbers::invalid_unsigned_int. This
-should not make a difference to most users unless you specified the
-argument's default value by hand.
-<br>
-(Wolfgang Bangerth, Christian Goll 2012/02/27)
-
-<li>
-The member functions Triangulation::set_boundary and
-Triangulation::get_boundary now take a types::boundary_id_t instead of
-an unsigned int as argument. This now matches the actual data type
-used to store boundary indicators internally.
-<br>
-(Wolfgang Bangerth, Christian Goll 2012/02/27)
</ol>
<ol>
-<li>
-New: officially added support for clang 3.1 or newer.
-<br>
-(Timo Heister and Wolfgang Bangerth, 2012/08/07)
-
-<li>
-Changed: PETSc linking now prefers to use the libpetsc.so generated
-by PETSc starting from version 3.1+. This fixes the problem
-of linker errors on recent gcc/ubuntu versions.
-<br>
-(Timo Heister, 2012/08/07)
-
-<li>
-Fixed: On some 64-bit systems, we build deal.II with the <code>-m64</code>
-flag but forgot to build UMFPACK with this flag as well, leading to
-linker errors. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2012/07/31)
-
-Fixed: The Intel compiler, when using MPI, wants that <code>mpi.h</code>
-is included before header files like <code>stdio.h</code>. This can't
-be ensured in general because the inclusion might be indirectly, but
-we now work around the problem in other ways.
-<br>
-(Timo Heister, Wolfgang Bangerth, Michael Thomadakis, 2012/07/26)
-
-<li>
-Fixed: On some systems, the p4est library we use for distributed
-parallel computations installs its libraries into a <code>lib64/</code>
-directory instead of the usual <code>lib/</code>. deal.II can now deal
-with this.
-<br>
-(Wolfgang Bangerth, 2012/07/25)
-
-<li>
-New: step-43 is an extension of step-21 that shows efficient methods
-to solve multi-phase flow.
-<br>
-(Chih-Che Chueh, Wolfgang Bangerth, 2012/06/06)
-
-<li>
-New: step-15 has been replaced by a program that demonstrates the
-solution of nonlinear problem (the minimal surface equation) using
-Newton's method.
-<br>
-(Sven Wetterauer, 2012/06/03)
-
-<li>
-New: step-48 demonstrates the solution of a nonlinear wave equation
-with an explicit time stepping method. The usage of Gauss-Lobatto
-elements gives diagonal mass matrices, which obviates the solution of
-linear systems of equations. The nonlinear right hand side is
-evaluated with the matrix-free framework.
-<br>
-(Katharina Kormann and Martin Kronbichler, 2012/05/05)
-
-<li>
-New: step-37 shows how the matrix-free framework can be utilized to
-efficiently solve the Poisson equation without building global
-matrices. It combines fast operator evaluation with a multigrid solver
-based on polynomial Chebyshev smoother.
-<br>
-(Katharina Kormann and Martin Kronbichler, 2012/05/05)
-
-<li>
-New: A new matrix-free interface has been implemented. The framework
-is parallelized with MPI, TBB, and explicit vectorization instructions
-(new data type VectorizedArray). The class MatrixFree caches
-cell-based data in an efficient way. Common operations can be
-implemented using the FEEvaluation class.
-<br>
-(Katharina Kormann and Martin Kronbichler, 2012/05/05)
-
-<li>
-New: step-44 demonstrates one approach to modeling large
-deformations of nearly-incompressible elastic solids. The
-elastic response is governed by a non-linear, hyperelastic
-free-energy function. The geometrical response is also
-nonlinear, i.e., the program considers finite deformations.
-<br>
-(Andrew McBride and Jean-Paul Pelteret, 2012/04/25)
-
-<li>
-Changed: The version of BOOST we ship with deal.II has been upgraded
-to 1.49.0.
-<br>
-(Martin Kronbichler, 2012/04/07)
-
-<li>
-New: We have added a brief section to the step-12 tutorial programs that
-compares the DG solution computed there with one that one would obtain by
-using a continuous finite element.
-<br>
-(Wolfgang Bangerth, 2012/03/25)
-
-<li>
-New: Added support for codimension 2, i.e. for dim-dimensional objects
-embedded into spacedim=dim+2 dimensional space.
-<br>
-(Sebastian Pauletti, 2012/03/02)
-
-<li> Changed: Material and Boundary indicators have been both of the
-type unsigned char. Throughout the library, we changed their datatype
-to <code>types::material_id_t</code>
-resp. <code>types::boundary_id_t</code>, both typedefs of unsigned
-char. Internal faces are now characterized by
-types::internal_face_boundary_id(<code>=static_cast@<boundary_id_t@>(-1)</code>)
-instead of 255, so we get rid of that mysterious number in the source
-code. Material_ids are also assumed to lie in the range from 0 to
-types::invalid_material_id-1 (where <code>types::invalid_material_id =
-static_cast<material_id_t>(-1)</code>). With this change, it is now
-much easier to extend the range of boundary or material ids, if
-needed.
-<br>
-(Christian Goll 2012/02/27)
-
-<li> New: Functions like FEValues::get_function_values have long been
-able to extract values from pretty much any vector kind given to it (e.g.
-of kind Vector, BlockVector, PETScWrappers::Vector, etc). The list of
-allowed "vector" types now also includes IndexSet, which is interpreted
-as a vector of elements that are either zero or one, depending on whether
-an index is in the IndexSet or not.
-<br>
-As a consequence of this, the DataOut::add_data_vector functions now also
-work for such types of vectors, a use demonstrated in step-41.
-<br>
-(Wolfgang Bangerth, 2012/02/14)
-
-<li> New: It has long been a nuisance that the deal.II vector classes
-could only be accessed using <code>operator()</code> whereas the C++
-<code>std::vector</code> class required <code>operator[]</code>. This
-diminished the usefulness of template code. Historically, the reason
-was that the deal.II vector classes should use the same operator as
-the matrix classes, and C++ does not allow to use <code>operator[]</code>
-for matrices since this operator can only take a single argument.
-<br>
-In any case, all deal.II vector classes now support both kinds of
-access operators interchangeably.
-<br>
-(Wolfgang Bangerth, 2012/02/12)
-
-<li> Fixed: Linking shared libraries on PowerPC systems (e.g. on
-BlueGene systems) failed due to a miscommunication between compiler
-and linker. This is now worked around.
-<br>
-(Aron Ahmedia, Wolfgang Bangerth, 2012/02/06)
-
-<li> New: There is now a distributed deal.II vector class
-parallel::distributed::Vector that can be used with MPI. The
-vector is based on a contiguous locally owned range and allows easy
-access of ghost entries from other processors. The vector interface is
-very similar to the non-distributed class Vector<Number>.
-<br>
-(Katharina Kormann, Martin Kronbichler, 2012/01/25)
-
-<li> Fixed: The <code>common/scripts/make_dependencies</code> program
-now behaves like the C++ compiler when
-searching include paths for <code># include "..."</code> directives.
-<br>
-(Timo Heister, 2012/01/10)
-
-<li> Fixed: The Intel compiler complains that it can't copy Trilinos vector
-reference objects, preventing the compiling of step-32. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/11/09)
-
-<li> Fixed: Intel ICC 12.1 gets into trouble with BOOST because BOOST
-believes that the compiler supports C++0x but one then still has to
-specify the corresponding flag on the command line to avoid compiler
-errors. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/11/06)
-
-<li> Fixed: On some systems, <code>mpiCC</code> turns out to alias the
-C compiler, not the C++ compiler as expected. Consequently, try to use
-<code>mpic++</code> or <code>mpicxx</code> before <code>mpiCC</code> as
-these should really be unambiguous.
-<br>
-(Wolfgang Bangerth, 2011/11/05)
-
-<li> Fixed: Intel's ICC compiler identifies itself as <code>icpc version
-12.1.0 (gcc version 4.2.1 compatibility)</code> which we mistook as being
-GCC version 4.2. The same is true for the Intel C compiler. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/11/05)
-
-<li> Fixed: deal.II could not be compiled with gcc 4.6.1 when MPI is
-enabled due to a missing include file in file
-<code>source/base/utilities.cc</code>. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/10/25)
+<li> Nothing so far.
</ol>
<h3>Specific improvements</h3>
<ol>
-<li> New: The Patterns::Map pattern allows to describe maps from keys
-to values in input files.
-<br>
-(Wolfgang Bangerth, 2012/08/01)
-
-<ol>
-<li> Fixed: DoFTools::make_zero_boundary_constraints now also works for parallel distributed triangulations.
-<br>
-(Wolfgang Bangerth, 2012/07/24)
-
-<li> Fixed: GridTools::find_active_cell_around_point() works now also if the cell in which the point we look for lies is not adjacent to the closest vertex of p. The tests bits/find_cell_8 and _9 illustrate this.
-<br>
-(Wolfgang Bangerth, Christian Goll 2012/07/20)
-
-<li> Fixed: Using the SolutionTransfer class with hp::DoFHandler
-and on meshes where some cells are associated with a FE_Nothing element
-could result in an error. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2012/06/29)
-
-<li> Fixed: The MappingQ1::transform_real_to_unit_cell function as
-well as the equivalent ones in derived classes sometimes get into
-trouble if they are asked to compute the preimage of this point
-in reference cell coordinates. This is because for points outside
-the reference cell, the mapping from unit to real cell is not
-necessarily invertible, and consequently the Newton iteration to
-find the preimage did not always converge, leading to an exception.
-While this is not entirely wrong (we could, after all, not compute
-the desired quantity), not all callers of this function were prepared
-to accept this result -- in particular, the function
-CellAccessor<3>::point_inside should have really just returned false
-in such cases but instead let the exception so generated propagate
-through. This should now be fixed.
-<br>
-(Wolfgang Bangerth, Eric Heien, Sebastian Pauletti, 2012/06/27)
-
-<li> Fixed: The function VectorTools::compute_no_normal_flux_constraints had
-a bug that led to an exception whenever we were computing constraints for
-vector fields located on edges shared between two faces of a 3d cell if those
-faces were not parallel to the axes of the coordinate system. This is now fixed.
-<br>
-(Wolfgang Bangerth, Jennifer Worthen, 2012/06/27)
-
-<li>
-Fixed: Due to an apparent bug in autoconf, it was not possible to
-override the <code>F77</code> environment variable to select anything
-else than gfortran. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2012/06/08)
-
-<li> Fixed: TrilinosWrappers::VectorBase::swap() is now working as expected. (thanks Uwe Köcher)
-<br>
-(Timo Heister 2012/07/03)
-
-<li> Fixed: Some instantiations for
-DerivativeApproximation::approximate_derivative_tensor() were missing.
-<br>
-(Timo Heister 2012/06/07)
-
-<li> New: The finite element type FE_DGQArbitraryNodes is now
-working also in codimension one spaces.
-<br>
-(Luca Heltai, Andrea Mola 2012/06/06)
-
-<li> Fixed: Computing the $W^{1,\infty}$ norm and seminorm in
-VectorTools::integrate_difference was not implemented. This is now
-fixed.
-<br>
-(Wolfgang Bangerth 2012/06/02)
-
-<li> Fixed: A problem in MappingQ::transform_real_to_unit_cell
-that sometimes led the algorithm in this function to abort.
-<br>
-(Wolfgang Bangerth 2012/05/30)
-
-<li> New: The function DataOutInterface::write_pvd_record can be used
-to provide Paraview with metadata that describes which time in a
-simulation a particular output file corresponds to.
-<br>
-(Marco Engelhard 2012/05/30)
-
-<li> Fixed: A bug in 3d with hanging nodes in GridTools::find_cells_adjacent_to_vertex()
-that caused find_active_cell_around_point() to fail in those cases.
-<br>
-(Timo Heister, Wolfgang Bangerth 2012/05/30)
-
-<li> New: DoFTools::make_periodicity_constraints implemented which
-inserts algebraic constraints due to periodic boundary conditions
-into a ConstraintMatrix.
-<br>
-(Matthias Maier, 2012/05/22)
-
-<li> New: The GridIn::read_unv function can now read meshes generated
-by the Salome framework, see http://www.salome-platform.org/ .
-<br>
-(Valentin Zingan, 2012/04/27)
-
-<li> New: There is now a second DoFTools::map_dofs_to_support_points
-function that also works for parallel::distributed::Triangulation
-triangulations.
-<br>
-(Wolfgang Bangerth, 2012/04/26)
-
-<li> New: There is now a second DoFTools::extract_boundary_dofs
-function that also works for parallel::distributed::Triangulation
-triangulations.
-<br>
-(Wolfgang Bangerth, 2012/04/26)
-
-<li> New: The FullMatrix::extract_submatrix_from, FullMatrix::scatter_matrix_to,
-FullMatrix::set functions are new.
-<br>
-(Andrew McBride, Jean Paul Pelteret, Wolfgang Bangerth, 2012/04/24)
-
-<li> Fixed:
-The method FEValues<dim>::inverse_jacobian() previously returned the transpose of the
-inverse Jacobians instead of just the inverse Jacobian as documented. This is now fixed.
-<br>
-(Sebastian Pauletti, Katharina Kormann, Martin Kronbichler, 2012/03/11)
-
-<li> Extended:
-SolutionTransfer is now also able to transfer solutions between hp::DoFHandler where
-the finite element index changes during refinement.
-<br>
-(Katharina Kormann, Martin Kronbichler, 2012/03/10)
-
-<li> Changed:
-A new method to determine an initial guess for the Newton method was coded
-in MappingQ::transform_real_to_unit_cell.
-The code in transform_real_to_unit_cell was cleaned a little bit and a new code
-for the @<2,3@> case was added.
-<br>
-(Sebastian Pauletti, 2012/03/02)
-
-<li> Changed:
-In the context of codim@>0, Mapping::transform would require different inputs
-depending on the mapping type.
-For mapping_covariant, mapping_contravariant the input is DerivativeForm<1, dim, spacedim>
-but for mapping_covariant_gradient, mapping_contravariant_gradient the input is Tensor<2,dim>.
-<br>
-(Sebastian Pauletti, 2012/03/02)
-
-<li> New:
-A new class DerivativeForm was added.
-This class is supposed to represent the derivatives of a mapping.
-<br>
-(Sebastian Pauletti, 2012/03/02)
-
-<li> Fixed: TrilinosWrappers::Vector::all_zero() in parallel.
-<br>
-(Timo Heister, Jörg Frohne, 2012/03/06)
-
-<li> New: GridGenerator::quarter_hyper_shell() in 3d.
-<br>
-(Thomas Geenen, 2012/03/05)
-
-<li> New: DataOut::write_vtu_in_parallel(). This routine uses MPI I/O to write
-a big vtu file in parallel.
-<br>
-(Timo Heister, 2012/02/29)
-
-<li> Fixed: parallel::distributed::Triangulation::clear() forgot
-to update the number cache of this class, leading to wrong results
-when calling functions like
-parallel::distributed::Triangulation::n_global_active_cells();
-<br>
-(Wolfgang Bangerth, 2012/02/20)
-
-<li> Improved: FEFieldFunction allows now for the computation of Laplacians.
-<br>
-(Christian Goll, 2012/02/16)
-
-<li> New: The function IndexSet::fill_binary_vector creates a numerical
-representation of an IndexSet containing zeros and ones.
-<br>
-(Wolfgang Bangerth, 2012/02/12)
-
-<li> New: The function IndexSet::clear resets an index set to be empty.
-<br>
-(Wolfgang Bangerth, 2012/02/12)
-
-<li> New: There are now global functions l1_norm() and linfty_norm() that compute
-the respective norms of a rank-2 tensor.
-<br>
-(Wolfgang Bangerth, 2012/02/08)
-
-<li> New: VectorTools::interpolate_to_different_mesh implemented which interpolates between
- DoFHandlers with different triangulations based on a common coarse grid.
-<br>
-(Matthias Maier, 2012/02/08)
-
-<li> Improved: DoFTools::map_dofs_to_support_points() now also works within the hp framework.
-<br>
-(Christian Goll, 2012/02/02)
-
-<li> Improved: There is now a constructor for FESystem that allows to
-create collections of finite elements of arbitrary length.
-<br>
-(Jason Sheldon, 2012/01/27)
-
-<li> Improved: VectorTools::point_value() now also works within the hp framework.
-<br>
-(Christian Goll, 2012/01/26)
-
-<li> Fixed: GridTools::find_active_cell_around_point() for the hp-case works now also with MappingCollections containing only one mapping, as is the standard case in other functions using hp.
-<br>
-(Christian Goll, 2012/01/26)
-
-<li> Fixed: parallel::distributed::refine_and_coarsen_fixed_fraction()
-contained a rounding bug that often produced wrong results.
-<br>
-(Timo Heister, 2012/01/24)
-
-<li> Improved: Utilities::break_text_into_lines now also splits the string at '\\n'.
-<br>
-(Timo Heister, 2012/01/17)
-
-<li> Fixed: When <code>./configure</code> does not detect the presence
-of <code>zlib</code>, writing output in VTU format failed to produce
-a valid output file.
-<br>
-(Timo Heister, 2012/01/03)
-
-<li> Improved: <code>PETScWrappers::SolverXXX</code> class was
-restricted to using default solver options for the KSP only. It is now
-possible to override those by using PETSc command-line options
-<code>-ksp_*</code>; giving greater flexibility in controlling PETSc
-solvers. (See the class's documentation).
-<br>
-(Vijay S. Mahadevan, 2011/12/22)
-
-<li> New: The GridIn class now also reads the GMSH format 2.2 as written by
-GMSH 2.5.
-<br>
-(Vijay S. Mahadevan, Wolfgang Bangerth, 2011/12/19)
-
-<li> Improved: The GridRefinement::refine_and_coarsen_optimize function
-assumed that the expected convergence order was 2. It has now gotten an
-argument by which the user can prescribe a different value. A bug has also
-been fixed in which the function incorrectly assumed in its algorithm that
-the mesh was two-dimensional.
-<br>
-(Christian Goll, 2011/12/16)
-
-<li> Fixed: Restriction and prolongation didn't work for elements of
-kind FE_Nothing. Consequently, many other parts of the library also
-didn't work, such as the SolutionTransfer class. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/12/15)
-
-<li> Fixed: The DerivativeApproximation class now works for distributed computations.
-<br>
-(Timo Heister, 2011/12/15)
-
-<li> Changed: The ExcMessage exception class took an argument of
-type <code>char*</code> that was displayed when the exception
-was raised. However, character pointers are awkward to work with
-because (i) they can not easily be composed to contain things like
-file names that are only known at run-time, and (ii) the string
-pointed to by the pointer had to live longer than the local expression
-in which the exception is generated when using the AssertThrow macro
-(because, when we create an exception, the exception object is passed
-up the call stack until we find a catch-clause; at that time, however,
-the scope in which the exception object was created has long been left).
-This restriction made it impossible to construct the message using std::string
-and then just do something like <code>(std::string("file: ")+filename).c_str()</code>.
-<br>
-To remedy this flaw, the type of the argument to ExcMessage has been
-changed to std::string since objects of this type are readily copyable
-and therefore live long enough.
-<br>
-(Wolfgang Bangerth, 2011/12/14)
-
-<li> New: Setting up a class derived from DataPostprocessor required some
-pretty mechanical steps in which one has to overload four member functions.
-For common cases where a postprocessor only computes a single scalar or
-a single vector, this is tedious and unnecessary. For these cases, the
-new classes DataPostprocessorScalar and DataPostprocessorVector provide
-short cuts that make life simpler.
-<br>
-(Wolfgang Bangerth, 2011/12/14)
-
-<li> Changed: The DataPostprocessor class previously required users of this
-class to overload DataPostprocessor::get_names(),
-DataPostprocessor::get_data_component_interpretation()
-and DataPostprocessor::n_output_variables(). The latter function is redundant
-since its output must equal the length of the arrays returned by the
-first two of these functions. It has therefore been removed.
-<br>
-(Wolfgang Bangerth, 2011/12/14)
-
-<li> Improved: Objects of the type LogStream::Prefix can now be used
-as a safe implementation of the push and pop mechanism for log
-prefices.
-<br>
-(Guido Kanschat, 2011/12/09)
-
-<li> New: IndexSet::add_indices(IndexSet).
-<br>
-(Timo Heister, 2011/12/09)
-
-<li> Fixed: Finite element Hessians get computed for codimension one,
-at least for FE_Poly derived classes.
-<br>
-(Guido Kanschat, 2011/12/07)
-
-<li> Changed: Output of ParameterHandler::print_parameters with argument
-ParameterHandler::LaTeX was not particularly readable. The output has
-therefore been rewritten to be more structured and readable.
-<br>
-(Wolfgang Bangerth, 2011/11/28)
-
-<li> Fixed: The TimerOutput class set the alignment of output to right-aligned
-under some circumstances, but didn't reset this to the previous value at the
-end of output. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/11/28)
-
-<li> New: The copy constructor of the SparseMatrixEZ function now works
-(rather than throwing an exception) if the copied matrix has size zero.
-This is in accordance to the other matrix classes.
-<br>
-(Wolfgang Bangerth, 2011/11/15)
-
-<li> New: The class ScalarFunctionFromFunctionObject provides a quick way to
-convert an arbitrary function into a function object that can be passed
-to part of the library that require the Function@<dim@> interface.
-The VectorFunctionFromScalarFunctionObject class does a similar thing.
-<br>
-(Wolfgang Bangerth, 2011/11/15)
-
-<li> New: The DoFTools::count_dofs_per_block function now also works
-for objects of type hp::DoFHandler.
-<br>
-(Jason Sheldon, 2011/11/13)
-
-<li> New: FETools::get_fe_from_name() can now return objects of type FE_Nothing.
-<br>
-(Scott Miller, Jonathan Pitt, 2011/11/10)
-
-<li> New: Implementation of an alternative handling of
-inhomogeneous constraints in ConstraintMatrix. This is controlled with
-a new parameter use_inhomogeneities_for_rhs in
-distribute_local_to_global() and determines whether the correct or
-zero values (this was the case before and still is the default) are
-kept in the linear system during the solution process.
-<br>
-(Jörg Frohne, 2011/11/01)
-
-<li> Fixed: SparseMatrix::mmult and SpareMatrix::Tmmult had a number of
-issues that are now fixed: (i) rebuilding the sparsity pattern was allowed
-even if several of the matrices involved in these operations shared a
-sparsity pattern; (ii) the functions had a vector argument that had a default
-value but the default value could not be used because it wasn't used in a
-template context deducible by the compiler.
-<br>
-(Wolfgang Bangerth, 2011/10/30)
-
-<li> New:
-parallel::distributed::Triangulation::mesh_reconstruction_after_repartitioning
-setting which is necessary for save()/load() to be deterministic. Otherwise
-the matrix assembly is done in a different order depending on the order of old
-refinements.
-<br>
-(Timo Heister, 2011/10/26)
-
-<li> New: TriaAccessor<>::minimum_vertex_distance().
-<br>
-(Timo Heister, 2011/10/25)
-
-<li> New: TableHandler::print_text now supports not only printing column
-keys above their own column, but also in a separate header, to make it simpler
-for external plotting programs to skip this line.
-<br>
-(Wolfgang Bangerth, 2011/10/22)
-
-<li> Fixed: Trying to write a TableHandler object that is empty resulted
-in a segmentation fault. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/10/21)
-
-<li> New: The TableHandler class can now pad columns that have only been
-partially filled. See the documentation of the class for a description.
-<br>
-(Wolfgang Bangerth, 2011/10/18)
-
-<li> Fixed: In TableHandler::print_text, it can happen that the function
-wants to print an empty string as the element of the table to be printed.
-This can confuse machine readers of this table, for example for visualization,
-since they then do not see this column in that row. To prevent this, we now
-print <code>""</code> in such places.
-<br>
-(Wolfgang Bangerth, 2011/10/18)
-
-<li> Fixed: Using Trilinos versions 10.4 and later on Debian failed to
-configure due to a different naming scheme of Trilinos libraries on
-Debian. This is now fixed.
-<br>
-(Wolfgang Bangerth, 2011/10/17)
-
-<li> Changed: The TableHandler class has been changed significantly
-internally. It could previously store arbitrary values (though in practice,
-only int, unsigned int, double and std::string were implemented). The class is
-now restricted to this particular set of types. On the other hand, the
-TableHandler class can now be serialized.
-<br>
-(Wolfgang Bangerth, 2011/10/17)
-
-<li> Fixed: searching in the doxygen documentation.
+<li> New: TableHandler TextOutputFormat::simple_table_with_separate_column_description
+that skips aligning the columns for increased performance.
<br>
-(Timo Heister, 2011/10/13)
+(Timo Heister, 2012/09/10)
-<li> New: parallel::distributed::Triangulation::save()/load() to store
-the refinement information to disk. Also supports saving solution vectors
-using the SolutionTransfer class.
+<li> Fixed: The Clang C++ compiler had some trouble dealing with obtaining
+the return value of a Threads::Task object, due to a compiler bug in
+dealing with friend declarations. This is now fixed.
<br>
-(Timo Heister, 2011/10/12)
+(Wolfgang Bangerth, 2012/09/04)
-<li> Fixed: The DataOut_DoFData::merge_patches did not compile with newer compilers.
+<li> Fixed: When applying a ConstraintMatrix to a block matrix
+where the last few rows are empty, we ran into an unrelated assertion.
This is now fixed.
<br>
-(Wolfgang Bangerth, 2011/10/11)
+(Jason Sheldon, Wolfgang Bangerth, 2012/09/04)
</ol>
mailing list</a> for additional news.
</p>
- <p> Changes in the library since the last major release are
- <a href="../doxygen/deal.II/changes_after_7_1.html">here.</a></p>
+ <p>
+ <dt><strong>Recent changes</strong></dt>
+ <dd>
+ Changes in the library since the last major release are
+ <strong><a href="../doxygen/deal.II/changes_after_7_2.html">here.</a></strong>
+ </dd>
+ </p>
<dl>
+ <dt>
+ <strong style="color:red">2012/09/03: Version 7.2 released</strong>
+ </dt>
+ <dd>
+ Version 7.2.0 was released today. This release provides four
+ new tutorial programs, a framework for matrix-free
+ computations, and a large number of enhancements and bug fixes
+ throughout the entire library. A complete list of new
+ features is found <a
+ href="../doxygen/deal.II/changes_between_7_1_and_7_2.html" target="body">here</a>.
+ </dd>
+
+
<dt>
<strong>2012/06/06: step-43 — an efficient solver for
two-phase flow</strong>
<title>Porting deal.II</title>
<link href="screen.css" rel="StyleSheet" media="screen">
<meta name="author" content="the deal.II authors <authors@dealii.org>">
- <meta name="copyright" content="Copyright (C) 2000, 2001, 2002, 2005, 2010 by the deal.II authors">
+ <meta name="copyright" content="Copyright (C) 2000, 2001, 2002, 2005, 2010, 2012 by the deal.II authors">
<meta name="date" content="$Date$">
<meta name="svn_id" content="$Id$">
<meta name="keywords" content="deal.II porting">
<hr>
<address>
-<a href="mail.html" target="body">The deal.II
-mailing list</a>
+<a href="mail.html" target="body">The deal.II Group</a>
</address>
</body>
<strong>Preconditioning for Allen-Cahn variational
inequalities with non-local constraints</strong>
<br>
- Journal of Computational Physics, vol. 231, pp. 5406-5420, 2012.
+ Journal of Computational Physics, vol. 231, pp. 5406-5402, 2012.
</li>
<li> A. Bonito, I. Kyza, R. H. Nochetto
<it>hp</it>-adaptive finite element strategy for Maxwell's equations
</strong>
<br>
- Preprint 12/04, Karlsruhe Institute of Technology, 2012.
+ Preprint 12/04, Karlsruhe Institute of Technology (KIT), 2012.
+ </li>
+
+ <li> <a href="http://www.math.kit.edu/ianm2/~buerg/"
+ target="_top">M. Bürg</a>
+ <br>
+ <strong>A Fully Automatic <it>hp</it>-Adaptive Refinement Strategy
+ </strong>
+ <br>
+ PhD Thesis, Karlsruhe Institute of Technology (KIT), 2012.
</li>
<li> A. Cangiani, J. Chapman, E. Georgoulis, M. Jensen
<!-- http://arxiv.org/abs/1201.2878 -->
</li>
+ <li> A. Cangiani, J. Chapman, E. Georgoulis, M. Jensen
+ <br>
+ <strong>On Local Super-Penalization of Interior Penalty Discontinuous Galerkin Methods</strong>
+ <br>
+ arXiv:1205.5672v1 [math.NA], 2012.
+ <!-- http://arxiv.org/abs/1205.5672 -->
+ </li>
+
+ <li> T. Carraro, J. Joos, B. Rüger, A. Weber, E. Ivers-Tiffée
+ <br>
+ <strong>3D finite element model for reconstructed mixed-conducting
+ cathodes: I. Performance quantification</strong>
+ <br>
+ Electrochimica Acta, Volume 77, pp. 315-323, 2012.
+ </li>
+
+ <li> T. Carraro, J. Joos, B. Rüger, A. Weber, E. Ivers-Tiffée
+ <br>
+ <strong>3D finite element model for reconstructed mixed-conducting
+ cathodes: II. Parameter sensitivity analysis</strong>
+ <br>
+ Electrochimica Acta, Volume 77, pp. 309-314, 2012.
+ </li>
+
<li> C.-C. Chueh, N. Djilali, W. Bangerth
<br>
<strong>An h-adaptive Operator Splitting Method for
arXiv:1202.3583v1 [nlin.PS], 2012.
</li>
+ <li> J. J. Gaitero, J. S. Dolado, C. Neuen, F. Heber, E. Koenders
+ <br>
+ <strong>Computational 3d simulation of Calcium leaching in
+ cement matrices
+ </strong>
+ <br>
+ Institut für numerische Simulation, Rheinische
+ Friedrich-Wilhelms-Universität Bonn, INS Preprint 1203, 2012.
+ </li>
+
<li> T. George, A. Gupta, V. Sarin
<br>
<strong>An empirical analysis of the performance of iterative
<!-- http://onlinelibrary.wiley.com/doi/10.1002/jnm.840/full -->
</li>
+ <li> O. Jirousek, P. Zlamal
+ <br>
+ <strong>Large-scale micro-finite element simulation of
+ compressive behavior of trabecular bone microstructure</strong>
+ <br>
+ Proceedings of the 18th Conference on Engineering Mechanics,
+ Svratka, Czech Republic, May 14-17, 2012; paper #206,
+ pp. 543-549, 2012.
+ </li>
+
+ <li> J. Joos, M. Ender, T. Carraro, A. Weber, E. Ivers-Tiffée
+ <br>
+ <strong>Representative Volume Element Size for Accurate Solid Oxide
+ Fuel Cell Cathode Reconstructions from Focused Ion Beam Tomography
+ Data</strong>
+ <br>
+ Electrochimica Acta, in press, 2012.
+ <!-- http://www.sciencedirect.com/science/article/pii/S001346861200761X -->
+ </li>
+
<li> S. Joshi
<br>
<strong>A model for the estimation of residual stresses in
arXiv:1203.3384v1 [math.NA], 2012.
</li>
- <li>
- T. Rees, M. Stoll
+ <li> M. J. Rapson, J. C. Tapson, D. Karpul
<br>
- <strong>A fast solver for an H<sub>1</sub> regularized
- optimal control problem
+ <strong>Unification and Extension of Monolithic State Space
+ and Iterative Cochlear Models
</strong>
<br>
- Preprint 12-06, Max-Planck-Institute Magdeburg, 2012.
+ Journal of the Acoustical Society of America, vol. 131, pp. 3935-3952, 2012.
</li>
<li> N. Richardson
Vol. 28, pp. 111–132, 2012.
</li>
- <li> M. J. Rapson, D. Karpul, J. C. Tapson
+ <li> M. Stoll, A. Wathen
<br>
- <strong>Unification and extension of monolithic state space and
- iterative cochlear models
+ <strong>All-at-once solution of time-dependent PDE-constrained optimization problems
</strong>
<br>
- J. Acoust. Soc. Am. Volume 131, Issue 5, pp. 3935-3952, 2012.
+ Preprint, University of Magdeburg, 2012
+ <!-- http://www.mpi-magdeburg.mpg.de/people/stollm/pub.html -->
</li>
- <li> M. Stoll, A. Wathen
+ <li> M. Thalhammer, J. Abhau
<br>
- <strong>All-at-once solution of time-dependent PDE-constrained optimization problems
+ <strong>A numerical study of adaptive space and time discretisations for Gross–Pitaevskii equations
</strong>
<br>
- Preprint, University of Magdeburg, 2012
- <!-- http://www.mpi-magdeburg.mpg.de/people/stollm/pub.html -->
+ Journal of Computational Physics, vol. 231, pp. 6665-6681, 2012.
</li>
<li> M. Vavalis, M. Mu, G. Sarailidis
<li> M. Wallraff, T. Leicht, M. Lange-Hegermann
<br>
<strong>Numerical flux functions for Reynolds-averaged Navier-Stokes
- and kω turbulence model computations with a line-preconditioned
+ and kω turbulence model computations with a line-preconditioned
p-multigrid discontinuous Galerkin solver</strong>
<br>
Int. J. Numer. Meth. Fluids, published online, 2012.
+ <!-- http://onlinelibrary.wiley.com/doi/10.1002/fld.3702/full -->
</li>
<li> M. Wallraff, T. Leicht, M. Lange-Hegermann
<br>
RICAM Report 2012-06, 2012.
</li>
- </ol>
+ <li> S. Yoon, M. A. Walkley, O. G. Harlen
+ <br>
+ <strong>Two particle interactions in a confined viscoelastic fluid under shear
+ </strong>
+ <br>
+ Journal of Non-Newtonian Fluid Mechanics, in press, 2012.
+ <!-- http://www.sciencedirect.com/science/article/pii/S0377025712001309 -->
+ </li>
+
+ <li> <a href="http://www.ippt.gov.pl/~tyoung"
+ target="_top">T. D. Young</a>, E. Romero, J. E. Roman
+ <br>
+ <strong>Parallel finite element density functional theory exploiting grid refinement and subspace recycling
+ </strong>
+ <br>
+ Comput. Phys. Commun., accepted, 2012.
+ </li>
+
+ <li> S. Zhang, X. Lin, H. Zhang, D. A. Yuen, Y. Shi
+ <br>
+ <strong>A new method for calculating displacements from
+ elastic dislocation over arbitrary 3-D fault surface with
+ extended FEM and Adaptive Mesh Refinement (AMR)</strong>
+ <br>
+ Proceedings of the International Workshop on Deep Geothermal
+ Systems, Wuhan, China, June 29-30, 2012.
+ </li>
+ </ol>
<a name="2011"> </a>
<h3>Publications in 2011</h3>
</li>
+ <li> J. Joos, T. Carraro, M. Ender, B. Rüger, A. Weber, E. Ivers-Tiffée
+ <br>
+ <strong>Detailed Microstructure Analysis and 3D Simulations of Porous Electrodes</strong>
+ <br>
+ ECS Trans. 35, pp. 2357-2368, 2011.
+ </li>
+
<li> F. Keller, H. Nirschl, W. Dörfler
<br>
<strong>Primary charge effects on prolate spheroids with moderate aspect ratios
2011
</li>
- <li> M. J. Rapson, D. Karpul, J. C. Tapson
- <br>
- <strong>Unification and Extension of Monolithic State Space
- and Iterative Cochlear Models
- </strong>
- <br>
- Journal of the Acoustical Society of America, accepted, 2011.
- </li>
-
<li> M. J. Rapson, J. C. Tapson
<br>
<strong>Investigations into Time
Submitted to Archive of Numerical Software, 2011.
</li>
- <li> M. Steigemann
- <br>
- <strong>Simulation of Quasi-static Crack Propagation in Functionally
- Graded Materials
- </strong>
- <br>
- in: Functionally Graded Materials, N.J. Reynolds, ed., Nova Science
- Publishers, pp. 193-248, 2011.
- </li>
-
- <li>
- M. Stoll
- <br>
- <strong>One-shot solution of a time-dependent time-periodic
- PDE-constrained optimization problem
- </strong>
- <br>
- Preprint 11-04, Max-Planck-Institute Magdeburg, 2011.
- </li>
-
<li>
M. Stoll, J. Pearson, A. Wathen
<br>
Reduction of Drift-Diffusion Equations in Electrical
Networks</strong>
<br>
- Hamburger Beiträge zur Angewandten Mathematik, Nr. 2010-09.
+ Scientific Computing in Electrical Engineering, SCEE 2010
+ Mathematics in Industry, Volume 16, Part 5, 423-431, 2012.
</li>
<li> M. Hinze, M. Kunkel
J. C. F. Pereira and A. Sequeira (eds.), 2010.
</li>
+ <li> J. Joos, B. Rüger, T. Carraro, A. Weber, E. Ivers-Tiffée
+ <br>
+ <strong>Electrode Reconstruction by FIB/SEM and Microstructure
+ Modeling</strong>
+ <br>
+ ECS Trans. 28, pp. 81-91, 2010.
+ </li>
+
<li> G. Kanschat, B. Rivière
<br>
<strong>A strongly conservative finite element method for the coupling
Engineering Fracture Mechanics, vol. 77, pp. 2145-2157, 2010
</li>
- <li>
- M. Stoll, A. Wathen
- <br>
- <strong>All-at-once solution of time-dependent Stokes control
- </strong>
- <br>
- Preprint 10-03, Max-Planck-Institute Magdeburg, 2010.
- </li>
-
<li>
M. Stoll, A. Wathen
<br>
G. Choi and J. Y. Yoo, eds.), pp. 31-45, Springer, 2009.
</li>
+ <li> B. Rüger, J. Joos, T. Carraro, A. Weber, E. Ivers-Tiffée
+ <br>
+ <strong>3D Electrode Microstructure Reconstruction and
+ Modelling</strong>
+ <br>
+ ECS Trans. 25, pp. 1211-1220, 2009.
+ </li>
+
<li>
D. Schötzau, L. Zhu
<br>
<br>
Preprint 2000-11 (SFB 359), IWR Heidelberg, October 1999.
<br>
- This paper is also available
- <a href="../reports/multithreading/index.html" target="body">online</a>.
- <br>
(<a href="2000/bangerth-2.html" target="body">Abstract</a>,
<a href="2000/bangerth-2.bib" target="body">BiBTeX entry</a>)
</li>
<hr>
<address>
- <a href="../mail.html">The deal.II mailing list</a></address>
+ <a href="../mail.html">The deal.II Group</a></address>
</body>
</html>
configuration.
</p>
- <p>
- Note that in order to use PETSc with <acronym>deal.II</acronym>
- with the current release version of <acronym>deal.II</acronym>
- you will need to have at least PETSc version 2.3.0 installed,
- earlier releases are no longer supported. There is no
- correlation between <acronym>deal.II</acronym> version numbers
- and PETSc version numbers. <acronym>deal.II</acronym> version
- 7.0 has been tested up to PETSc release 3.1.0-p8, and newer version up
- to at least PETSc release 3.2.
- </p>
-
<p>
There is an additional caveat: PETSc appears not to co-operate
well when using threads and some programs crash when deal.II is
<h5>Trilinos starting with version 10.0</h5>
<p style="color: red">
- Note: Trilinos versions 10.6.x, 10.8.0, 10.8.1, and 10.10.2 are not compatible with
+ 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.
- We recommend staying with 10.4.2 for the time being.
+ 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.
</p>
<p>
<hr>
<address>
- <a href="mail.html" target="body">The deal.II mailing list</a>
+ <a href="mail.html" target="body">The deal.II Group</a>
$Date: 2008-10-14 05:36:48 -0500 (Tue, 14 Oct 2008) $
</address>
</body>
at the command line, or, <a href="readme-petsc-trilinos.html"
target="body">here</a>.
</p>
+
+ <p>
+ (<acronym>deal.II</acronym>) version 7.2 (and higher) support
+ PETSc 3.x.x only; earlier releases are no longer supported.
+ </p>
</dd>
<a name="slepc"></a>
<dt>Trilinos</dt>
<dd>
<p>
- <acronym>deal.II</acronym> can also interface to <a
- href="http://trilinos.sandia.gov" target="_top">Trilinos</a>. The
+ <acronym>deal.II</acronym> can also interface
+ to <a href="http://trilinos.sandia.gov" target="_top">Trilinos</a>. The
simplest way to use these interfaces is to
pass <code>--with-trilinos=/path/to/trilinos</code>
- to <acronym>deal.II</acronym>'s <code>./configure</code> script. More
- configuration options can be found <a href="readme-petsc-trilinos.html"
+ to <acronym>deal.II</acronym>'s <code>./configure</code> script. Note
+ that not all versions of Trilinos are compatible
+ with <acronym>deal.II</acronym>. More details about compatibility and
+ configuration can be found <a href="readme-petsc-trilinos.html"
target="body">here</a>.
</p>
</dd>
-
<a name="metis"></a>
<dt>Metis</dt>
<dd>
<p>
- In order to generate partitionings of triangulations, we have
- functions that
- call <a href="http://www-users.cs.umn.edu/~karypis/metis/index.html"
- target="_top">METIS</a> library. METIS is a library that
- provides various methods to partition graphs, which we use to
- define which cell belongs to which part of a triangulation. The
- main point in using METIS is to generate partitions so that the
- interfaces between cell blocks are as small as possible. This
- data can, in turn, be used to distribute degrees of freedom onto
- different processors when using PETSc and/or SLEPc in parallel
- mode.
- </p>
-
- <p>
- As with PETSc and SLEPc, the use of METIS is optional. If you
- wish to use it, you can do so by having a METIS installation
- around at the time of calling
- <code>./configure</code> by either
- setting the <code>METIS_DIR</code> environment
- variable denoting the path to the METIS library, or using the
- <code>--with-metis</code> flag. If METIS was installed as part
- of <code>/usr</code> or <code>/opt</code>, instead of local directories
- in a home directory for example, you can use configure
- switches <code>--with-metis-include, --with-metis-libs</code>.
+ In order to generate partitionings of triangulations, we have
+ functions that
+ call <a href="http://glaros.dtc.umn.edu/gkhome/metis/metis/overview"
+ target="_top">METIS</a> library. METIS is a library that
+ provides various methods to partition graphs, which we use to
+ define which cell belongs to which part of a
+ triangulation. The main point in using METIS is to generate
+ partitions so that the interfaces between cell blocks are as
+ small as possible. This data can, in turn, be used to
+ distribute degrees of freedom onto different processors when
+ using PETSc and/or SLEPc in parallel mode.
</p>
<p>
- On some systems, when using shared libraries for deal.II, you may get
- warnings of the kind <code>libmetis.a(pmetis.o): relocation R_X86_64_32
- against `a local symbol' can not be used when making a shared
- object; recompile with -fPIC</code> when linking. This can be
- avoided by recompiling METIS with <code>-fPIC</code> as a compiler
- flag.
+ As with PETSc and SLEPc, the use of METIS is optional. If you
+ wish to use it, you can do so by having a METIS installation
+ around at the time of calling
+ <code>./configure</code> by either setting
+ the <code>METIS_DIR</code> environment variable denoting the
+ path to the METIS library, or using the
+ <code>--with-metis</code> flag.
</p>
<p>
- METIS is not needed when using <code>p4est</code> to parallelize
- programs, see below.
+ (<acronym>deal.II</acronym>) version 7.2 (and higher) support
+ METIS 5.x.x only; earlier releases are no longer
+ supported. <br>METIS is not needed when
+ using <code>p4est</code> to parallelize programs, see below.
</p>
</dd>
<a href="external-libs/arpack.html" target="body">this page</a>.
</dd>
-
+ <a name="HDF5"></a>
+ <dt>HDF5</dt>
+ <dd>
+ This adds HDF5/XDMF graphical output capabilities to deal.II. You need to
+ install the <a href="http://www.hdfgroup.org/HDF5/">HDF5 library</a>
+ separately. Configure with <code>--with-hdf5=</code> and point it to
+ the h5pcc or h5cc script inside your hdf5 installation.
+
+ For a detailed description of how to compile HDF5 and linking with
+ deal.II, see <a href="external-libs/hdf5.html" target="body">this
+ page</a>.
+ </dd>
</dl>
<hr>
<address>
- <a href="mail.html" target="body">The deal.II mailing list</a>
+ <a href="mail.html" target="body">The deal.II Group</a>
$Date$
</address>
</body>
td.build {
text-align: center;
vertical-align: middle;
+ font-size: small;
}
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
// Just this one is new: it declares
// a class
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
<code>bsub</code> with a whole host of options to run a job in parallel - so
that the exact command line syntax varies. If you have found out how to run a
job on your system, you should get output like this for a job on 8 processors,
-and with a few more refinement cycles than in the code above:
+and with a few more refinement cycles than in the code above (these
+results were generated in 2004 with older versions of deal.II and a
+version of METIS that generated different partitionings; consequently,
+the numbers you get today are slightly different):
@code
Cycle 0:
Number of active cells: 64
information for the last step, though, but you get the idea. All this is if
the debug flag in the Makefile was changed to "off", i.e. "optimized", and
with the generation of graphical output switched off for the reasons stated in
-the program comments above. The biggest 2d computations we did had roughly 7.1
+the program comments above. The biggest 2d computations we did had roughly 7.1
million unknowns, and were done on 32 processes. It took about 40 minutes.
Not surprisingly, the limiting factor for how far one can go is how much memory
-one has, since every process has to hold the entire mesh and DoFHandler objects,
+one has, since every process has to hold the entire mesh and DoFHandler objects,
although matrices and vectors are split up. For the 7.1M computation, the memory
-consumption was about 600 bytes per unknown, which is not bad, but one has to
+consumption was about 600 bytes per unknown, which is not bad, but one has to
consider that this is for every unknown, whether we store the matrix and vector
entries locally or not.
The last step, going up to 1.5 million unknowns, takes about 55 minutes with
16 processes on 8 dual-processor machines (of the kind available in 2003). The
-graphical output generated by
+graphical output generated by
this job is rather large (cycle 5 already prints around 82 MB of GMV data), so
we contend ourselves with showing output from cycle 4:
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
\\
u_1 &=& 0,
\\
- g &=& \left\{\begin{matrix}\sin (4\pi t) \\ 0\end{matrix}
- \qquad {\textrm{for}\ t\le \frac 12, x=-1, -\frac 13<y<\frac 13
- \atop \textrm{otherwise}}
+ g &=& \left\{\begin{matrix}\sin (4\pi t)
+ &\qquad& \text{for }\ t\le \frac 12, x=-1, -\frac 13<y<\frac 13
+ \\
+ 0
+ &&\text{otherwise}
+ \end{matrix}
\right.
@f}
This corresponds to a membrane initially at rest and clamped all around, where
// code. However, we're too lazy to
// do that here, so simply use a
// library function:
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
// In a very similar vein, we are
// also too lazy to write the code to
// and
// MatrixTools::create_laplace_matrix
// functions. They are declared here:
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
// Finally, here is an include file
// that contains all sorts of tool
#include <deal.II/fe/fe_values.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/matrices.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/matrix_tools.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/fe/fe_values.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
// we need for the treatment of
// boundary values:
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
// We're now almost to the end. The second to
// last group of include files is for the
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/numerics/solution_transfer.h>
stokes_constraints.clear ();
DoFTools::make_hanging_node_constraints (stokes_dof_handler,
stokes_constraints);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (0);
VectorTools::compute_no_normal_flux_constraints (stokes_dof_handler, 0,
no_normal_flux_boundaries,
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/numerics/solution_transfer.h>
stokes_constraints,
velocity_mask);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (1);
VectorTools::compute_no_normal_flux_constraints (stokes_dof_handler, 0,
no_normal_flux_boundaries,
old_temperature_solution = temperature_solution;
if (old_time_step > 0)
{
- stokes_solution.sadd (1.+time_step/old_time_step, -time_step/old_time_step,
- old_old_stokes_solution);
- temperature_solution.sadd (1.+time_step/old_time_step,
- -time_step/old_time_step,
- old_old_temperature_solution);
+ //Trilinos sadd does not like ghost vectors even as input. Copy into distributed vectors for now:
+ {
+ TrilinosWrappers::MPI::BlockVector distr_solution (stokes_rhs);
+ distr_solution = stokes_solution;
+ TrilinosWrappers::MPI::BlockVector distr_old_solution (stokes_rhs);
+ distr_old_solution = old_old_stokes_solution;
+ distr_solution .sadd (1.+time_step/old_time_step, -time_step/old_time_step,
+ distr_old_solution);
+ stokes_solution = distr_solution;
+ }
+ {
+ TrilinosWrappers::MPI::Vector distr_solution (temperature_rhs);
+ distr_solution = temperature_solution;
+ TrilinosWrappers::MPI::Vector distr_old_solution (temperature_rhs);
+ distr_old_solution = old_old_temperature_solution;
+ distr_solution .sadd (1.+time_step/old_time_step, -time_step/old_time_step,
+ distr_old_solution);
+ temperature_solution = distr_solution;
+ }
}
if ((timestep_number > 0) && (timestep_number % 100 == 0))
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/solution_transfer.h>
// Then, as mentioned in the introduction, we
#include <deal.II/fe/mapping_q.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
// And here are a few C++ standard header
// files that we will need:
#include <deal.II/fe/fe_tools.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/matrices.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/matrix_tools.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
EquationData::Velocity<dim> vel_exact;
std::map<unsigned int, double> boundary_values;
- std::vector<types::boundary_id_t> boundary_indicators;
+ std::vector<types::boundary_id> boundary_indicators;
Triangulation<dim> triangulation;
vel_exact.set_component(d);
boundary_values.clear();
- for (std::vector<types::boundary_id_t>::const_iterator
+ for (std::vector<types::boundary_id>::const_iterator
boundaries = boundary_indicators.begin();
boundaries != boundary_indicators.end();
++boundaries)
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/multigrid/mg_matrix.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
// This includes the data structures for the
// efficient implementation of matrix-free
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <iostream>
Triangulation<spacedim> volume_mesh;
GridGenerator::half_hyper_ball(volume_mesh);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
GridTools::extract_boundary_mesh (volume_mesh, triangulation,
--- /dev/null
+#step dofs error estimate l2error iterations efficiency order l2order
+0 256 2.974190e-01 9.904600e-01 4.524470e-03 14 0.300284 0.000000 0.000000
+1 400 2.585590e-01 7.386240e-01 2.885100e-03 16 0.350055 0.627480 2.016374
+2 544 1.892340e-01 6.575070e-01 1.479540e-03 16 0.287805 2.030277 4.343815
+3 688 1.503620e-01 4.547120e-01 9.005740e-04 16 0.330675 1.958261 4.228028
+4 832 1.053170e-01 3.548790e-01 4.750150e-04 17 0.296769 3.747254 6.731991
+5 1024 7.459510e-02 2.539050e-01 2.362060e-04 17 0.293791 3.322106 6.729380
+6 1216 5.291920e-02 1.836100e-01 1.224410e-04 17 0.288215 3.995439 7.647065
+7 1504 3.756820e-02 1.335280e-01 6.804430e-05 17 0.281351 3.223616 5.527534
+8 1984 2.657860e-02 9.576030e-02 3.998000e-05 17 0.277553 2.498686 3.839747
+9 2608 1.880990e-02 6.816520e-02 1.951950e-05 17 0.275946 2.528429 5.243492
+10 3472 1.328020e-02 4.780300e-02 1.006070e-05 17 0.277811 2.433078 4.632422
+11 4672 9.367220e-03 3.336360e-02 5.766390e-06 17 0.280762 2.351695 3.749897
// as quadrature and additional tools.
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <iostream>
#include <deal.II/fe/fe_values.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
# settings
include $D/common/Make.global_options
+################################################################
+# This example program will only work if Trilinos is installed. If this
+# is not the case, then simply redefine the main targets to do nothing
+ifneq ($(USE_CONTRIB_TRILINOS),yes)
+default run clean:
+ @echo
+ @echo "==========================================================="
+ @echo "= This program cannot be compiled without Trilinos. Make="
+ @echo "= sure you have Trilinos installed and detected during ="
+ @echo "= configuration of deal.II ="
+ @echo "==========================================================="
+ @echo
+
+else
+#
+################################################################
# Since the whole project consists of only one file, we need not
# consider difficult dependencies. We only have to declare the
# them:
include Makefile.dep
-
+endif # CONTRIB_USE_TRILINOS
</i>
+<a name="Intro"></a>
<h3>Introduction</h3>
This example is based on the Laplace equation in 2d and deals with the
An obvious way to obtain the variational formulation of the obstacle problem is to consider the total potential energy:
@f{equation*}
- E(u):=\dfrac{1}{2}\int\limits_{\Omega} \nabla u \cdot \nabla - \int\limits_{\Omega} fu.
+ E(u):=\dfrac{1}{2}\int\limits_{\Omega} \nabla u \cdot \nabla u - \int\limits_{\Omega} fu.
@f}
We have to find a solution $u\in G$ of the following minimization problem:
@f{equation*}
<i>with</i>
@f{align*}
a(u,v) &:= \left(\nabla u, \nabla v\right),\quad &&u,v\in V\\
- b(u,\mu) &:= \langle g-u,\mu\rangle,\quad &&u\in V,\quad\mu\in V'.
+ b(u,\mu) &:= \langle u,\mu\rangle,\quad &&u\in V,\quad\mu\in V'.
@f}
In other words, we can consider $\lambda$ as the negative of the additional, positive force that the
obstacle exerts on the membrane. The inequality in the second line of the
$\mu-\lambda<0$ at points where $\lambda=0$, given the definition of $K$.
The existence and uniqueness of $(u,\lambda)\in V\times K$ of this saddle
-point problem has been stated in Grossmann and Roos: Numerical treatment of
-partial differential equations, Springer-Verlag, Heidelberg-Berlin, 2007, 596
-pages, ISBN 978-3-540-71582-5.
+point problem has been stated in Glowinski, Lions and Tr\'{e}moli\`{e}res: Numerical Analysis of Variational
+Inequalities, North-Holland, 1981.
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
As a starting point we want to minimise an energy functional:
$$E(\tau) := \dfrac{1}{2}\int\limits_{\Omega}\tau A \tau d\tau,\quad \tau\in \Pi W^{div}$$
with
-$$W^{div}:=\lbrace \tau\in L^2(\Omega,\mathbb{R}^{dim\times\dim}_{sym}),div(\tau)\in L^2(\Omega,\mathbb{R}^{dim})\rbrace$$
-and
+$$W^{div}:=\lbrace \tau\in
+L^2(\Omega,\mathbb{R}^{dim\times\dim}_{sym}):div(\tau)\in L^2(\Omega,\mathbb{R}^{dim})\rbrace$$ and
$$\Pi \Sigma:=\lbrace \tau\in \Sigma, \mathcal{F}(\tau)\leq 0\rbrace$$
as the set of admissible stresses which is defined
by a continious, convex flow function $\mathcal{F}$.
With the goal to derive the dual formulation of the minimisation problem, we define a lagrange function:
-$$L(\tau,\varphi) := E(\tau) + (\varphi, div(\tau)),\quad \lbrace\tau,\varphi\rbrace\in\Pi W^{div}\times U$$
-with $U := \lbrace u\in H^1(\Omega), u = g \text{ on } \Gamma_D,u_n\leq 0 \text{ on } \Gamma_C \rbrace$.\\
+$$L(\tau,\varphi) := E(\tau) + (\varphi, div(\tau)),\quad \lbrace\tau,\varphi\rbrace\in\Pi W^{div}\times V^+$$
+with
+$$V^+ := \lbrace u\in V: u_n\leq g \text{ on } \Gamma_C \rbrace$$
+$$V:=\left[ H_0^1 \right]^{dim}:=\lbrace u\in \left[H^1(\Omega)\right]^{dim}: u
+= 0 \text{ on } \Gamma_D\rbrace$$
By building the fr\'echet derivatives of $L$ for both components we obtain the dual formulation for the stationary case
which is known as \textbf{Hencky-Type-Model}:\\
-Find a pair $\lbrace\sigma,u\rbrace\in \Pi W\times U$ with
+Find a pair $\lbrace\sigma,u\rbrace\in \Pi W\times V^+$ with
$$\left(A\sigma,\tau - \sigma\right) + \left(u, div(\tau) - div(\sigma)\right) \geq 0,\quad \forall \tau\in \Pi W^{div}$$
-$$-\left(div(\sigma),\varphi - u\right) \geq 0,\quad \forall \varphi\in U.$$
+$$-\left(div(\sigma),\varphi - u\right) \geq 0,\quad \forall \varphi\in V^+.$$
By integrating by parts and multiplying the first inequality by $C=A^{-1}$ we achieve the primal-mixed version of our problem:\\
-Find a pair $\lbrace\sigma,u\rbrace\in \Pi W\times U$ with
+Find a pair $\lbrace\sigma,u\rbrace\in \Pi W\times V^+$ with
$$\left(\sigma,\tau - \sigma\right) - \left(C\varepsilon(u), \tau - \sigma\right) \geq 0,\quad \forall \tau\in \Pi W$$
-$$\left(\sigma,\varepsilon(\varphi) - \varepsilon(u)\right) \geq 0,\quad \forall \varphi\in U.$$
+$$\left(\sigma,\varepsilon(\varphi) - \varepsilon(u)\right) \geq 0,\quad \forall \varphi\in V^+.$$
Therein $\varepsilon$ denotes the linearised deformation tensor with $\varepsilon(u) := \dfrac{1}{2}\left(\nabla u + \nabla u^T\right)$ for small deformations.\\
Most materials - especially metals - have the property that they show some hardening effects during the forming process.
There are different constitutive laws to describe those material behaviour. The most simple one is called linear isotropic hardening
with the flow function $\mathcal{F}(\tau,\eta) = \vert\tau^D\vert - (\sigma_0 + \gamma\eta)$.
It can be considered by establishing an additional term in our primal-mixed formulation:\\
-Find a pair $\lbrace(\sigma,\xi),u\rbrace\in \Pi (W\times L^2(\Omega,\mathbb{R}))\times U$ with
+Find a pair $\lbrace(\sigma,\xi),u\rbrace\in \Pi (W\times L^2(\Omega,\mathbb{R}))\times V^+$ with
$$\left(\sigma,\tau - \sigma\right) - \left(C\varepsilon(u), \tau - \sigma\right) + \gamma\left( \xi, \eta - \xi\right) \geq 0,\quad \forall (\tau,\eta)\in \Pi (W,L^2(\Omega,\mathbb{R}))$$
-$$\left(\sigma,\varepsilon(\varphi) - \varepsilon(u)\right) \geq 0,\quad \forall \varphi\in U,$$
+$$\left(\sigma,\varepsilon(\varphi) - \varepsilon(u)\right) \geq 0,\quad \forall \varphi\in V^+,$$
with the hardening parameter $\gamma > 0$.\\
Now we want to derive a primal problem which only depends on the displacement $u$. For that purpose we
set $\eta = \xi$ and eliminate the stress $\sigma$ by applying the projection theorem on\\
$$\left(\sigma - C\varepsilon(u), \tau - \sigma\right) \geq 0,\quad \forall \tau\in \Pi W,$$
which yields with the second inequality:\\
-Find the displacement $u\in U$ with
-$$\left(P_{\Pi}(C\varepsilon(u)),\varepsilon(\varphi) - \varepsilon(u)\right) \geq 0,\quad \forall \varphi\in U,$$
+Find the displacement $u\in V^+$ with
+$$\left(P_{\Pi}(C\varepsilon(u)),\varepsilon(\varphi) - \varepsilon(u)\right) \geq 0,\quad \forall \varphi\in V^+,$$
with the projection:
$$P_{\Pi}(\tau):=\begin{cases}
\tau, & \text{if }\vert\tau^D\vert \leq \sigma_0 + \gamma\xi,\\
with a further material parameter $\mu>0$ called shear modulus.\\
So what we do is to calculate the stresses by using Hooke's law for linear elastic, isotropic materials
$$\sigma = C \varepsilon(u) = 2\mu \varepsilon^D(u) + \kappa tr(\varepsilon(u))I = \left[2\mu\left(\mathbb{I} -\dfrac{1}{3} I\otimes I\right) + \kappa I\otimes I\right]\varepsilon(u)$$
-with the new material parameter $\kappa>0$ (bulk modulus). The variables $I$ and $\mathbb{I}$ denote the identity tensors of second and forth order.\\
+with the material parameter $\kappa>0$ (bulk modulus). The variables $I$ and $\mathbb{I}$ denote the identity tensors of second and forth order.\\
In the next step we test in a pointwise sense where the deviator part of the stress in a norm is bigger as the yield stress.
If there are such points we project the deviator stress in those points back to the yield surface. Methods of this kind
are called projections algorithm or radial-return-algorithm.\\
For the newton method we have to linearise the following semi-linearform
$$a(\psi;\varphi) := \left(P_{\Pi}(C\varepsilon(\varphi)),\varepsilon(\varphi)\right).$$
-Becaus we have to find the solution $u$ in the convex set $U$, we have to apply an SQP-method (SQP: sequential quadratic
+Becaus we have to find the solution $u$ in the convex set $V^+$, we have to apply an SQP-method (SQP: sequential quadratic
programming). That means we have to solve a minimisation problem for a known $u^i$ in every SQP-step of the form
\begin{eqnarray*}
& & a(u^{i};u^{i+1} - u^i) + \dfrac{1}{2}a'(u^i;u^{i+1} - u^i,u^{i+1} - u^i)\\
&=& a(u^i;u^{i+1}) - a(u^i;u^i) +\\
& & \dfrac{1}{2}\left( a'(u^i;u^{i+1},u^{i+1}) - 2a'(u^i;u^i,u^{i+1}) - a'(u^i;u^i,u^i)\right)\\
- &\rightarrow& min,\quad u^{i+1}\in U.
+ &\rightarrow& min,\quad u^{i+1}\in V^+.
\end{eqnarray*}
Neglecting the constant terms $ a(u^i;u^i)$ and $ a'(u^i;u^i,u^i)$ we obtain the following minimisation problem
-$$\dfrac{1}{2} a'(u^i;u^{i+1},u^{i+1}) - F(u^i)\rightarrow min,\quad u^{i+1}\in U$$
+$$\dfrac{1}{2} a'(u^i;u^{i+1},u^{i+1}) - F(u^i)\rightarrow min,\quad u^{i+1}\in V^+$$
with
$$F(\varphi) := \left(a'(\varphi;\varphi,u^{i+1}) - a(\varphi;u^{i+1}) \right).$$
-In the case of our constitutive law the derivitive of the semi-linearform $a(.;.)$ at the point $u^i$ is
+In the case of our constitutive law the derivative of the semi-linearform $a(.;.)$ at the point $u^i$ is
$$a'(u^i;\psi,\varphi) =$$
$$
\begin{cases}
-\left(\left[2\mu\left(\mathbb{I} - \dfrac{1}{3} I\otimes I\right) + \kappa I\otimes I\right]\varepsilon(\psi),\varepsilon(\varphi)\right), & \quad \vert\tau^D\vert \leq \sigma_0\\
-\left(\left[\dfrac{\alpha}{\vert\tau^D\vert}2\mu\left(\mathbb{I} - \dfrac{1}{3} I\otimes I - \dfrac{\tau^D\otimes\tau^D}{\vert\tau^D\vert}\right) + \kappa I\otimes I\right]\varepsilon(\psi),\varepsilon(\varphi) \right), & \quad \vert\tau^D\vert > \sigma_0
+\left(\left[2\mu\left(\mathbb{I} - \dfrac{1}{3} I\otimes I\right) + \kappa I\otimes I\right]\varepsilon(\psi),\varepsilon(\varphi)\right), & \quad
+ \vert \tau^D \vert \leq \sigma_0\\
+\left(\left[\dfrac{\alpha}{\vert\tau^D\vert}2\mu\left(\mathbb{I} - \dfrac{1}{3} I\otimes I - \dfrac{\tau^D\otimes\tau^D}{\vert\tau^D\vert}\right) +
+ \kappa I\otimes I\right]\varepsilon(\psi),\varepsilon(\varphi) \right), &
+ \quad \vert \tau^D \vert > \sigma_0
\end{cases}
$$
with
\section{Formulation as a saddle point problem}
On the line of step-41 we compose a saddle point problem out of the minimisation problem. Again we do so to gain a formulation
-that allows us to solve a linear system of equations finally.
+that allows us to solve a linear system of equations finally.\\
+We introduce a Lagrange multiplier $\lambda$ and the convex cone $K\subset W'$,
+$W'$ dual space of the trace space $W$ of $V$ restricted to $\Gamma_C$,
+$$K:=\{\mu\in W':\mu_T = 0,\quad\langle\mu n,v\rangle_{\Gamma_C}\geq 0,\quad
+\forall v\in W, v \ge 0\text{ on }\Gamma_C \}$$
+of Lagrange multipliers, where $\langle\cdot,\cdot\rangle$
+denotes the duality pairing between $W'$ and $W$. Intuitively, $K$ is the cone
+of all "non-positive functions", except that $ K\subset
+\left( \left[ H_0^{\frac{1}{2}} \right]^{dim} \right)' $ and so contains other
+objects besides regular functions as well. This yields:\\
+
+\noindent
+\textit{Find $u\in V$ and $\lambda\in K$ such that}
+\begin{align*}
+ \hat{a}(u,v) + b(v,\lambda) &= f(v),\quad &&v\in V\\
+ b(u,\mu - \lambda) &\leq \langle g,(\mu -
+ \lambda)n\rangle_{\Gamma_C},\quad&&\mu\in K,
+\end{align*}
+\textit{with}
+\begin{align*}
+ \hat{a}(u,v) &:= a'(u^i;u,v)\\
+ b(u,\mu) &:= \langle un,\mu n\rangle_{\Gamma_C},\quad &&u\in V,\quad\mu\in W'.
+\end{align*}
+As in the section before $u^i$ denotes the linearization point for the
+semi-linearform $a(.;.)$. In contrast to step-41 we directly consider $\lambda$
+as the additional, positive force $\sigma(u)n$ that the obstacle
+exerts on the boundary $\Gamma_C$ of the body.\\
+
+\noindent
+The existence and uniqueness of $(u,\lambda)\in V\times K$ of this saddle point
+problem has been stated in Glowinski, Lions and Tr\'{e}moli\`{e}res: Numerical
+Analysis of Variational Inequalities, North-Holland, 1981.\\
+
+\noindent
+NOTE: In this example as well as in the further documentation we make the
+assumption that the normal vector $n$ equals to $(0,0,1)$. This comes up with
+the starting condition of our deformable body.
\section{Active Set methods to solve the saddle point problem}
-\section{The primal-dual active set algorithm combined with the inexact semi smooth newton method}
+The linearized problem is essentially like a pure elastic problem with contact like
+in step-41. The only difference consists in the fact that the contact area
+adjudges at the boundary instead of in the domain. But this has no further consequence
+so that we refer to the documentation of step-41 with the only hint that
+$\mathcal{S}$ containts all the vertices at the contact boundary $\Gamma_C$ this
+time.
+
+\section{The primal-dual active set algorithm combined with the inexact semi smooth
+newton method}
-The inexact newton method works as follows:
+Now we describe an algorithm that combines the newton-method, which we use for
+the nonlinear constitutive law, with the semismooth newton method for the contact. It
+works as follows:
\begin{itemize}
\item[(0)] Initialize $\mathcal{A}_k$ and $\mathcal{F}_k$, such that $\mathcal{S} = \mathcal{A}_k \cup \mathcal{F}_k$ and $\mathcal{A}_k \cap \mathcal{F}_k = \emptyset$ and set $k = 1$.
\item[(1)] Assembel the newton matrix $a'(U^k;\varphi_i,\varphi_j)$ and the right-hand-side $F(U^k)$.
\end{align*}
% Note that $\mathcal{S}$ contains only dofs related to the boundary $\Gamma_C$. So in contrast to step-41 there are much more than $\vert \mathcal{S}\vert$ equations necessary to determine $U$ and $\Lambda$.
\item[(3)] Define the new active and inactive sets by
- $$\mathcal{A}_{k+1}:=\lbrace i\in\mathcal{S}:\Lambda^k_i + c\left(\left[BU^k\right]_i - G_i\left) < 0\rbrace,$$
- $$\mathcal{F}_{k+1}:=\lbrace i\in\mathcal{S}:\Lambda^k_i + c\left(\left[BU^k\right]_i - G_i\left) \geq 0\rbrace.$$
- \item[(4)] If $\mathcal{A}_{k+1} = \mathcal{A}_k$ and $\vert F(U^{k+1}\vert < \delta$ then stop, else set $k=k+1$ and go to step (1).
+ $$\mathcal{A}_{k+1}:=\lbrace i\in\mathcal{S}:\Lambda^k_i +
+ c\left(\left[BU^k\right]_i - G_i\right) > 0\rbrace,$$
+ $$\mathcal{F}_{k+1}:=\lbrace i\in\mathcal{S}:\Lambda^k_i +
+ c\left(\left[BU^k\right]_i - G_i\right) \leq 0\rbrace.$$
+ \item[(4)] If $\mathcal{A}_{k+1} = \mathcal{A}_k$ and $\vert
+ F\left(U^{k+1}\right) \vert < \delta$ then stop, else set $k=k+1$ and go to
+ step (1).
\end{itemize}
\section{Implementation}
-\end{document}
\ No newline at end of file
+\end{document}
// @sect3{Include files}
- // The first few (many?) include
- // files have already been used in
- // the previous example, so we will
- // not explain their meaning here
- // again.
+ // We are using the the same
+ // include files as in step-42:
#include <deal.II/grid/tria.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/distributed/grid_refinement.h>
#include <deal.II/numerics/data_out.h>
+#include <deal.II/numerics/error_estimator.h>
#include <deal.II/base/timer.h>
#include <fstream>
#include <iostream>
#include <list>
#include <time.h>
- // This is new, however: in the previous
- // example we got some unwanted output from
- // the linear solvers. If we want to suppress
- // it, we have to include this file and add a
- // single line somewhere to the program (see
- // the main() function below for that):
-#include <deal.II/base/logstream.h>
-
- // The final step, as in previous
- // programs, is to import all the
- // deal.II class and function names
- // into the global namespace:
-using namespace dealii;
- // @sect3{The <code>Step4</code> class template}
-
-template <int dim> class ConstitutiveLaw;
+#include <deal.II/base/logstream.h>
-template <int dim>
-class Step4
+namespace Step42
{
-public:
- Step4 (int _n_refinements_global, int _n_refinements_local);
- void run ();
-
-private:
- void make_grid ();
- void setup_system();
- void assemble_mass_matrix ();
- void assemble_nl_system (TrilinosWrappers::MPI::Vector &u);
- void residual_nl_system (TrilinosWrappers::MPI::Vector &u,
- Vector<double> &sigma_eff_vector);
- void projection_active_set ();
- void dirichlet_constraints ();
- void solve ();
- void solve_newton ();
- void output_results (const std::string& title) const;
- void move_mesh (const TrilinosWrappers::MPI::Vector &_complete_displacement) const;
- void output_results (TrilinosWrappers::MPI::Vector vector, const std::string& title) const;
- void output_results (Vector<double> vector, const std::string& title) const;
-
- MPI_Comm mpi_communicator;
-
- parallel::distributed::Triangulation<dim> triangulation;
-
- FESystem<dim> fe;
- DoFHandler<dim> dof_handler;
-
- IndexSet locally_owned_dofs;
- IndexSet locally_relevant_dofs;
-
- int n_refinements_global;
- int n_refinements_local;
- unsigned int number_iterations;
- std::vector<double> run_time;
-
- ConstraintMatrix constraints;
- ConstraintMatrix constraints_hanging_nodes;
- ConstraintMatrix constraints_dirichlet_hanging_nodes;
-
- TrilinosWrappers::SparseMatrix system_matrix_newton;
- TrilinosWrappers::SparseMatrix mass_matrix;
-
- TrilinosWrappers::MPI::Vector solution;
- TrilinosWrappers::MPI::Vector old_solution;
- TrilinosWrappers::MPI::Vector system_rhs_newton;
- TrilinosWrappers::MPI::Vector resid_vector;
- TrilinosWrappers::MPI::Vector diag_mass_matrix_vector;
- IndexSet active_set;
-
- ConditionalOStream pcout;
-
- TrilinosWrappers::PreconditionAMG::AdditionalData additional_data;
- TrilinosWrappers::PreconditionAMG preconditioner_u;
- TrilinosWrappers::PreconditionAMG preconditioner_t;
-
- std::auto_ptr<ConstitutiveLaw<dim> > plast_lin_hard;
-
- double sigma_0; // Yield stress
- double gamma; // Parameter for the linear isotropic hardening
- double e_modul; // E-Modul
- double nu; // Poisson ratio
-
- std_cxx1x::shared_ptr<TrilinosWrappers::PreconditionAMG> Mp_preconditioner;
-};
-
-template <int dim>
-class ConstitutiveLaw
-{
-public:
- ConstitutiveLaw (double _E, double _nu, double _sigma_0, double _gamma, MPI_Comm _mpi_communicator, ConditionalOStream _pcout);
- // ConstitutiveLaw (double mu, double kappa);
- void plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor,
- SymmetricTensor<2,dim> &strain_tensor,
- unsigned int &elast_points,
- unsigned int &plast_points,
- double &sigma_eff,
- double &yield);
- void linearized_plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor_linearized,
- SymmetricTensor<4,dim> &stress_strain_tensor,
- SymmetricTensor<2,dim> &strain_tensor);
- inline SymmetricTensor<2,dim> get_strain (const FEValues<dim> &fe_values,
- const unsigned int shape_func,
- const unsigned int q_point) const;
-
-private:
- SymmetricTensor<4,dim> stress_strain_tensor_mu;
- SymmetricTensor<4,dim> stress_strain_tensor_kappa;
- double E;
- double nu;
- double sigma_0;
- double gamma;
- double mu;
- double kappa;
- MPI_Comm mpi_communicator;
- ConditionalOStream pcout;
-};
-
-template <int dim>
-ConstitutiveLaw<dim>::ConstitutiveLaw(double _E, double _nu, double _sigma_0, double _gamma, MPI_Comm _mpi_communicator, ConditionalOStream _pcout)
- :E (_E),
- nu (_nu),
- sigma_0 (_sigma_0),
- gamma (_gamma),
- mpi_communicator (_mpi_communicator),
- pcout (_pcout)
-{
- mu = E/(2*(1+nu));
- kappa = E/(3*(1-2*nu));
- pcout<< "-----> mu = " << mu << ", kappa = " << kappa <<std::endl;
- stress_strain_tensor_kappa = kappa*outer_product(unit_symmetric_tensor<dim>(), unit_symmetric_tensor<dim>());
- stress_strain_tensor_mu = 2*mu*(identity_tensor<dim>() - outer_product(unit_symmetric_tensor<dim>(), unit_symmetric_tensor<dim>())/3.0);
-}
+ using namespace dealii;
+
+ // @sect3{The <code>PlasticityContactProblem</code> class template}
+
+ // This class provides an interface
+ // for a constitutive law. In this
+ // example we are using an elastic
+ // plastic material with linear,
+ // isotropic hardening.
+
+ template <int dim> class ConstitutiveLaw;
+
+ // @sect3{The <code>PlasticityContactProblem</code> class template}
+
+ // This class supplies all function
+ // and variables needed to describe
+ // the nonlinear contact problem. It is
+ // close to step-41 but with some additional
+ // features like: handling hanging nodes,
+ // a newton method, using Trilinos and p4est
+ // for parallel distributed computing.
+ // To deal with hanging nodes makes
+ // life a bit more complicated since
+ // we need an other ConstraintMatrix now.
+ // We create a newton method for the
+ // active set method for the contact
+ // situation and to handle the nonlinear
+ // operator for the constitutive law.
-template <int dim>
-inline
-SymmetricTensor<2,dim> ConstitutiveLaw<dim>::get_strain (const FEValues<dim> &fe_values,
- const unsigned int shape_func,
- const unsigned int q_point) const
-{
- const FEValuesExtractors::Vector displacement (0);
- SymmetricTensor<2,dim> tmp;
+ template <int dim>
+ class PlasticityContactProblem
+ {
+ public:
+ PlasticityContactProblem (int _n_refinements_global, int _n_refinements_local);
+ void run ();
- tmp = fe_values[displacement].symmetric_gradient (shape_func,q_point);
+ private:
+ void make_grid ();
+ void setup_system();
+ void assemble_nl_system (TrilinosWrappers::MPI::Vector &u);
+ void residual_nl_system (TrilinosWrappers::MPI::Vector &u);
+ void assemble_mass_matrix_diagonal (TrilinosWrappers::SparseMatrix &mass_matrix);
+ void update_solution_and_constraints ();
+ void dirichlet_constraints ();
+ void solve ();
+ void solve_newton ();
+ void refine_grid ();
+ void move_mesh (const TrilinosWrappers::MPI::Vector &_complete_displacement) const;
+ void output_results (const std::string& title) const;
- return tmp;
-}
+ int n_refinements_global;
+ int n_refinements_local;
-template <int dim>
-void ConstitutiveLaw<dim>::plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor,
- SymmetricTensor<2,dim> &strain_tensor,
- unsigned int &elast_points,
- unsigned int &plast_points,
- double &sigma_eff,
- double &yield)
-{
- if (dim == 3)
- {
- SymmetricTensor<2,dim> stress_tensor;
- stress_tensor = (stress_strain_tensor_kappa + stress_strain_tensor_mu)*strain_tensor;
- double tmp = E/((1+nu)*(1-2*nu));
+ MPI_Comm mpi_communicator;
- SymmetricTensor<2,dim> deviator_stress_tensor = deviator(stress_tensor);
+ parallel::distributed::Triangulation<dim> triangulation;
- double deviator_stress_tensor_norm = deviator_stress_tensor.norm ();
+ FESystem<dim> fe;
+ DoFHandler<dim> dof_handler;
- yield = 0;
- stress_strain_tensor = stress_strain_tensor_mu;
- double beta = 1.0;
- if (deviator_stress_tensor_norm >= sigma_0)
- {
- beta = (sigma_0 + gamma)/deviator_stress_tensor_norm;
- stress_strain_tensor *= beta;
- yield = 1;
- plast_points += 1;
- }
- else
- elast_points += 1;
+ IndexSet locally_owned_dofs;
+ IndexSet locally_relevant_dofs;
-// std::cout<< beta <<std::endl;
- stress_strain_tensor += stress_strain_tensor_kappa;
+ unsigned int number_iterations;
+ std::vector<double> run_time;
- sigma_eff = beta * deviator_stress_tensor_norm;
- }
-}
+ ConstraintMatrix constraints;
+ ConstraintMatrix constraints_hanging_nodes;
+ ConstraintMatrix constraints_dirichlet_hanging_nodes;
-template <int dim>
-void ConstitutiveLaw<dim>::linearized_plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor_linearized,
- SymmetricTensor<4,dim> &stress_strain_tensor,
- SymmetricTensor<2,dim> &strain_tensor)
-{
- if (dim == 3)
- {
- SymmetricTensor<2,dim> stress_tensor;
- stress_tensor = (stress_strain_tensor_kappa + stress_strain_tensor_mu)*strain_tensor;
- double tmp = E/((1+nu)*(1-2*nu));
+ TrilinosWrappers::SparseMatrix system_matrix_newton;
- stress_strain_tensor = stress_strain_tensor_mu;
- stress_strain_tensor_linearized = stress_strain_tensor_mu;
+ TrilinosWrappers::MPI::Vector solution;
+ TrilinosWrappers::MPI::Vector old_solution;
+ TrilinosWrappers::MPI::Vector system_rhs_newton;
+ TrilinosWrappers::MPI::Vector resid_vector;
+ TrilinosWrappers::MPI::Vector diag_mass_matrix_vector;
+ IndexSet active_set;
- SymmetricTensor<2,dim> deviator_stress_tensor = deviator(stress_tensor);
+ ConditionalOStream pcout;
- double deviator_stress_tensor_norm = deviator_stress_tensor.norm ();
+ TrilinosWrappers::PreconditionAMG::AdditionalData additional_data;
+ TrilinosWrappers::PreconditionAMG preconditioner_u;
+ TrilinosWrappers::PreconditionAMG preconditioner_t;
- double beta = 1.0;
- if (deviator_stress_tensor_norm >= sigma_0)
- {
- beta = (sigma_0 + gamma)/deviator_stress_tensor_norm;
- stress_strain_tensor *= beta;
- stress_strain_tensor_linearized *= beta;
- deviator_stress_tensor /= deviator_stress_tensor_norm;
- stress_strain_tensor_linearized -= beta*2*mu*outer_product(deviator_stress_tensor, deviator_stress_tensor);
- }
+ std::auto_ptr<ConstitutiveLaw<dim> > plast_lin_hard;
- stress_strain_tensor += stress_strain_tensor_kappa;
- stress_strain_tensor_linearized += stress_strain_tensor_kappa;
- }
-}
+ double sigma_0; // Yield stress
+ double gamma; // Parameter for the linear isotropic hardening
+ double e_modul; // E-Modul
+ double nu; // Poisson ratio
+ };
-namespace EquationData
-{
template <int dim>
- class RightHandSide : public Function<dim>
+ class ConstitutiveLaw
{
public:
- RightHandSide () : Function<dim>(dim) {}
-
- virtual double value (const Point<dim> &p,
- const unsigned int component = 0) const;
-
- virtual void vector_value (const Point<dim> &p,
- Vector<double> &values) const;
+ ConstitutiveLaw (double _E,
+ double _nu,
+ double _sigma_0,
+ double _gamma,
+ MPI_Comm _mpi_communicator,
+ ConditionalOStream _pcout);
+
+ void plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor,
+ SymmetricTensor<2,dim> &strain_tensor,
+ unsigned int &elast_points,
+ unsigned int &plast_points,
+ double &yield);
+ void linearized_plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor_linearized,
+ SymmetricTensor<4,dim> &stress_strain_tensor,
+ SymmetricTensor<2,dim> &strain_tensor);
+ inline SymmetricTensor<2,dim> get_strain (const FEValues<dim> &fe_values,
+ const unsigned int shape_func,
+ const unsigned int q_point) const;
+
+ private:
+ SymmetricTensor<4,dim> stress_strain_tensor_mu;
+ SymmetricTensor<4,dim> stress_strain_tensor_kappa;
+ double E;
+ double nu;
+ double sigma_0;
+ double gamma;
+ double mu;
+ double kappa;
+ MPI_Comm mpi_communicator;
+ ConditionalOStream pcout;
};
template <int dim>
- double RightHandSide<dim>::value (const Point<dim> &p,
- const unsigned int component) const
+ ConstitutiveLaw<dim>::ConstitutiveLaw(double _E, double _nu, double _sigma_0, double _gamma, MPI_Comm _mpi_communicator, ConditionalOStream _pcout)
+ :E (_E),
+ nu (_nu),
+ sigma_0 (_sigma_0),
+ gamma (_gamma),
+ mpi_communicator (_mpi_communicator),
+ pcout (_pcout)
{
- double return_value = 0.0;
-
- if (component == 0)
- return_value = 0.0;
- if (component == 1)
- return_value = 0.0;
- if (component == 2)
- // if ((p(0)-0.5)*(p(0)-0.5)+(p(1)-0.5)*(p(1)-0.5) < 0.2)
- // return_value = -5000;
- // else
- return_value = 0.0;
- // for (unsigned int i=0; i<dim; ++i)
- // return_value += 4*std::pow(p(i), 4);
-
- return return_value;
+ mu = E/(2*(1+nu));
+ kappa = E/(3*(1-2*nu));
+ pcout<< "-----> mu = " << mu << ", kappa = " << kappa <<std::endl;
+ stress_strain_tensor_kappa = kappa*outer_product(unit_symmetric_tensor<dim>(), unit_symmetric_tensor<dim>());
+ stress_strain_tensor_mu = 2*mu*(identity_tensor<dim>() - outer_product(unit_symmetric_tensor<dim>(), unit_symmetric_tensor<dim>())/3.0);
}
template <int dim>
- void RightHandSide<dim>::vector_value (const Point<dim> &p,
- Vector<double> &values) const
+ inline
+ SymmetricTensor<2,dim> ConstitutiveLaw<dim>::get_strain (const FEValues<dim> &fe_values,
+ const unsigned int shape_func,
+ const unsigned int q_point) const
{
- for (unsigned int c=0; c<this->n_components; ++c)
- values(c) = RightHandSide<dim>::value (p, c);
- }
+ const FEValuesExtractors::Vector displacement (0);
+ SymmetricTensor<2,dim> tmp;
+ tmp = fe_values[displacement].symmetric_gradient (shape_func,q_point);
+
+ return tmp;
+ }
template <int dim>
- class BoundaryValues : public Function<dim>
+ void ConstitutiveLaw<dim>::plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor,
+ SymmetricTensor<2,dim> &strain_tensor,
+ unsigned int &elast_points,
+ unsigned int &plast_points,
+ double &yield)
{
- public:
- BoundaryValues () : Function<dim>(dim) {};
-
- virtual double value (const Point<dim> &p,
- const unsigned int component = 0) const;
+ if (dim == 3)
+ {
+ SymmetricTensor<2,dim> stress_tensor;
+ stress_tensor = (stress_strain_tensor_kappa + stress_strain_tensor_mu)*strain_tensor;
+ double tmp = E/((1+nu)*(1-2*nu));
- virtual void vector_value (const Point<dim> &p,
- Vector<double> &values) const;
- };
+ SymmetricTensor<2,dim> deviator_stress_tensor = deviator(stress_tensor);
- template <int dim>
- double BoundaryValues<dim>::value (const Point<dim> &p,
- const unsigned int component) const
- {
- double return_value = 0;
+ double deviator_stress_tensor_norm = deviator_stress_tensor.norm ();
- if (component == 0)
- return_value = 0.0;
- if (component == 1)
- return_value = 0.0;
- if (component == 2)
- return_value = 0.0;
+ yield = 0;
+ stress_strain_tensor = stress_strain_tensor_mu;
+ double beta = 1.0;
+ if (deviator_stress_tensor_norm >= sigma_0)
+ {
+ beta = (sigma_0 + gamma)/deviator_stress_tensor_norm;
+ stress_strain_tensor *= beta;
+ yield = 1;
+ plast_points += 1;
+ }
+ else
+ elast_points += 1;
- return return_value;
+ stress_strain_tensor += stress_strain_tensor_kappa;
+ }
}
template <int dim>
- void BoundaryValues<dim>::vector_value (const Point<dim> &p,
- Vector<double> &values) const
+ void ConstitutiveLaw<dim>::linearized_plast_linear_hardening (SymmetricTensor<4,dim> &stress_strain_tensor_linearized,
+ SymmetricTensor<4,dim> &stress_strain_tensor,
+ SymmetricTensor<2,dim> &strain_tensor)
{
- for (unsigned int c=0; c<this->n_components; ++c)
- values(c) = BoundaryValues<dim>::value (p, c);
- }
-
+ if (dim == 3)
+ {
+ SymmetricTensor<2,dim> stress_tensor;
+ stress_tensor = (stress_strain_tensor_kappa + stress_strain_tensor_mu)*strain_tensor;
+ double tmp = E/((1+nu)*(1-2*nu));
- template <int dim>
- class Obstacle : public Function<dim>
- {
- public:
- Obstacle () : Function<dim>(dim) {};
+ stress_strain_tensor = stress_strain_tensor_mu;
+ stress_strain_tensor_linearized = stress_strain_tensor_mu;
- virtual double value (const Point<dim> &p,
- const unsigned int component = 0) const;
+ SymmetricTensor<2,dim> deviator_stress_tensor = deviator(stress_tensor);
- virtual void vector_value (const Point<dim> &p,
- Vector<double> &values) const;
- };
+ double deviator_stress_tensor_norm = deviator_stress_tensor.norm ();
- template <int dim>
- double Obstacle<dim>::value (const Point<dim> &p,
- const unsigned int component) const
- {
- double R = 0.03;
- double return_value = 0.0;
- if (component == 0)
- return_value = p(0);
- if (component == 1)
- return_value = p(1);
- if (component == 2)
+ double beta = 1.0;
+ if (deviator_stress_tensor_norm >= sigma_0)
{
- // double hz = 0.98;
- // double position_x = 0.5;
- // double alpha = 12.0;
- // double s_x = 0.5039649116;
- // double s_y = hz + 0.00026316298;
- // if (p(0) > position_x - R && p(0) < s_x)
- // {
- // return_value = -sqrt(R*R - (p(0)-position_x)*(p(0)-position_x)) + hz + R;
- // }
- // else if (p(0) >= s_x)
- // {
- // return_value = 12.0/90.0*p(0) + (s_y - alpha/90.0*s_x);
- // }
- // else
- // return_value = 1e+10;
-
- // Hindernis Dortmund
- double x1 = p(0);
- double x2 = p(1);
- if (((x2-0.5)*(x2-0.5)+(x1-0.5)*(x1-0.5)<=0.3*0.3)&&((x2-0.5)*(x2-0.5)+(x1-1.0)*(x1-1.0)>=0.4*0.4)&&((x2-0.5)*(x2-0.5)+x1*x1>=0.4*0.4))
- return_value = 0.999;
- else
- return_value = 1e+10;
-
- // Hindernis Werkzeug TKSE
- // double shift_walze_x = 0.0;
- // double shift_walze_y = 0.0;
- // return_value = 0.032 + data->dicke - input_copy->mikro_height (p(0) + shift_walze_x, p(1) + shift_walze_y, p(2));
-
- // Ball with radius R
- // double R = 0.5;
- // if (std::pow ((p(0)-1.0/2.0), 2) + std::pow ((p(1)-1.0/2.0), 2) < R*R)
- // return_value = 1.0 + R - 0.001 - sqrt (R*R - std::pow ((p(0)-1.0/2.0), 2)
- // - std::pow ((p(1)-1.0/2.0), 2));
- // else
- // return_value = 1e+5;
+ beta = (sigma_0 + gamma)/deviator_stress_tensor_norm;
+ stress_strain_tensor *= beta;
+ stress_strain_tensor_linearized *= beta;
+ deviator_stress_tensor /= deviator_stress_tensor_norm;
+ stress_strain_tensor_linearized -= beta*2*mu*outer_product(deviator_stress_tensor, deviator_stress_tensor);
}
- return return_value;
- // return 1e+10;//0.98;
+ stress_strain_tensor += stress_strain_tensor_kappa;
+ stress_strain_tensor_linearized += stress_strain_tensor_kappa;
+ }
}
- template <int dim>
- void Obstacle<dim>::vector_value (const Point<dim> &p,
- Vector<double> &values) const
+ namespace EquationData
{
- for (unsigned int c=0; c<this->n_components; ++c)
- values(c) = Obstacle<dim>::value (p, c);
- }
-}
+ template <int dim>
+ class RightHandSide : public Function<dim>
+ {
+ public:
+ RightHandSide () : Function<dim>(dim) {}
+ virtual double value (const Point<dim> &p,
+ const unsigned int component = 0) const;
- // @sect3{Implementation of the <code>Step4</code> class}
-
- // Next for the implementation of the class
- // template that makes use of the functions
- // above. As before, we will write everything
-
-template <int dim>
-Step4<dim>::Step4 (int _n_refinements_global, int _n_refinements_local)
- :
- n_refinements_global (_n_refinements_global),
- n_refinements_local (_n_refinements_local),
- mpi_communicator (MPI_COMM_WORLD),
- triangulation (mpi_communicator),
- fe (FE_Q<dim>(1), dim),
- dof_handler (triangulation),
- pcout (std::cout,
- (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)),
- sigma_0 (400),
- gamma (1.e-2),
- e_modul (2.0e5),
- nu (0.3)
-{
- // double _E, double _nu, double _sigma_0, double _gamma
- plast_lin_hard.reset (new ConstitutiveLaw<dim> (e_modul, nu, sigma_0, gamma, mpi_communicator, pcout));
-}
+ virtual void vector_value (const Point<dim> &p,
+ Vector<double> &values) const;
+ };
-template <int dim>
-void Step4<dim>::make_grid ()
-{
- std::vector<unsigned int> repet(3);
- repet[0] = 1;//20;
- repet[1] = 1;
- repet[2] = 1;
-
- Point<dim> p1 (0,0,0);
- Point<dim> p2 (1.0, 1.0, 1.0);
- GridGenerator::subdivided_hyper_rectangle (triangulation, repet, p1, p2);
-
- Triangulation<3>::active_cell_iterator
- cell = triangulation.begin_active(),
- endc = triangulation.end();
-
- /* boundary_indicators:
- _______
- / 9 /|
- /______ / |
- 8| | 8|
- | 8 | /
- |_______|/
- 6
- */
-
- for (; cell!=endc; ++cell)
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- {
- if (cell->face (face)->center ()[2] == p2(2))
- cell->face (face)->set_boundary_indicator (9);
- if (cell->face (face)->center ()[0] == p1(0) ||
- cell->face (face)->center ()[0] == p2(0) ||
- cell->face (face)->center ()[1] == p1(1) ||
- cell->face (face)->center ()[1] == p2(1))
- cell->face (face)->set_boundary_indicator (8);
- if (cell->face (face)->center ()[2] == p1(2))
- cell->face (face)->set_boundary_indicator (6);
- }
+ template <int dim>
+ double RightHandSide<dim>::value (const Point<dim> &p,
+ const unsigned int component) const
+ {
+ double return_value = 0.0;
+
+ if (component == 0)
+ return_value = 0.0;
+ if (component == 1)
+ return_value = 0.0;
+ if (component == 2)
+ // if ((p(0)-0.5)*(p(0)-0.5)+(p(1)-0.5)*(p(1)-0.5) < 0.2)
+ // return_value = -5000;
+ // else
+ return_value = 0.0;
+ // for (unsigned int i=0; i<dim; ++i)
+ // return_value += 4*std::pow(p(i), 4);
+
+ return return_value;
+ }
+
+ template <int dim>
+ void RightHandSide<dim>::vector_value (const Point<dim> &p,
+ Vector<double> &values) const
+ {
+ for (unsigned int c=0; c<this->n_components; ++c)
+ values(c) = RightHandSide<dim>::value (p, c);
+ }
- triangulation.refine_global (n_refinements_global);
- // Lokale Verfeinerung des Gitters
- for (int step=0; step<n_refinements_local; ++step)
+ template <int dim>
+ class BoundaryValues : public Function<dim>
{
- cell = triangulation.begin_active(); // Iterator ueber alle Zellen
-
- for (; cell!=endc; ++cell)
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- {
-// if (cell->face (face)->at_boundary()
-// && cell->face (face)->boundary_indicator () == 9)
-// {
-// cell->set_refine_flag ();
-// break;
-// }
-// else if (cell->level () == n_refinements + n_refinements_local - 1)
-// {
-// cell->set_refine_flag ();
-// break;
-// }
-
-// if (cell->face (face)->at_boundary()
-// && cell->face (face)->boundary_indicator () == 9)
-// {
-// if (cell->face (face)->vertex (0)(0) <= 0.7 &&
-// cell->face (face)->vertex (1)(0) >= 0.3 &&
-// cell->face (face)->vertex (0)(1) <= 0.875 &&
-// cell->face (face)->vertex (2)(1) >= 0.125)
-// {
-// cell->set_refine_flag ();
-// break;
-// }
-// }
-
- if (step == 0 &&
- cell->center ()(2) < n_refinements_local*9.0/64.0)
- {
- cell->set_refine_flag ();
- break;
- }
- };
- triangulation.execute_coarsening_and_refinement ();
+ public:
+ BoundaryValues () : Function<dim>(dim) {};
+
+ virtual double value (const Point<dim> &p,
+ const unsigned int component = 0) const;
+
+ virtual void vector_value (const Point<dim> &p,
+ Vector<double> &values) const;
};
-}
-template <int dim>
-void Step4<dim>::setup_system ()
-{
- // setup dofs
- {
- dof_handler.distribute_dofs (fe);
+ template <int dim>
+ double BoundaryValues<dim>::value (const Point<dim> &p,
+ const unsigned int component) const
+ {
+ double return_value = 0;
+
+ if (component == 0)
+ return_value = 0.0;
+ if (component == 1)
+ return_value = 0.0;
+ if (component == 2)
+ return_value = 0.0;
+
+ return return_value;
+ }
- locally_owned_dofs = dof_handler.locally_owned_dofs ();
- locally_relevant_dofs.clear();
- DoFTools::extract_locally_relevant_dofs (dof_handler,
- locally_relevant_dofs);
+ template <int dim>
+ void BoundaryValues<dim>::vector_value (const Point<dim> &p,
+ Vector<double> &values) const
+ {
+ for (unsigned int c=0; c<this->n_components; ++c)
+ values(c) = BoundaryValues<dim>::value (p, c);
+ }
+
+
+ template <int dim>
+ class Obstacle : public Function<dim>
+ {
+ public:
+ Obstacle () : Function<dim>(dim) {};
+
+ virtual double value (const Point<dim> &p,
+ const unsigned int component = 0) const;
+
+ virtual void vector_value (const Point<dim> &p,
+ Vector<double> &values) const;
+ };
+
+ template <int dim>
+ double Obstacle<dim>::value (const Point<dim> &p,
+ const unsigned int component) const
+ {
+ double R = 0.03;
+ double return_value = 0.0;
+ if (component == 0)
+ return_value = p(0);
+ if (component == 1)
+ return_value = p(1);
+ if (component == 2)
+ {
+ // double hz = 0.98;
+ // double position_x = 0.5;
+ // double alpha = 12.0;
+ // double s_x = 0.5039649116;
+ // double s_y = hz + 0.00026316298;
+ // if (p(0) > position_x - R && p(0) < s_x)
+ // {
+ // return_value = -sqrt(R*R - (p(0)-position_x)*(p(0)-position_x)) + hz + R;
+ // }
+ // else if (p(0) >= s_x)
+ // {
+ // return_value = 12.0/90.0*p(0) + (s_y - alpha/90.0*s_x);
+ // }
+ // else
+ // return_value = 1e+10;
+
+ // Hindernis Dortmund
+ double x1 = p(0);
+ double x2 = p(1);
+ if (((x2-0.5)*(x2-0.5)+(x1-0.5)*(x1-0.5)<=0.3*0.3)&&((x2-0.5)*(x2-0.5)+(x1-1.0)*(x1-1.0)>=0.4*0.4)&&((x2-0.5)*(x2-0.5)+x1*x1>=0.4*0.4))
+ return_value = 0.999;
+ else
+ return_value = 1e+10;
+
+ // Hindernis Werkzeug TKSE
+ // double shift_walze_x = 0.0;
+ // double shift_walze_y = 0.0;
+ // return_value = 0.032 + data->dicke - input_copy->mikro_height (p(0) + shift_walze_x, p(1) + shift_walze_y, p(2));
+
+ // Ball with radius R
+ // double R = 0.5;
+ // if (std::pow ((p(0)-1.0/2.0), 2) + std::pow ((p(1)-1.0/2.0), 2) < R*R)
+ // return_value = 1.0 + R - 0.001 - sqrt (R*R - std::pow ((p(0)-1.0/2.0), 2)
+ // - std::pow ((p(1)-1.0/2.0), 2));
+ // else
+ // return_value = 1e+5;
+ }
+ return return_value;
+ }
+
+ template <int dim>
+ void Obstacle<dim>::vector_value (const Point<dim> &p,
+ Vector<double> &values) const
+ {
+ for (unsigned int c=0; c<this->n_components; ++c)
+ values(c) = Obstacle<dim>::value (p, c);
+ }
}
- // setup hanging nodes and dirichlet constraints
+
+ // @sect3{Implementation of the <code>PlasticityContactProblem</code> class}
+
+ // Next for the implementation of the class
+ // template that makes use of the functions
+ // above. As before, we will write everything
+
+ template <int dim>
+ PlasticityContactProblem<dim>::PlasticityContactProblem (int _n_refinements_global, int _n_refinements_local)
+ :
+ n_refinements_global (_n_refinements_global),
+ n_refinements_local (_n_refinements_local),
+ mpi_communicator (MPI_COMM_WORLD),
+ triangulation (mpi_communicator),
+ fe (FE_Q<dim>(1), dim),
+ dof_handler (triangulation),
+ pcout (std::cout,
+ (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)),
+ sigma_0 (400),
+ gamma (1.e-2),
+ e_modul (2.0e5),
+ nu (0.3)
{
- // constraints_hanging_nodes.clear ();
- constraints_hanging_nodes.reinit (locally_relevant_dofs);
- DoFTools::make_hanging_node_constraints (dof_handler,
- constraints_hanging_nodes);
- constraints_hanging_nodes.close ();
-
- pcout << "Number of active cells: "
- << triangulation.n_active_cells()
- << std::endl
- << "Total number of cells: "
- << triangulation.n_cells()
- << std::endl
- << "Number of degrees of freedom: "
- << dof_handler.n_dofs ()
- << std::endl;
-
- dirichlet_constraints ();
+ // double _E, double _nu, double _sigma_0, double _gamma
+ plast_lin_hard.reset (new ConstitutiveLaw<dim> (e_modul, nu, sigma_0, gamma, mpi_communicator, pcout));
}
- // Initialzation for matrices and vectors
+ template <int dim>
+ void PlasticityContactProblem<dim>::make_grid ()
{
- solution.reinit (locally_relevant_dofs, mpi_communicator);
- system_rhs_newton.reinit (locally_owned_dofs, mpi_communicator);
- old_solution.reinit (system_rhs_newton);
- resid_vector.reinit (system_rhs_newton);
- diag_mass_matrix_vector.reinit (system_rhs_newton);
- active_set.set_size (locally_relevant_dofs.size ());
+ std::vector<unsigned int> repet(3);
+ repet[0] = 1;//20;
+ repet[1] = 1;
+ repet[2] = 1;
+
+ Point<dim> p1 (0,0,0);
+ Point<dim> p2 (1.0, 1.0, 1.0);
+ GridGenerator::subdivided_hyper_rectangle (triangulation, repet, p1, p2);
+
+ Triangulation<3>::active_cell_iterator
+ cell = triangulation.begin_active(),
+ endc = triangulation.end();
+
+ /* boundary_indicators:
+ _______
+ / 9 /|
+ /______ / |
+ 8| | 8|
+ | 8 | /
+ |_______|/
+ 6
+ */
+
+ for (; cell!=endc; ++cell)
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ {
+ if (cell->face (face)->center ()[2] == p2(2))
+ cell->face (face)->set_boundary_indicator (9);
+ if (cell->face (face)->center ()[0] == p1(0) ||
+ cell->face (face)->center ()[0] == p2(0) ||
+ cell->face (face)->center ()[1] == p1(1) ||
+ cell->face (face)->center ()[1] == p2(1))
+ cell->face (face)->set_boundary_indicator (8);
+ if (cell->face (face)->center ()[2] == p1(2))
+ cell->face (face)->set_boundary_indicator (6);
+ }
+
+ triangulation.refine_global (n_refinements_global);
+
+ // Lokale Verfeinerung des Gitters
+// for (int step=0; step<n_refinements_local; ++step)
+// {
+// cell = triangulation.begin_active(); // Iterator ueber alle Zellen
+//
+// for (; cell!=endc; ++cell)
+// for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+// {
+// // if (cell->face (face)->at_boundary()
+// // && cell->face (face)->boundary_indicator () == 9)
+// // {
+// // cell->set_refine_flag ();
+// // break;
+// // }
+// // else if (cell->level () == n_refinements + n_refinements_local - 1)
+// // {
+// // cell->set_refine_flag ();
+// // break;
+// // }
+//
+// // if (cell->face (face)->at_boundary()
+// // && cell->face (face)->boundary_indicator () == 9)
+// // {
+// // if (cell->face (face)->vertex (0)(0) <= 0.7 &&
+// // cell->face (face)->vertex (1)(0) >= 0.3 &&
+// // cell->face (face)->vertex (0)(1) <= 0.875 &&
+// // cell->face (face)->vertex (2)(1) >= 0.125)
+// // {
+// // cell->set_refine_flag ();
+// // break;
+// // }
+// // }
+//
+// if (step == 0 &&
+// cell->center ()(2) < n_refinements_local*9.0/64.0)
+// {
+// cell->set_refine_flag ();
+// break;
+// }
+// };
+// triangulation.execute_coarsening_and_refinement ();
+// };
}
- // setup sparsity pattern
+ template <int dim>
+ void PlasticityContactProblem<dim>::setup_system ()
{
- TrilinosWrappers::SparsityPattern sp (locally_owned_dofs,
- mpi_communicator);
+ // setup dofs
+ {
+ dof_handler.distribute_dofs (fe);
+
+ locally_owned_dofs = dof_handler.locally_owned_dofs ();
+ locally_relevant_dofs.clear();
+ DoFTools::extract_locally_relevant_dofs (dof_handler,
+ locally_relevant_dofs);
+ }
+
+ // setup hanging nodes and dirichlet constraints
+ {
+ constraints_hanging_nodes.clear ();
+ constraints_hanging_nodes.reinit (locally_relevant_dofs);
+ DoFTools::make_hanging_node_constraints (dof_handler,
+ constraints_hanging_nodes);
+ constraints_hanging_nodes.close ();
+
+ pcout << "Number of active cells: "
+ << triangulation.n_active_cells()
+ << std::endl
+ << "Total number of cells: "
+ << triangulation.n_cells()
+ << std::endl
+ << "Number of degrees of freedom: "
+ << dof_handler.n_dofs ()
+ << std::endl;
+
+ dirichlet_constraints ();
+ }
- DoFTools::make_sparsity_pattern (dof_handler, sp, constraints_dirichlet_hanging_nodes, false,
- Utilities::MPI::this_mpi_process(mpi_communicator));
+ // Initialzation for matrices and vectors
+ {
+ solution.reinit (locally_relevant_dofs, mpi_communicator);
+ system_rhs_newton.reinit (locally_owned_dofs, mpi_communicator);
+ old_solution.reinit (system_rhs_newton);
+ resid_vector.reinit (system_rhs_newton);
+ diag_mass_matrix_vector.reinit (system_rhs_newton);
+ active_set.clear ();
+ active_set.set_size (locally_relevant_dofs.size ());
+ }
- sp.compress();
+ // setup sparsity pattern
+ {
+ TrilinosWrappers::SparsityPattern sp (locally_owned_dofs,
+ mpi_communicator);
- system_matrix_newton.reinit (sp);
+ DoFTools::make_sparsity_pattern (dof_handler, sp, constraints_dirichlet_hanging_nodes, false,
+ Utilities::MPI::this_mpi_process(mpi_communicator));
- mass_matrix.reinit (sp);
- }
+ sp.compress();
- assemble_mass_matrix ();
- const unsigned int
- start = (system_rhs_newton.local_range().first),
- end = (system_rhs_newton.local_range().second);
- for (unsigned int j=start; j<end; j++)
- diag_mass_matrix_vector (j) = mass_matrix.diag_element (j);
- number_iterations = 0;
-
- diag_mass_matrix_vector.compress ();
-}
+ system_matrix_newton.reinit (sp);
-template <int dim>
-void Step4<dim>::assemble_mass_matrix ()
-{
- QTrapez<dim-1> face_quadrature_formula;
+ TrilinosWrappers::SparseMatrix mass_matrix;
+ mass_matrix.reinit (sp);
+ assemble_mass_matrix_diagonal (mass_matrix);
+ const unsigned int
+ start = (system_rhs_newton.local_range().first),
+ end = (system_rhs_newton.local_range().second);
+ for (unsigned int j=start; j<end; j++)
+ diag_mass_matrix_vector (j) = mass_matrix.diag_element (j);
+ number_iterations = 0;
- FEFaceValues<dim> fe_values_face (fe, face_quadrature_formula,
- update_values | update_quadrature_points | update_JxW_values);
+ diag_mass_matrix_vector.compress ();
+ }
+ }
- const unsigned int dofs_per_cell = fe.dofs_per_cell;
- const unsigned int dofs_per_face = fe.dofs_per_face;
- const unsigned int n_face_q_points = face_quadrature_formula.size();
+ template <int dim>
+ void PlasticityContactProblem<dim>::assemble_nl_system (TrilinosWrappers::MPI::Vector &u)
+ {
+ QGauss<dim> quadrature_formula(2);
+ QGauss<dim-1> face_quadrature_formula(2);
+
+ FEValues<dim> fe_values (fe, quadrature_formula,
+ UpdateFlags(update_values |
+ update_gradients |
+ update_q_points |
+ update_JxW_values));
+
+ FEFaceValues<dim> fe_values_face (fe, face_quadrature_formula,
+ update_values | 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 ();
+ const unsigned int n_face_q_points = face_quadrature_formula.size();
+
+ const EquationData::RightHandSide<dim> right_hand_side;
+ std::vector<Vector<double> > right_hand_side_values (n_q_points,
+ Vector<double>(dim));
+ std::vector<Vector<double> > right_hand_side_values_face (n_face_q_points,
+ Vector<double>(dim));
+
+ FullMatrix<double> cell_matrix (dofs_per_cell, dofs_per_cell);
+ Vector<double> cell_rhs (dofs_per_cell);
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+
+ typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+
+ const FEValuesExtractors::Vector displacement (0);
+
+ TrilinosWrappers::MPI::Vector test_rhs(solution);
+ const double kappa = 1.0;
+ for (; cell!=endc; ++cell)
+ if (cell->is_locally_owned())
+ {
+ fe_values.reinit (cell);
+ cell_matrix = 0;
+ cell_rhs = 0;
+
+ right_hand_side.vector_value_list (fe_values.get_quadrature_points(),
+ right_hand_side_values);
+
+ std::vector<SymmetricTensor<2,dim> > strain_tensor (n_q_points);
+ fe_values[displacement].get_function_symmetric_gradients (u, strain_tensor);
+
+ for (unsigned int q_point=0; q_point<n_q_points; ++q_point)
+ {
+ SymmetricTensor<4,dim> stress_strain_tensor_linearized;
+ SymmetricTensor<4,dim> stress_strain_tensor;
+ SymmetricTensor<2,dim> stress_tensor;
+
+ plast_lin_hard->linearized_plast_linear_hardening (stress_strain_tensor_linearized,
+ stress_strain_tensor,
+ strain_tensor[q_point]);
+
+ // if (q_point == 0)
+ // std::cout<< stress_strain_tensor_linearized <<std::endl;
+ // std::cout<< stress_strain_tensor <<std::endl;
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ {
+ stress_tensor = stress_strain_tensor_linearized * plast_lin_hard->get_strain(fe_values, i, q_point);
+
+ for (unsigned int j=0; j<dofs_per_cell; ++j)
+ {
+ cell_matrix(i,j) += (stress_tensor *
+ plast_lin_hard->get_strain(fe_values, j, q_point) *
+ fe_values.JxW (q_point));
+ }
+
+ // the linearized part a(v^i;v^i,v) of the rhs
+ cell_rhs(i) += (stress_tensor *
+ strain_tensor[q_point] *
+ fe_values.JxW (q_point));
+
+ // the residual part a(v^i;v) of the rhs
+ cell_rhs(i) -= (strain_tensor[q_point] * stress_strain_tensor *
+ plast_lin_hard->get_strain(fe_values, i, q_point) *
+ fe_values.JxW (q_point));
+
+ // the residual part F(v) of the rhs
+ Tensor<1,dim> rhs_values;
+ rhs_values = 0;
+ cell_rhs(i) += (fe_values[displacement].value (i, q_point) *
+ rhs_values *
+ fe_values.JxW (q_point));
+ }
+ }
+
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ {
+ if (cell->face (face)->at_boundary()
+ && cell->face (face)->boundary_indicator () == 9)
+ {
+ fe_values_face.reinit (cell, face);
+
+ right_hand_side.vector_value_list (fe_values_face.get_quadrature_points(),
+ right_hand_side_values_face);
+
+ for (unsigned int q_point=0; q_point<n_face_q_points; ++q_point)
+ {
+ Tensor<1,dim> rhs_values;
+ rhs_values = 0;
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_rhs(i) += (fe_values_face[displacement].value (i, q_point) *
+ rhs_values *
+ fe_values_face.JxW (q_point));
+ }
+ }
+ }
+
+ cell->get_dof_indices (local_dof_indices);
+ constraints.distribute_local_to_global (cell_matrix, cell_rhs,
+ local_dof_indices,
+ system_matrix_newton, system_rhs_newton, true);
+ };
- FullMatrix<double> cell_matrix (dofs_per_cell, dofs_per_cell);
+ system_matrix_newton.compress ();
+ system_rhs_newton.compress (Add);
+ }
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+ template <int dim>
+ void PlasticityContactProblem<dim>::residual_nl_system (TrilinosWrappers::MPI::Vector &u)
+ {
+ QGauss<dim> quadrature_formula(2);
+ QGauss<dim-1> face_quadrature_formula(2);
+
+ FEValues<dim> fe_values (fe, quadrature_formula,
+ UpdateFlags(update_values |
+ update_gradients |
+ update_q_points |
+ update_JxW_values));
+
+ FEFaceValues<dim> fe_values_face (fe, face_quadrature_formula,
+ update_values | 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 ();
+ const unsigned int n_face_q_points = face_quadrature_formula.size();
+
+ const EquationData::RightHandSide<dim> right_hand_side;
+ std::vector<Vector<double> > right_hand_side_values (n_q_points,
+ Vector<double>(dim));
+ std::vector<Vector<double> > right_hand_side_values_face (n_face_q_points,
+ Vector<double>(dim));
+
+ Vector<double> cell_rhs (dofs_per_cell);
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+
+ const FEValuesExtractors::Vector displacement (0);
+
+ typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+
+ unsigned int elast_points = 0;
+ unsigned int plast_points = 0;
+ double yield = 0;
+ unsigned int cell_number = 0;
+ for (; cell!=endc; ++cell)
+ if (cell->is_locally_owned())
+ {
+ fe_values.reinit (cell);
+ cell_rhs = 0;
+
+ right_hand_side.vector_value_list (fe_values.get_quadrature_points(),
+ right_hand_side_values);
+
+ std::vector<SymmetricTensor<2,dim> > strain_tensor (n_q_points);
+ fe_values[displacement].get_function_symmetric_gradients (u, strain_tensor);
+
+ for (unsigned int q_point=0; q_point<n_q_points; ++q_point)
+ {
+ SymmetricTensor<4,dim> stress_strain_tensor;
+ SymmetricTensor<2,dim> stress_tensor;
+
+ plast_lin_hard->plast_linear_hardening (stress_strain_tensor, strain_tensor[q_point],
+ elast_points, plast_points, yield);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ {
+ cell_rhs(i) -= (strain_tensor[q_point] * stress_strain_tensor * //(stress_tensor) *
+ plast_lin_hard->get_strain(fe_values, i, q_point) *
+ fe_values.JxW (q_point));
+
+ Tensor<1,dim> rhs_values;
+ rhs_values = 0;
+ cell_rhs(i) += ((fe_values[displacement].value (i, q_point) *
+ rhs_values) *
+ fe_values.JxW (q_point));
+ };
+ };
+
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ {
+ if (cell->face (face)->at_boundary()
+ && cell->face (face)->boundary_indicator () == 9)
+ {
+ fe_values_face.reinit (cell, face);
+
+ right_hand_side.vector_value_list (fe_values_face.get_quadrature_points(),
+ right_hand_side_values_face);
+
+ for (unsigned int q_point=0; q_point<n_face_q_points; ++q_point)
+ {
+ Tensor<1,dim> rhs_values;
+ rhs_values = 0;
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_rhs(i) += (fe_values_face[displacement].value (i, q_point) *
+ rhs_values *
+ fe_values_face.JxW (q_point));
+ }
+ }
+ }
+
+ cell->get_dof_indices (local_dof_indices);
+ constraints_dirichlet_hanging_nodes.distribute_local_to_global (cell_rhs,
+ local_dof_indices,
+ system_rhs_newton);
+
+ cell_number += 1;
+ };
- const FEValuesExtractors::Vector displacement (0);
+ system_rhs_newton.compress ();
- typename DoFHandler<dim>::active_cell_iterator
- cell = dof_handler.begin_active(),
- endc = dof_handler.end();
+ unsigned int sum_elast_points = Utilities::MPI::sum(elast_points, mpi_communicator);
+ unsigned int sum_plast_points = Utilities::MPI::sum(plast_points, mpi_communicator);
+ pcout<< "Elast-Points = " << sum_elast_points <<std::endl;
+ pcout<< "Plast-Points = " << sum_plast_points <<std::endl;
+ }
- for (; cell!=endc; ++cell)
- if (cell->is_locally_owned())
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->at_boundary()
- && cell->face (face)->boundary_indicator () == 9)
- {
- fe_values_face.reinit (cell, face);
- cell_matrix = 0;
-
- for (unsigned int q_point=0; q_point<n_face_q_points; ++q_point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_matrix(i,i) += (fe_values_face[displacement].value (i, q_point) *
- fe_values_face[displacement].value (i, q_point) *
- fe_values_face.JxW (q_point));
-
- cell->get_dof_indices (local_dof_indices);
-
- constraints_dirichlet_hanging_nodes.distribute_local_to_global (cell_matrix,
- local_dof_indices,
- mass_matrix);
- }
-
- mass_matrix.compress ();
-}
+ template <int dim>
+ void PlasticityContactProblem<dim>::assemble_mass_matrix_diagonal (TrilinosWrappers::SparseMatrix &mass_matrix)
+ {
+ QTrapez<dim-1> face_quadrature_formula;
-template <int dim>
-void Step4<dim>::assemble_nl_system (TrilinosWrappers::MPI::Vector &u)
-{
- QGauss<dim> quadrature_formula(2);
- QGauss<dim-1> face_quadrature_formula(2);
+ FEFaceValues<dim> fe_values_face (fe, face_quadrature_formula,
+ update_values |
+ update_quadrature_points |
+ update_JxW_values);
- FEValues<dim> fe_values (fe, quadrature_formula,
- UpdateFlags(update_values |
- update_gradients |
- update_q_points |
- update_JxW_values));
+ const unsigned int dofs_per_cell = fe.dofs_per_cell;
+ const unsigned int n_face_q_points = face_quadrature_formula.size();
- FEFaceValues<dim> fe_values_face (fe, face_quadrature_formula,
- update_values | update_quadrature_points |
- update_JxW_values);
+ FullMatrix<double> cell_matrix (dofs_per_cell, dofs_per_cell);
- const unsigned int dofs_per_cell = fe.dofs_per_cell;
- const unsigned int n_q_points = quadrature_formula.size ();
- const unsigned int n_face_q_points = face_quadrature_formula.size();
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
- const EquationData::RightHandSide<dim> right_hand_side;
- std::vector<Vector<double> > right_hand_side_values (n_q_points,
- Vector<double>(dim));
- std::vector<Vector<double> > right_hand_side_values_face (n_face_q_points,
- Vector<double>(dim));
+ const FEValuesExtractors::Vector displacement (0);
- FullMatrix<double> cell_matrix (dofs_per_cell, dofs_per_cell);
- Vector<double> cell_rhs (dofs_per_cell);
+ typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+ for (; cell!=endc; ++cell)
+ if (cell->is_locally_owned())
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->at_boundary()
+ && cell->face (face)->boundary_indicator () == 9)
+ {
+ fe_values_face.reinit (cell, face);
+ cell_matrix = 0;
- typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active(),
- endc = dof_handler.end();
+ for (unsigned int q_point=0; q_point<n_face_q_points; ++q_point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_matrix(i,i) += (fe_values_face[displacement].value (i, q_point) *
+ fe_values_face[displacement].value (i, q_point) *
+ fe_values_face.JxW (q_point));
- const FEValuesExtractors::Vector displacement (0);
+ cell->get_dof_indices (local_dof_indices);
- TrilinosWrappers::MPI::Vector test_rhs(solution);
- const double kappa = 1.0;
- for (; cell!=endc; ++cell)
- if (cell->is_locally_owned())
- {
- fe_values.reinit (cell);
- cell_matrix = 0;
- cell_rhs = 0;
-
- right_hand_side.vector_value_list (fe_values.get_quadrature_points(),
- right_hand_side_values);
-
- std::vector<SymmetricTensor<2,dim> > strain_tensor (n_q_points);
- fe_values[displacement].get_function_symmetric_gradients (u, strain_tensor);
-
- for (unsigned int q_point=0; q_point<n_q_points; ++q_point)
- {
- SymmetricTensor<4,dim> stress_strain_tensor_linearized;
- SymmetricTensor<4,dim> stress_strain_tensor;
- SymmetricTensor<2,dim> stress_tensor;
-
- plast_lin_hard->linearized_plast_linear_hardening (stress_strain_tensor_linearized,
- stress_strain_tensor,
- strain_tensor[q_point]);
-
- // if (q_point == 0)
- // std::cout<< stress_strain_tensor_linearized <<std::endl;
- // std::cout<< stress_strain_tensor <<std::endl;
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- {
- stress_tensor = stress_strain_tensor_linearized * plast_lin_hard->get_strain(fe_values, i, q_point);
-
- for (unsigned int j=0; j<dofs_per_cell; ++j)
- {
- cell_matrix(i,j) += (stress_tensor *
- plast_lin_hard->get_strain(fe_values, j, q_point) *
- fe_values.JxW (q_point));
- }
-
- // the linearized part a(v^i;v^i,v) of the rhs
- cell_rhs(i) += (stress_tensor *
- strain_tensor[q_point] *
- fe_values.JxW (q_point));
-
- // the residual part a(v^i;v) of the rhs
- cell_rhs(i) -= (strain_tensor[q_point] * stress_strain_tensor *
- plast_lin_hard->get_strain(fe_values, i, q_point) *
- fe_values.JxW (q_point));
-
- // the residual part F(v) of the rhs
- Tensor<1,dim> rhs_values;
- rhs_values = 0;
- cell_rhs(i) += (fe_values[displacement].value (i, q_point) *
- rhs_values *
- fe_values.JxW (q_point));
- }
- }
-
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- {
- if (cell->face (face)->at_boundary()
- && cell->face (face)->boundary_indicator () == 9)
- {
- fe_values_face.reinit (cell, face);
-
- right_hand_side.vector_value_list (fe_values_face.get_quadrature_points(),
- right_hand_side_values_face);
-
- for (unsigned int q_point=0; q_point<n_face_q_points; ++q_point)
- {
- Tensor<1,dim> rhs_values;
- rhs_values = 0;
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_rhs(i) += (fe_values_face[displacement].value (i, q_point) *
- rhs_values *
- fe_values_face.JxW (q_point));
- }
- }
- }
-
- cell->get_dof_indices (local_dof_indices);
- constraints.distribute_local_to_global (cell_matrix, cell_rhs,
- local_dof_indices,
- system_matrix_newton, system_rhs_newton, true);
- };
-
- system_matrix_newton.compress ();
- system_rhs_newton.compress (Add);
-}
+ constraints_dirichlet_hanging_nodes.distribute_local_to_global (cell_matrix,
+ local_dof_indices,
+ mass_matrix);
+ }
-template <int dim>
-void Step4<dim>::residual_nl_system (TrilinosWrappers::MPI::Vector &u,
- Vector<double> &sigma_eff_vector)
-{
- QGauss<dim> quadrature_formula(2);
- QGauss<dim-1> face_quadrature_formula(2);
-
- FEValues<dim> fe_values (fe, quadrature_formula,
- UpdateFlags(update_values |
- update_gradients |
- update_q_points |
- update_JxW_values));
-
- FEFaceValues<dim> fe_values_face (fe, face_quadrature_formula,
- update_values | 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 ();
- const unsigned int n_face_q_points = face_quadrature_formula.size();
-
- const EquationData::RightHandSide<dim> right_hand_side;
- std::vector<Vector<double> > right_hand_side_values (n_q_points,
- Vector<double>(dim));
- std::vector<Vector<double> > right_hand_side_values_face (n_face_q_points,
- Vector<double>(dim));
-
- Vector<double> cell_rhs (dofs_per_cell);
- Vector<double> cell_sigma_eff (dofs_per_cell);
-
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
-
- const FEValuesExtractors::Vector displacement (0);
-
- typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active(),
- endc = dof_handler.end();
-
- unsigned int elast_points = 0;
- unsigned int plast_points = 0;
- double sigma_eff = 0;
- double yield = 0;
- unsigned int cell_number = 0;
- for (; cell!=endc; ++cell)
- if (cell->is_locally_owned())
- {
- fe_values.reinit (cell);
- cell_rhs = 0;
-
- right_hand_side.vector_value_list (fe_values.get_quadrature_points(),
- right_hand_side_values);
-
- std::vector<SymmetricTensor<2,dim> > strain_tensor (n_q_points);
- fe_values[displacement].get_function_symmetric_gradients (u, strain_tensor);
-
- for (unsigned int q_point=0; q_point<n_q_points; ++q_point)
- {
- SymmetricTensor<4,dim> stress_strain_tensor;
- SymmetricTensor<2,dim> stress_tensor;
-
- plast_lin_hard->plast_linear_hardening (stress_strain_tensor, strain_tensor[q_point],
- elast_points, plast_points, sigma_eff, yield);
-
- // sigma_eff_vector (cell_number) += sigma_eff;
- sigma_eff_vector (cell_number) += yield;
-
- /* if (q_point == 0)
- std::cout<< stress_strain_tensor <<std::endl;*/
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- {
- cell_rhs(i) -= (strain_tensor[q_point] * stress_strain_tensor * //(stress_tensor) *
- plast_lin_hard->get_strain(fe_values, i, q_point) *
- fe_values.JxW (q_point));
-
- Tensor<1,dim> rhs_values;
- rhs_values = 0;
- cell_rhs(i) += ((fe_values[displacement].value (i, q_point) *
- rhs_values) *
- fe_values.JxW (q_point));
- };
- };
-
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- {
- if (cell->face (face)->at_boundary()
- && cell->face (face)->boundary_indicator () == 9)
- {
- fe_values_face.reinit (cell, face);
-
- right_hand_side.vector_value_list (fe_values_face.get_quadrature_points(),
- right_hand_side_values_face);
-
- for (unsigned int q_point=0; q_point<n_face_q_points; ++q_point)
- {
- Tensor<1,dim> rhs_values;
- rhs_values = 0;
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_rhs(i) += (fe_values_face[displacement].value (i, q_point) *
- rhs_values *
- fe_values_face.JxW (q_point));
- }
- }
- }
-
- cell->get_dof_indices (local_dof_indices);
- constraints_dirichlet_hanging_nodes.distribute_local_to_global (cell_rhs,
- local_dof_indices,
- system_rhs_newton);
-
- sigma_eff_vector(cell_number) /= n_q_points;
- cell_number += 1;
- };
-
- system_rhs_newton.compress ();
-
- unsigned int sum_elast_points = Utilities::MPI::sum(elast_points, mpi_communicator);
- unsigned int sum_plast_points = Utilities::MPI::sum(plast_points, mpi_communicator);
- pcout<< "Elast-Points = " << sum_elast_points <<std::endl;
- pcout<< "Plast-Points = " << sum_plast_points <<std::endl;
-}
+ mass_matrix.compress ();
+ }
- // @sect4{Step4::projection_active_set}
+ // @sect4{PlasticityContactProblem::update_solution_and_constraints}
- // Projection and updating of the active set
- // for the dofs which penetrates the obstacle.
-template <int dim>
-void Step4<dim>::projection_active_set ()
-{
- clock_t start_proj, end_proj;
-
- const EquationData::Obstacle<dim> obstacle;
- std::vector<bool> vertex_touched (dof_handler.n_dofs (), false);
-
- typename DoFHandler<dim>::active_cell_iterator
- cell = dof_handler.begin_active(),
- endc = dof_handler.end();
-
- TrilinosWrappers::MPI::Vector distributed_solution (system_rhs_newton);
- distributed_solution = solution;
- TrilinosWrappers::MPI::Vector lambda (solution);
- lambda = resid_vector;
- TrilinosWrappers::MPI::Vector diag_mass_matrix_vector_relevant (solution);
- diag_mass_matrix_vector_relevant = diag_mass_matrix_vector;
-
- constraints.reinit(locally_relevant_dofs);
- active_set.clear ();
- IndexSet active_set_locally_owned;
- active_set_locally_owned.set_size (locally_owned_dofs.size ());
- const double c = 100.0*e_modul;
-
- for (; cell!=endc; ++cell)
- if (cell->is_locally_owned())
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->at_boundary()
- && cell->face (face)->boundary_indicator () == 9)
- for (unsigned int v=0; v<GeometryInfo<dim-1>::vertices_per_cell; ++v)
- {
- unsigned int index_z = cell->face (face)->vertex_dof_index (v,2);
-
- if (vertex_touched[cell->face (face)->vertex_index(v)] == false)
- vertex_touched[cell->face (face)->vertex_index(v)] = true;
- else
- continue;
-
- // the local row where
- Point<dim> point (cell->face (face)->vertex (v)[0],/* + solution (index_x),*/
- cell->face (face)->vertex (v)[1],
- cell->face (face)->vertex (v)[2]);
-
- double obstacle_value = obstacle.value (point, 2);
- double solution_index_z = solution (index_z);
- double gap = obstacle_value - point (2);
-
- if (lambda (index_z) +
- c*diag_mass_matrix_vector_relevant (index_z)*(solution_index_z - gap) > 0)
- {
- constraints.add_line (index_z);
- constraints.set_inhomogeneity (index_z, gap);
-
- distributed_solution (index_z) = gap;
-
- if (locally_relevant_dofs.is_element (index_z))
- active_set.add_index (index_z);
-
- if (locally_owned_dofs.is_element (index_z))
- active_set_locally_owned.add_index (index_z);
-
- // std::cout<< index_z << ", "
- // << "Error: " << lambda (index_z) +
- // diag_mass_matrix_vector_relevant (index_z)*c*(solution_index_z - gap)
- // << ", " << lambda (index_z)
- // << ", " << diag_mass_matrix_vector_relevant (index_z)
- // << ", " << obstacle_value
- // << ", " << solution_index_z
- // <<std::endl;
- }
- }
- distributed_solution.compress(Insert);
-
- unsigned int sum_contact_constraints = Utilities::MPI::sum(active_set_locally_owned.n_elements (),
- mpi_communicator);
- pcout << "Number of Contact-Constaints: " << sum_contact_constraints <<std::endl;
-
- solution = distributed_solution;
-
- constraints.close ();
-
- const ConstraintMatrix::MergeConflictBehavior
- merge_conflict_behavior = ConstraintMatrix::left_object_wins;
- constraints.merge (constraints_dirichlet_hanging_nodes, merge_conflict_behavior);
-}
+ // Projection and updating of the active set
+ // for the dofs which penetrates the obstacle.
+ template <int dim>
+ void PlasticityContactProblem<dim>::update_solution_and_constraints ()
+ {
+ clock_t start_proj, end_proj;
-template <int dim>
-void Step4<dim>::dirichlet_constraints ()
-{
- /* boundary_indicators:
- _______
- / 9 /|
- /______ / |
- 8| | 8|
- | 8 | /
- |_______|/
- 6
- */
-
- constraints_dirichlet_hanging_nodes.reinit (locally_relevant_dofs);
- constraints_dirichlet_hanging_nodes.merge (constraints_hanging_nodes);
-
- std::vector<bool> component_mask (dim, true);
- component_mask[0] = true;
- component_mask[1] = true;
- component_mask[2] = true;
- VectorTools::interpolate_boundary_values (dof_handler,
- 6,
- EquationData::BoundaryValues<dim>(),
- constraints_dirichlet_hanging_nodes,
- component_mask);
-
- component_mask[0] = true;
- component_mask[1] = true;
- component_mask[2] = false;
- VectorTools::interpolate_boundary_values (dof_handler,
- 8,
- EquationData::BoundaryValues<dim>(),
- constraints_dirichlet_hanging_nodes,
- component_mask);
- constraints_dirichlet_hanging_nodes.close ();
-}
+ const EquationData::Obstacle<dim> obstacle;
+ std::vector<bool> vertex_touched (dof_handler.n_dofs (), false);
-template <int dim>
-void Step4<dim>::solve ()
-{
- pcout << "Solving ..." << std::endl;
- Timer t;
+ typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
- TrilinosWrappers::MPI::Vector distributed_solution (system_rhs_newton);
- distributed_solution = solution;
-
- constraints_hanging_nodes.set_zero (distributed_solution);
+ TrilinosWrappers::MPI::Vector distributed_solution (system_rhs_newton);
+ distributed_solution = solution;
+ TrilinosWrappers::MPI::Vector lambda (solution);
+ lambda = resid_vector;
+ TrilinosWrappers::MPI::Vector diag_mass_matrix_vector_relevant (solution);
+ diag_mass_matrix_vector_relevant = diag_mass_matrix_vector;
+
+ constraints.reinit(locally_relevant_dofs);
+ active_set.clear ();
+ IndexSet active_set_locally_owned;
+ active_set_locally_owned.set_size (locally_owned_dofs.size ());
+ const double c = 100.0*e_modul;
+
+ for (; cell!=endc; ++cell)
+ if (cell->is_locally_owned())
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->at_boundary()
+ && cell->face (face)->boundary_indicator () == 9)
+ for (unsigned int v=0; v<GeometryInfo<dim-1>::vertices_per_cell; ++v)
+ {
+ unsigned int index_z = cell->face (face)->vertex_dof_index (v,2);
+
+ if (vertex_touched[cell->face (face)->vertex_index(v)] == false)
+ vertex_touched[cell->face (face)->vertex_index(v)] = true;
+ else
+ continue;
+
+ // the local row where
+ Point<dim> point (cell->face (face)->vertex (v)[0],/* + solution (index_x),*/
+ cell->face (face)->vertex (v)[1],
+ cell->face (face)->vertex (v)[2]);
+
+ double obstacle_value = obstacle.value (point, 2);
+ double solution_index_z = solution (index_z);
+ double gap = obstacle_value - point (2);
+
+ if (lambda (index_z) +
+ c *
+ diag_mass_matrix_vector_relevant (index_z) *
+ (solution_index_z - gap)
+ > 0)
+ {
+ constraints.add_line (index_z);
+ constraints.set_inhomogeneity (index_z, gap);
+
+ distributed_solution (index_z) = gap;
+
+ if (locally_relevant_dofs.is_element (index_z))
+ active_set.add_index (index_z);
+
+ if (locally_owned_dofs.is_element (index_z))
+ active_set_locally_owned.add_index (index_z);
+
+ // std::cout<< index_z << ", "
+ // << "Error: " << lambda (index_z) +
+ // diag_mass_matrix_vector_relevant (index_z)*c*(solution_index_z - gap)
+ // << ", " << lambda (index_z)
+ // << ", " << diag_mass_matrix_vector_relevant (index_z)
+ // << ", " << obstacle_value
+ // << ", " << solution_index_z
+ // <<std::endl;
+ }
+ }
+ distributed_solution.compress(Insert);
+
+ unsigned int sum_contact_constraints = Utilities::MPI::sum(active_set_locally_owned.n_elements (),
+ mpi_communicator);
+ pcout << "Number of Contact-Constaints: " << sum_contact_constraints <<std::endl;
+
+ solution = distributed_solution;
+
+ constraints.close ();
+
+ const ConstraintMatrix::MergeConflictBehavior
+ merge_conflict_behavior = ConstraintMatrix::left_object_wins;
+ constraints.merge (constraints_dirichlet_hanging_nodes, merge_conflict_behavior);
+ }
+
+ template <int dim>
+ void PlasticityContactProblem<dim>::dirichlet_constraints ()
+ {
+ /* boundary_indicators:
+ _______
+ / 9 /|
+ /______ / |
+ 8| | 8|
+ | 8 | /
+ |_______|/
+ 6
+ */
+
+ constraints_dirichlet_hanging_nodes.reinit (locally_relevant_dofs);
+ constraints_dirichlet_hanging_nodes.merge (constraints_hanging_nodes);
+
+ std::vector<bool> component_mask (dim, true);
+ component_mask[0] = true;
+ component_mask[1] = true;
+ component_mask[2] = true;
+ VectorTools::interpolate_boundary_values (dof_handler,
+ 6,
+ EquationData::BoundaryValues<dim>(),
+ constraints_dirichlet_hanging_nodes,
+ component_mask);
+
+ component_mask[0] = true;
+ component_mask[1] = true;
+ component_mask[2] = false;
+ VectorTools::interpolate_boundary_values (dof_handler,
+ 8,
+ EquationData::BoundaryValues<dim>(),
+ constraints_dirichlet_hanging_nodes,
+ component_mask);
+ constraints_dirichlet_hanging_nodes.close ();
+ }
+
+ template <int dim>
+ void PlasticityContactProblem<dim>::solve ()
+ {
+ pcout << "Solving ..." << std::endl;
+ Timer t;
- // Solving iterative
+ TrilinosWrappers::MPI::Vector distributed_solution (system_rhs_newton);
+ distributed_solution = solution;
- MPI_Barrier (mpi_communicator);
- t.restart();
+ constraints_hanging_nodes.set_zero (distributed_solution);
- preconditioner_u.initialize (system_matrix_newton, additional_data);
-
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[6] += t.wall_time();
-
- MPI_Barrier (mpi_communicator);
- t.restart();
-
-// ReductionControl reduction_control (10000, 1e-15, 1e-4);
-// SolverCG<TrilinosWrappers::MPI::Vector>
-// solver (reduction_control, mpi_communicator);
-// solver.solve (system_matrix_newton, distributed_solution, system_rhs_newton, preconditioner_u);
-
- PrimitiveVectorMemory<TrilinosWrappers::MPI::Vector> mem;
- TrilinosWrappers::MPI::Vector tmp (system_rhs_newton);
- const double solver_tolerance = 1e-4 *
- system_matrix_newton.residual (tmp, distributed_solution, system_rhs_newton);
- SolverControl solver_control (system_matrix_newton.m(), solver_tolerance);
- SolverFGMRES<TrilinosWrappers::MPI::Vector>
- solver(solver_control, mem,
- SolverFGMRES<TrilinosWrappers::MPI::Vector>::
- AdditionalData(30, true));
- solver.solve(system_matrix_newton, distributed_solution, system_rhs_newton, preconditioner_u);
-
- pcout << "Initial error: " << solver_control.initial_value() <<std::endl;
- pcout << " " << solver_control.last_step()
- << " CG iterations needed to obtain convergence with an error: "
- << solver_control.last_value()
- << std::endl;
-
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[7] += t.wall_time();
-
- number_iterations += solver_control.last_step();
-
- constraints.distribute (distributed_solution);
-
- solution = distributed_solution;
-}
+ // Solving iterative
-template <int dim>
-void Step4<dim>::solve_newton ()
-{
- double resid=0;
- double resid_old=100000;
- TrilinosWrappers::MPI::Vector res (system_rhs_newton);
- TrilinosWrappers::MPI::Vector tmp_vector (system_rhs_newton);
- Timer t;
-
- std::vector<std::vector<bool> > constant_modes;
- std::vector<bool> components (dim,true);
- components[dim] = false;
- DoFTools::extract_constant_modes (dof_handler, components,
- constant_modes);
-
- additional_data.elliptic = true;
- additional_data.n_cycles = 1;
- additional_data.w_cycle = false;
- additional_data.output_details = false;
- additional_data.smoother_sweeps = 2;
- additional_data.aggregation_threshold = 1e-2;
-
- IndexSet active_set_old (active_set);
- Vector<double> sigma_eff_vector;
- sigma_eff_vector.reinit (triangulation.n_active_cells());
- unsigned int j = 0;
- unsigned int number_assemble_system = 0;
- for (; j<=100;j++)
- {
- pcout<< " " <<std::endl;
- pcout<< j << ". Iteration of the inexact Newton-method." <<std::endl;
- pcout<< "Update of active set" <<std::endl;
-
- MPI_Barrier (mpi_communicator);
- t.restart();
-
- projection_active_set ();
-
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[5] += t.wall_time();
-
- pcout<< "Assembling ... " <<std::endl;
- MPI_Barrier (mpi_communicator);
- t.restart();
- system_matrix_newton = 0;
- system_rhs_newton = 0;
- assemble_nl_system (solution); //compute Newton-Matrix
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[1] += t.wall_time();
-
- number_assemble_system += 1;
-
- MPI_Barrier (mpi_communicator);
- t.restart();
- solve ();
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[2] += t.wall_time();
-
- TrilinosWrappers::MPI::Vector distributed_solution (system_rhs_newton);
- distributed_solution = solution;
-
- int damped = 0;
- tmp_vector = old_solution;
- double a = 0;
- for (unsigned int i=0; (i<10)&&(!damped); i++)
- {
- a=pow(0.5, static_cast<double>(i));
- old_solution = tmp_vector;
- old_solution.sadd(1-a,a, distributed_solution);
-
- MPI_Barrier (mpi_communicator);
- t.restart();
- system_rhs_newton = 0;
- sigma_eff_vector = 0;
- solution = old_solution;
- residual_nl_system (solution, sigma_eff_vector);
- res = system_rhs_newton;
-
- const unsigned int
- start_res = (res.local_range().first),
- end_res = (res.local_range().second);
- for (unsigned int n=start_res; n<end_res; ++n)
- if (constraints.is_inhomogeneously_constrained (n))
- {
- // pcout<< i << ". " << constraints.get_inhomogeneity (n)
- // << ". " << res (n)
- // << ", start = " << start_res
- // << ", end = " << end_res
- // <<std::endl;
- res(n) = 0;
- }
-
- resid = res.l2_norm ();
- pcout<< "Residual: " << resid <<std::endl;
-
- if (resid<resid_old)
- {
- pcout<< "Newton-damping parameter alpha = " << a <<std::endl;
- damped=1;
- }
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[3] += t.wall_time();
- }
-
- if (resid<1e-8)
- {
- pcout<< "Inexact Newton-method stopped with residual = " << resid <<std::endl;
- pcout<< "Number of Assembling systems = " << number_assemble_system <<std::endl;
- break;
- }
- resid_old=resid;
-
- resid_vector = system_rhs_newton;
-
- if (active_set == active_set_old && resid < 1e-10)
- break;
- active_set_old = active_set;
- } // End of active-set-loop
+ MPI_Barrier (mpi_communicator);
+ t.restart();
-
- pcout<< "Creating output." <<std::endl;
- MPI_Barrier (mpi_communicator);
- t.restart();
- std::ostringstream filename_solution;
- filename_solution << "solution";
- // filename_solution << "solution_";
- // filename_solution << k;
- output_results (filename_solution.str ());
- // output_results (sigma_eff_vector, "sigma_eff");
- MPI_Barrier (mpi_communicator);
- t.stop();
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- run_time[4] += t.wall_time();
-
- pcout<< "Number of Solver-Iterations = " << number_iterations <<std::endl;
-
- pcout<< "%%%%%% Rechenzeit make grid and setup = " << run_time[0] <<std::endl;
- pcout<< "%%%%%% Rechenzeit projection active set = " << run_time[5] <<std::endl;
- pcout<< "%%%%%% Rechenzeit assemble system = " << run_time[1] <<std::endl;
- pcout<< "%%%%%% Rechenzeit solve system = " << run_time[2] <<std::endl;
- pcout<< "%%%%%% Rechenzeit preconditioner = " << run_time[6] <<std::endl;
- pcout<< "%%%%%% Rechenzeit solve with CG = " << run_time[7] <<std::endl;
- pcout<< "%%%%%% Rechenzeit error and lambda = " << run_time[3] <<std::endl;
- pcout<< "%%%%%% Rechenzeit output = " << run_time[4] <<std::endl;
-}
+ preconditioner_u.initialize (system_matrix_newton, additional_data);
-template <int dim>
-void Step4<dim>::output_results (const std::string& title) const
-{
- move_mesh (solution);
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[6] += t.wall_time();
- TrilinosWrappers::MPI::Vector lambda (solution);
- lambda = resid_vector;
+ MPI_Barrier (mpi_communicator);
+ t.restart();
- DataOut<dim> data_out;
+ // ReductionControl reduction_control (10000, 1e-15, 1e-4);
+ // SolverCG<TrilinosWrappers::MPI::Vector>
+ // solver (reduction_control, mpi_communicator);
+ // solver.solve (system_matrix_newton, distributed_solution, system_rhs_newton, preconditioner_u);
- data_out.attach_dof_handler (dof_handler);
+ PrimitiveVectorMemory<TrilinosWrappers::MPI::Vector> mem;
+ TrilinosWrappers::MPI::Vector tmp (system_rhs_newton);
+ const double solver_tolerance = 1e-4 *
+ system_matrix_newton.residual (tmp, distributed_solution, system_rhs_newton);
+ SolverControl solver_control (system_matrix_newton.m(), solver_tolerance);
+ SolverFGMRES<TrilinosWrappers::MPI::Vector>
+ solver(solver_control, mem,
+ SolverFGMRES<TrilinosWrappers::MPI::Vector>::
+ AdditionalData(30, true));
+ solver.solve(system_matrix_newton, distributed_solution, system_rhs_newton, preconditioner_u);
- const std::vector<DataComponentInterpretation::DataComponentInterpretation>
- data_component_interpretation
- (dim, DataComponentInterpretation::component_is_part_of_vector);
- data_out.add_data_vector (solution, std::vector<std::string>(dim, "Displacement"),
- DataOut<dim>::type_dof_data,
- data_component_interpretation);
- data_out.add_data_vector (lambda, std::vector<std::string>(dim, "Residual"),
- DataOut<dim>::type_dof_data,
- data_component_interpretation);
- data_out.add_data_vector (active_set, std::vector<std::string>(dim, "ActiveSet"),
- DataOut<dim>::type_dof_data,
- data_component_interpretation);
+ pcout << "Initial error: " << solver_control.initial_value() <<std::endl;
+ pcout << " " << solver_control.last_step()
+ << " CG iterations needed to obtain convergence with an error: "
+ << solver_control.last_value()
+ << std::endl;
- Vector<float> subdomain (triangulation.n_active_cells());
- for (unsigned int i=0; i<subdomain.size(); ++i)
- subdomain(i) = triangulation.locally_owned_subdomain();
- data_out.add_data_vector (subdomain, "subdomain");
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[7] += t.wall_time();
- data_out.build_patches ();
+ number_iterations += solver_control.last_step();
- const std::string filename = (title + "-" +
- Utilities::int_to_string
- (triangulation.locally_owned_subdomain(), 4));
+ constraints.distribute (distributed_solution);
- std::ofstream output_vtu ((filename + ".vtu").c_str ());
- data_out.write_vtu (output_vtu);
+ solution = distributed_solution;
+ }
- if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
- {
- std::vector<std::string> filenames;
- for (unsigned int i=0;
- i<Utilities::MPI::n_mpi_processes(mpi_communicator);
- ++i)
- filenames.push_back ("solution-" +
- Utilities::int_to_string (i, 4) +
- ".vtu");
-
- std::ofstream master_output ((filename + ".pvtu").c_str());
- data_out.write_pvtu_record (master_output, filenames);
- }
+ template <int dim>
+ void PlasticityContactProblem<dim>::solve_newton ()
+ {
+ double resid=0;
+ double resid_old=100000;
+ TrilinosWrappers::MPI::Vector res (system_rhs_newton);
+ TrilinosWrappers::MPI::Vector tmp_vector (system_rhs_newton);
+ Timer t;
+
+ std::vector<std::vector<bool> > constant_modes;
+ std::vector<bool> components (dim,true);
+ components[dim] = false;
+ DoFTools::extract_constant_modes (dof_handler, components,
+ constant_modes);
+
+ additional_data.elliptic = true;
+ additional_data.n_cycles = 1;
+ additional_data.w_cycle = false;
+ additional_data.output_details = false;
+ additional_data.smoother_sweeps = 2;
+ additional_data.aggregation_threshold = 1e-2;
+
+ IndexSet active_set_old (active_set);
+ unsigned int j = 0;
+ unsigned int number_assemble_system = 0;
+ for (; j<=100;j++)
+ {
+ pcout<< " " <<std::endl;
+ pcout<< j << ". Iteration of the inexact Newton-method." <<std::endl;
+ pcout<< "Update of active set" <<std::endl;
+
+ MPI_Barrier (mpi_communicator);
+ t.restart();
+
+ update_solution_and_constraints ();
+
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[5] += t.wall_time();
+
+ pcout<< "Assembling ... " <<std::endl;
+ MPI_Barrier (mpi_communicator);
+ t.restart();
+ system_matrix_newton = 0;
+ system_rhs_newton = 0;
+ assemble_nl_system (solution); //compute Newton-Matrix
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[1] += t.wall_time();
+
+ number_assemble_system += 1;
+
+ MPI_Barrier (mpi_communicator);
+ t.restart();
+ solve ();
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[2] += t.wall_time();
+
+ TrilinosWrappers::MPI::Vector distributed_solution (system_rhs_newton);
+ distributed_solution = solution;
+
+ int damped = 0;
+ tmp_vector = old_solution;
+ double a = 0;
+ for (unsigned int i=0; (i<10)&&(!damped); i++)
+ {
+ a=pow(0.5, static_cast<double>(i));
+ old_solution = tmp_vector;
+ old_solution.sadd(1-a,a, distributed_solution);
+
+ MPI_Barrier (mpi_communicator);
+ t.restart();
+ system_rhs_newton = 0;
+ solution = old_solution;
+ residual_nl_system (solution);
+ res = system_rhs_newton;
+
+ const unsigned int
+ start_res = (res.local_range().first),
+ end_res = (res.local_range().second);
+ for (unsigned int n=start_res; n<end_res; ++n)
+ if (constraints.is_inhomogeneously_constrained (n))
+ {
+ // pcout<< i << ". " << constraints.get_inhomogeneity (n)
+ // << ". " << res (n)
+ // << ", start = " << start_res
+ // << ", end = " << end_res
+ // <<std::endl;
+ res(n) = 0;
+ }
+
+ resid = res.l2_norm ();
+ pcout<< "Residual: " << resid <<std::endl;
+
+ if (resid<resid_old)
+ {
+ pcout<< "Newton-damping parameter alpha = " << a <<std::endl;
+ damped=1;
+ }
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[3] += t.wall_time();
+ }
+
+ if (resid<1e-8)
+ {
+ pcout<< "Inexact Newton-method stopped with residual = " << resid <<std::endl;
+ pcout<< "Number of Assembling systems = " << number_assemble_system <<std::endl;
+ break;
+ }
+ resid_old=resid;
+
+ resid_vector = system_rhs_newton;
+
+ if (active_set == active_set_old && resid < 1e-10)
+ break;
+ active_set_old = active_set;
+ } // End of active-set-loop
+
+ pcout<< "Number of Solver-Iterations = " << number_iterations <<std::endl;
+
+ pcout<< "%%%%%% Rechenzeit make grid and setup = " << run_time[0] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit projection active set = " << run_time[5] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit assemble system = " << run_time[1] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit solve system = " << run_time[2] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit preconditioner = " << run_time[6] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit solve with CG = " << run_time[7] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit error and lambda = " << run_time[3] <<std::endl;
+ pcout<< "%%%%%% Rechenzeit output = " << run_time[4] <<std::endl;
+ }
- TrilinosWrappers::MPI::Vector tmp (solution);
- tmp *= -1;
- move_mesh (tmp);
-}
+ template <int dim>
+ void PlasticityContactProblem<dim>::refine_grid ()
+ {
+ Vector<float> estimated_error_per_cell (triangulation.n_active_cells());
+ KellyErrorEstimator<dim>::estimate (dof_handler,
+ QGauss<dim-1>(3),
+ typename FunctionMap<dim>::type(),
+ solution,
+ estimated_error_per_cell);
+ parallel::distributed::GridRefinement::
+ refine_and_coarsen_fixed_number (triangulation,
+ estimated_error_per_cell,
+ 0.3, 0.03);
+ triangulation.execute_coarsening_and_refinement ();
-template <int dim>
-void Step4<dim>::move_mesh (const TrilinosWrappers::MPI::Vector &_complete_displacement) const
-{
- pcout<< "Moving mesh." <<std::endl;
-
- std::vector<bool> vertex_touched (triangulation.n_vertices(),
- false);
-
- for (typename DoFHandler<dim>::active_cell_iterator
- cell = dof_handler.begin_active ();
- cell != dof_handler.end(); ++cell)
- if (cell->is_locally_owned())
- for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
- {
- if (vertex_touched[cell->vertex_index(v)] == false)
- {
- vertex_touched[cell->vertex_index(v)] = true;
-
- Point<dim> vertex_displacement;
- for (unsigned int d=0; d<dim; ++d)
- {
- if (_complete_displacement(cell->vertex_dof_index(v,d)) != 0)
- vertex_displacement[d]
- = _complete_displacement(cell->vertex_dof_index(v,d));
- }
-
- cell->vertex(v) += vertex_displacement;
- }
- }
-}
+ }
-template <int dim>
-void Step4<dim>::output_results (TrilinosWrappers::MPI::Vector vector,
- const std::string& title) const
-{
- DataOut<dim> data_out;
+ template <int dim>
+ void PlasticityContactProblem<dim>::move_mesh (const TrilinosWrappers::MPI::Vector &_complete_displacement) const
+ {
+ pcout<< "Moving mesh." <<std::endl;
+
+ std::vector<bool> vertex_touched (triangulation.n_vertices(),
+ false);
+
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active ();
+ cell != dof_handler.end(); ++cell)
+ if (cell->is_locally_owned())
+ for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
+ {
+ if (vertex_touched[cell->vertex_index(v)] == false)
+ {
+ vertex_touched[cell->vertex_index(v)] = true;
+
+ Point<dim> vertex_displacement;
+ for (unsigned int d=0; d<dim; ++d)
+ {
+ if (_complete_displacement(cell->vertex_dof_index(v,d)) != 0)
+ vertex_displacement[d]
+ = _complete_displacement(cell->vertex_dof_index(v,d));
+ }
+
+ cell->vertex(v) += vertex_displacement;
+ }
+ }
+ }
- data_out.attach_dof_handler (dof_handler);
- data_out.add_data_vector (vector, "vector_to_plot");
+ template <int dim>
+ void PlasticityContactProblem<dim>::output_results (const std::string& title) const
+ {
+ move_mesh (solution);
- data_out.build_patches ();
+ TrilinosWrappers::MPI::Vector lambda (solution);
+ lambda = resid_vector;
- std::ofstream output_vtk (dim == 2 ?
- (title + ".vtk").c_str () :
- (title + ".vtk").c_str ());
- data_out.write_vtk (output_vtk);
-}
+ DataOut<dim> data_out;
-template <int dim>
-void Step4<dim>::output_results (Vector<double> vector, const std::string& title) const
-{
- DataOut<dim> data_out;
+ data_out.attach_dof_handler (dof_handler);
- data_out.attach_dof_handler (dof_handler);
- data_out.add_data_vector (vector, "vector_to_plot");
+ const std::vector<DataComponentInterpretation::DataComponentInterpretation>
+ data_component_interpretation
+ (dim, DataComponentInterpretation::component_is_part_of_vector);
+ data_out.add_data_vector (solution, std::vector<std::string>(dim, "Displacement"),
+ DataOut<dim>::type_dof_data,
+ data_component_interpretation);
+ data_out.add_data_vector (lambda, std::vector<std::string>(dim, "Residual"),
+ DataOut<dim>::type_dof_data,
+ data_component_interpretation);
+ data_out.add_data_vector (active_set, std::vector<std::string>(dim, "ActiveSet"),
+ DataOut<dim>::type_dof_data,
+ data_component_interpretation);
- data_out.build_patches ();
+ Vector<float> subdomain (triangulation.n_active_cells());
+ for (unsigned int i=0; i<subdomain.size(); ++i)
+ subdomain(i) = triangulation.locally_owned_subdomain();
+ data_out.add_data_vector (subdomain, "subdomain");
- std::ofstream output_vtk (dim == 2 ?
- (title + ".vtk").c_str () :
- (title + ".vtk").c_str ());
- data_out.write_vtk (output_vtk);
-}
+ data_out.build_patches ();
-template <int dim>
-void Step4<dim>::run ()
-{
- pcout << "Solving problem in " << dim << " space dimensions." << std::endl;
+ const std::string filename = (title + "-" +
+ Utilities::int_to_string
+ (triangulation.locally_owned_subdomain(), 4));
- run_time.resize (8);
+ std::ofstream output_vtu ((filename + ".vtu").c_str ());
+ data_out.write_vtu (output_vtu);
- clock_t start, end;
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ {
+ std::vector<std::string> filenames;
+ for (unsigned int i=0;
+ i<Utilities::MPI::n_mpi_processes(mpi_communicator);
+ ++i)
+ filenames.push_back ("solution-" +
+ Utilities::int_to_string (i, 4) +
+ ".vtu");
+
+ std::ofstream master_output ((filename + ".pvtu").c_str());
+ data_out.write_pvtu_record (master_output, filenames);
+ }
- start = clock();
- make_grid();
- // mesh_surface ();
-
- setup_system ();
+ TrilinosWrappers::MPI::Vector tmp (solution);
+ tmp *= -1;
+ move_mesh (tmp);
+ }
+
+ template <int dim>
+ void PlasticityContactProblem<dim>::run ()
+ {
+ pcout << "Solving problem in " << dim << " space dimensions." << std::endl;
- end = clock();
- run_time[0] = (double)(end-start)/CLOCKS_PER_SEC;
+ Timer t;
+ run_time.resize (8);
- solve_newton ();
+ const unsigned int n_cycles = 5;
+ for (unsigned int cycle=0; cycle<n_cycles; ++cycle)
+ {
+ pcout << "Cycle " << cycle << ':' << std::endl;
+
+ MPI_Barrier (mpi_communicator);
+ t.restart();
+
+ if (cycle == 0)
+ {
+ make_grid();
+ }
+ else
+ refine_grid ();
+
+ setup_system ();
+
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ run_time[0] += t.wall_time();;
+
+ solve_newton ();
+
+ pcout<< "Creating output." <<std::endl;
+ MPI_Barrier (mpi_communicator);
+ t.restart();
+ std::ostringstream filename_solution;
+ filename_solution << "solution_";
+ filename_solution << cycle;
+ output_results (filename_solution.str ());
+ MPI_Barrier (mpi_communicator);
+ t.stop();
+ if (Utilities::MPI::this_mpi_process(mpi_communicator) == 0)
+ run_time[4] += t.wall_time();
+ }
+ }
}
-
// @sect3{The <code>main</code> function}
- // And this is the main function. It also
- // looks mostly like in step-3, but if you
- // look at the code below, note how we first
- // create a variable of type
- // <code>Step4@<2@></code> (forcing
- // the compiler to compile the class template
- // with <code>dim</code> replaced by
- // <code>2</code>) and run a 2d simulation,
- // and then we do the whole thing over in 3d.
- //
- // In practice, this is probably not what you
- // would do very frequently (you probably
- // either want to solve a 2d problem, or one
- // in 3d, but not both at the same
- // time). However, it demonstrates the
- // mechanism by which we can simply change
- // which dimension we want in a single place,
- // and thereby force the compiler to
- // recompile the dimension independent class
- // templates for the dimension we
- // request. The emphasis here lies on the
- // fact that we only need to change a single
- // place. This makes it rather trivial to
- // debug the program in 2d where computations
- // are fast, and then switch a single place
- // to a 3 to run the much more computing
- // intensive program in 3d for `real'
- // computations.
- //
- // Each of the two blocks is enclosed in
- // braces to make sure that the
- // <code>laplace_problem_2d</code> variable
- // goes out of scope (and releases the memory
- // it holds) before we move on to allocate
- // memory for the 3d case. Without the
- // additional braces, the
- // <code>laplace_problem_2d</code> variable
- // would only be destroyed at the end of the
- // function, i.e. after running the 3d
- // problem, and would needlessly hog memory
- // while the 3d run could actually use it.
- //
- // Finally, the first line of the function is
- // used to suppress some output. Remember
- // that in the previous example, we had the
- // output from the linear solvers about the
- // starting residual and the number of the
- // iteration where convergence was
- // detected. This can be suppressed through
- // the <code>deallog.depth_console(0)</code>
- // call.
- //
- // The rationale here is the following: the
- // deallog (i.e. deal-log, not de-allog)
- // variable represents a stream to which some
- // parts of the library write output. It
- // redirects this output to the console and
- // if required to a file. The output is
- // nested in a way so that each function can
- // use a prefix string (separated by colons)
- // for each line of output; if it calls
- // another function, that may also use its
- // prefix which is then printed after the one
- // of the calling function. Since output from
- // functions which are nested deep below is
- // usually not as important as top-level
- // output, you can give the deallog variable
- // a maximal depth of nested output for
- // output to console and file. The depth zero
- // which we gave here means that no output is
- // written. By changing it you can get more
- // information about the innards of the
- // library.
int main (int argc, char *argv[])
{
+ using namespace dealii;
+ using namespace Step42;
+
deallog.depth_console (0);
clock_t start, end;
Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv);
{
- int _n_refinements_global = 1;
+ int _n_refinements_global = 2;
int _n_refinements_local = 1;
-
+
if (argc == 3)
{
_n_refinements_global = atoi(argv[1]);
_n_refinements_local = atoi(argv[2]);
}
-
- Step4<3> laplace_problem_3d (_n_refinements_global, _n_refinements_local);
+
+ PlasticityContactProblem<3> laplace_problem_3d (_n_refinements_global, _n_refinements_local);
laplace_problem_3d.run ();
}
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/solution_transfer.h>
#include <deal.II/lac/sparse_direct.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <fstream>
#include <deal.II/fe/fe_values.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_nothing.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/lac/trilinos_vector.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/distributed/tria.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
// This one is new. We want to read a
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/numerics/data_out.h>
// collects all important data during a run
// and prints it at the end as a table. These
// comes from the following two files:
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/convergence_table.h>
// And finally, we need to use the
// FEFaceValues class, which is
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/grid/grid_out.h>
class ParameterHandler;
-
+class XDMFEntry;
/**
* This is a base class for output of data on meshes of very general
* Output in deal.II
* intermediate format.
*/
- deal_II_intermediate
+ deal_II_intermediate,
+
+ /**
+ * Output in
+ * HDF5 format.
+ */
+ hdf5
};
const Deal_II_IntermediateFlags &flags,
std::ostream &out);
+ template <int dim, int spacedim>
+ static void write_hdf5_parallel (
+ const std::vector<Patch<dim,spacedim> > &patches,
+ const std::vector<std::string> &data_names,
+ const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
+ const char* filename,
+ MPI_Comm comm);
+
+ template <int dim, int spacedim>
+ static XDMFEntry create_xdmf_entry (const std::vector<Patch<dim,spacedim> > &patches,
+ const std::vector<std::string> &data_names,
+ const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
+ const char* h5_filename,
+ const double cur_time,
+ MPI_Comm comm);
+ template <int dim, int spacedim>
+ static void write_xdmf_file (
+ const std::vector<Patch<dim,spacedim> > &patches,
+ const std::vector<XDMFEntry> &entries,
+ const char *filename,
+ MPI_Comm comm);
+
/**
* Given an input stream that contains
* data written by
*/
void write_deal_II_intermediate (std::ostream &out) const;
+ XDMFEntry create_xdmf_entry (const char *h5_filename,
+ const double cur_time,
+ MPI_Comm comm) const;
+
+ void write_xdmf_file (const std::vector<XDMFEntry> &entries,
+ const char *filename,
+ MPI_Comm comm) const;
+
+ void write_hdf5_parallel (const char* filename, MPI_Comm comm) const;
/**
* Write data and grid to <tt>out</tt>
* according to the given data
+// A class to store relevant data to use when writing the light data XDMF file
+// This should only contain valid data on the root node which writes the files,
+// the rest of the nodes will have valid set to false
+class XDMFEntry {
+private:
+ // Whether this entry is valid and contains data to be written
+ bool valid;
+ // The name of the HDF5 heavy data file this entry references
+ std::string h5_filename;
+ // The simulation time associated with this entry
+ double entry_time;
+ // The number of nodes, cells and dimensionality associated with the data
+ unsigned int num_nodes, num_cells, dimension;
+ // The attributes associated with this entry and their dimension
+ std::map<std::string, unsigned int> attribute_dims;
+
+ // Small function to create indentation for XML file
+ std::string indent(const unsigned int indent_level) const {
+ std::string res = "";
+ for (unsigned int i=0;i<indent_level;++i) res += " ";
+ return res;
+ }
+
+public:
+ XDMFEntry(void) : valid(false) {};
+ XDMFEntry(const std::string filename, const double time, const unsigned int nodes, const unsigned int cells, const unsigned int dim) : valid(true), h5_filename(filename), entry_time(time), num_nodes(nodes), num_cells(cells), dimension(dim) {};
+
+ // Record an attribute and associated dimensionality
+ void add_attribute(const std::string &attr_name, const unsigned int dimension) {
+ attribute_dims[attr_name] = dimension;
+ }
+
+ // Get the XDMF content associated with this entry
+ // If the entry is not valid, this returns false
+ std::string get_xdmf_content(const unsigned int indent_level) const;
+};
+
+
+
/* -------------------- inline functions ------------------- */
inline
* would like to have code like
* <code>switch
* (subface_case)... case
- * SubfaceCase@<dim@>::case_x:
+ * SubfaceCase::case_x:
* ... </code>, which can be
* written as <code>switch
* (static_cast@<unsigned
* The first index in this 2D-array
* runs over all vertices, the second
* index over @p dim faces to which
- * the vertex belongs
+ * the vertex belongs.
+ *
+ * The order of the faces for
+ * each vertex is such that the
+ * first listed face bounds the
+ * reference cell in <i>x</i>
+ * direction, the second in
+ * <i>y</i> direction, and so on.
*/
static const unsigned int vertex_to_face[vertices_per_cell][dim];
* area(=1) of the face.
*
* E.g. for
- * <code>internal::SubfaceCase@<3@>::cut_xy</code>
+ * internal::SubfaceCase::cut_xy
* the ratio is 1/4 for each of
* the subfaces.
*/
#include <deal.II/base/config.h>
+#include <deal.II/base/types.h>
#include <complex>
DEAL_II_NAMESPACE_OPEN
*/
namespace numbers
{
- /**
- * Representation of the
- * largest number that
- * can be put into an
- * unsigned integer. This
- * value is widely used
- * throughout the library
- * as a marker for an
- * invalid unsigned
- * integer value, such as
- * an invalid array
- * index, an invalid
- * array size, and the
- * like.
- */
- static const unsigned int
- invalid_unsigned_int = static_cast<unsigned int> (-1);
-
/**
* e
*/
patterns.clear ();
for (unsigned int j=0; j<descriptions.size(); ++j)
- patterns.push_back (std_cxx1x::shared_ptr<Patterns::PatternBase>(Patterns::pattern_factory(descriptions[j])));
+ patterns.push_back (std_cxx1x::shared_ptr<const Patterns::PatternBase>(Patterns::pattern_factory(descriptions[j])));
}
unsigned int
TableBase<N,T>::n_elements () const
{
- unsigned s = 1;
+ unsigned int s = 1;
for (unsigned int n=0; n<N; ++n)
s *= table_size[n];
return s;
* 2 13 a
* 1 0 ""
* @endcode
+ * - <code>simple_table_with_separate_column_description</code>: This format
+ * is very similar to <code>table_with_separate_column_description</code>,
+ * but it skips aligning the columns with additional white space. This
+ * increases the performance o fwrite_text() for large tables. Example output:
+ * @code
+ * # 1: key1
+ * # 2: key2
+ * # 3: key3
+ * 0 0 ""
+ * 1 0 ""
+ * 2 13 a
+ * 1 0 ""
+ * @endcode
+ *
**/
enum TextOutputFormat
{
table_with_headers,
- table_with_separate_column_description
+ table_with_separate_column_description,
+ simple_table_with_separate_column_description,
};
/**
/**
* Store the indices in an array.
*/
- unsigned indices[N];
+ unsigned int indices[N];
};
* @author Wolfgang Bangerth, 2002
*/
template <int N>
-class TableIndices
+class TableIndices : public TableIndicesBase<N>
{
/**
* Standard constructor, setting
TableIndices (const unsigned int index1);
};
-
+//TODO: Remove the default arguments and trickery below and put all
+//the constructors into the class demplate
/**
* Array of indices of fixed size used for the TableBase
{
AssertDimension (result.size(),(Utilities::fixed_power<rank_, unsigned int>(dim)));
- unsigned index = 0;
+ unsigned int index = 0;
unroll_recursion (result, index);
}
Tensor<rank_, dim, Number>::unroll_recursion (Vector<Number2> &result,
unsigned int &index) const
{
- for (unsigned i=0; i<dim; ++i)
+ for (unsigned int i=0; i<dim; ++i)
{
operator[](i).unroll_recursion(result, index);
}
* inner product <tt> sum<sub>i,j</sub> src1[i][j]*src2[i][j]</tt>.
*
* @relates Tensor
- * @author Guido Kanschat, 2000
+ * @author Guido Kanschat, 2000
*/
template <int dim, typename Number>
inline
Number res = 0.;
for (unsigned int i=0; i<dim; ++i)
res += contract(src1[i],src2[i]);
-
+
return res;
}
Assert (result.size()==dim,
ExcDimensionMismatch(dim, result.size()));
- unsigned index = 0;
+ unsigned int index = 0;
unroll_recursion (result,index);
}
Tensor<1,dim,Number>::unroll_recursion (Vector<Number2> &result,
unsigned int &index) const
{
- for (unsigned i=0; i<dim; ++i)
+ for (unsigned int i=0; i<dim; ++i)
result(index++) = operator[](i);
}
template <typename> struct TaskDescriptor;
-
/**
* The task class for TBB that is
* used by the TaskDescriptor
template <typename> friend struct TaskEntryPoint;
- template <typename> friend struct Task;
+ friend class dealii::Threads::Task<RT>;
};
*
* See the @ref GlossSubdomainId
* "glossary" for more information.
+ *
+ * There is a special value,
+ * numbers::invalid_subdomain_id
+ * that is used to indicate an
+ * invalid value of this type.
*/
- typedef unsigned int subdomain_id_t;
+ typedef unsigned int subdomain_id;
+
+ /**
+ * @deprecated Old name for the typedef above.
+ */
+ typedef subdomain_id subdomain_id_t;
+
+ /**
+ * @deprecated Use numbers::invalid_subdomain_id
+ */
+ const unsigned int invalid_subdomain_id = static_cast<subdomain_id>(-1);
+
+ /**
+ * @deprecated Use numbers::artificial_subdomain_id
+ */
+ const unsigned int artificial_subdomain_id = static_cast<subdomain_id>(-2);
+
+ /**
+ * The type used to denote global dof
+ * indices.
+ */
+ typedef unsigned int global_dof_index;
+
+ /**
+ * @deprecated Use numbers::invalid_dof_index
+ */
+ const global_dof_index invalid_dof_index = static_cast<global_dof_index>(-1);
+
+ /**
+ * The type used to denote boundary indicators associated with every
+ * piece of the boundary and, in the case of meshes that describe
+ * manifolds in higher dimensions, associated with every cell.
+ *
+ * There is a special value, numbers::internal_face_boundary_id
+ * that is used to indicate an invalid value of this type and that
+ * is used as the boundary indicator for faces that are in the interior
+ * of the domain and therefore not part of any addressable boundary
+ * component.
+ */
+ typedef unsigned char boundary_id;
+
+ /**
+ * @deprecated Old name for the typedef above.
+ */
+ typedef boundary_id boundary_id_t;
+
+ /**
+ * The type used to denote material indicators associated with every
+ * cell.
+ *
+ * There is a special value, numbers::invalid_material_id
+ * that is used to indicate an invalid value of this type.
+ */
+ typedef unsigned char material_id;
+
+ /**
+ * @deprecated Old name for the typedef above.
+ */
+ typedef material_id material_id_t;
+
+}
+
+// this part of the namespace numbers got moved to the bottom types.h file,
+// because otherwise we get a circular inclusion of config.h, types.h, and
+// numbers.h
+namespace numbers
+{
+ /**
+ * Representation of the
+ * largest number that
+ * can be put into an
+ * unsigned integer. This
+ * value is widely used
+ * throughout the library
+ * as a marker for an
+ * invalid unsigned
+ * integer value, such as
+ * an invalid array
+ * index, an invalid
+ * array size, and the
+ * like.
+ */
+ static const unsigned int
+ invalid_unsigned_int = static_cast<unsigned int> (-1);
+
+ /**
+ * An invalid value for indices of degrees
+ * of freedom.
+ */
+ const types::global_dof_index invalid_dof_index = static_cast<types::global_dof_index>(-1);
+
+ /**
+ * Invalid material_id which we
+ * need in several places as a
+ * default value. We assume that
+ * all material_ids lie in the
+ * range [0, invalid_material_id).
+ */
+ const types::material_id invalid_material_id = static_cast<types::material_id>(-1);
+
+ /**
+ * The number which we reserve for
+ * internal faces. We assume that
+ * all boundary_ids lie in the
+ * range [0,
+ * internal_face_boundary_id).
+ */
+ const types::boundary_id internal_face_boundary_id = static_cast<types::boundary_id>(-1);
/**
* A special id for an invalid
* See the @ref GlossSubdomainId
* "glossary" for more information.
*/
- const unsigned int invalid_subdomain_id = static_cast<subdomain_id_t>(-1);
+ const types::subdomain_id invalid_subdomain_id = static_cast<types::subdomain_id>(-1);
/**
* The subdomain id assigned to a
* the @ref distributed module for
* more information.
*/
- const unsigned int artificial_subdomain_id = static_cast<subdomain_id_t>(-2);
-
- /**
- * The type used to denote global dof
- * indices.
- */
- typedef unsigned int global_dof_index;
-
- /**
- * An invalid value for indices of degrees
- * of freedom.
- */
- const global_dof_index invalid_dof_index = static_cast<global_dof_index>(-1);
-
- /**
- * The type used to denote boundary indicators associated with every
- * piece of the boundary and, in the case of meshes that describe
- * manifolds in higher dimensions, associated with every cell.
- */
- typedef unsigned char boundary_id_t;
-
- /**
- * The number which we reserve for internal faces.
- * We assume that all boundary_ids lie in the range [0, internal_face_boundary_id).
- */
- const boundary_id_t internal_face_boundary_id = static_cast<boundary_id_t>(-1);
-
- /**
- * The type used to denote material indicators associated with every
- * cell.
- */
- typedef unsigned char material_id_t;
-
- /**
- * Invalid material_id which we need in several places as a default value.
- * We assume that all material_ids lie in the range [0, invalid_material_id).
- */
- const material_id_t invalid_material_id = static_cast<material_id_t>(-1);
+ const types::subdomain_id artificial_subdomain_id = static_cast<types::subdomain_id>(-2);
}
* it relies on the p4est library that does not support this. Attempts
* to refine cells anisotropically will result in errors.
*
+ *
+ * <h3> Interaction with boundary description </h3>
+ *
+ * Refining and coarsening a distributed triangulation is a complicated
+ * process because cells may have to be migrated from one processor to
+ * another. On a single processor, materializing that part of the global
+ * mesh that we want to store here from what we have stored before therefore
+ * may involve several cycles of refining and coarsening the locally stored
+ * set of cells until we have finally gotten from the previous to the next
+ * triangulation. (This process is described in more detail in the
+ * @ref distributed_paper.) Unfortunately, in this process, some information
+ * can get lost relating to flags that are set by user code and that are
+ * inherited from mother to child cell but that are not moved along with
+ * a cell if that cell is migrated from one processor to another.
+ *
+ * An example are boundary indicators. Assume, for example, that you start
+ * with a single cell that is refined once globally, yielding four children.
+ * If you have four processors, each one owns one cell. Assume now that processor
+ * 1 sets the boundary indicators of the external boundaries of the cell it owns
+ * to 42. Since processor 0 does not own this cell, it doesn't set the boundary
+ * indicators of its ghost cell copy of this cell. Now, assume we do several mesh
+ * refinement cycles and end up with a configuration where suddenly finds itself
+ * as the owner of this cell. If boundary indicator 42 means that we need to
+ * integrate Neumann boundary conditions along this boundary, then processor 0
+ * will forget to do so because it has never set the boundary indicator along
+ * this cell's boundary to 42.
+ *
+ * The way to avoid this dilemma is to make sure that things like setting
+ * boundary indicators or material ids is done immediately
+ * every time a parallel triangulation is refined. This is not necessary
+ * for sequential triangulations because, there, these flags are inherited
+ * from mother to child cell and remain with a cell even if it is refined
+ * and the children are later coarsened again, but this does not hold for
+ * distributed triangulations.
+ *
+ *
* @author Wolfgang Bangerth, Timo Heister 2008, 2009, 2010, 2011
* @ingroup distributed
*/
* children that only exist
* on other processors.
*/
- types::subdomain_id_t locally_owned_subdomain () const;
+ types::subdomain_id locally_owned_subdomain () const;
/**
* Return the number of
* used for the current
* processor.
*/
- types::subdomain_id_t my_subdomain;
+ types::subdomain_id my_subdomain;
/**
* A flag that indicates whether the
* children that only exist
* on other processors.
*/
- types::subdomain_id_t locally_owned_subdomain () const;
+ types::subdomain_id locally_owned_subdomain () const;
/**
* Dummy arrays. This class
* children that only exist
* on other processors.
*/
- types::subdomain_id_t locally_owned_subdomain () const;
+ types::subdomain_id locally_owned_subdomain () const;
/**
* Return the MPI
const unsigned int local_index,
dealii::internal::int2type<1>)
{
- return dof_handler.levels[obj_level]->lines.
+ return dof_handler.levels[obj_level]->dof_object.
get_dof_index (dof_handler,
obj_index,
fe_index,
dealii::internal::int2type<1>,
const unsigned int global_index)
{
- dof_handler.levels[obj_level]->lines.
+ dof_handler.levels[obj_level]->dof_object.
set_dof_index (dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
dealii::internal::int2type<2>)
{
- return dof_handler.levels[obj_level]->quads.
+ return dof_handler.levels[obj_level]->dof_object.
get_dof_index (dof_handler,
obj_index,
fe_index,
dealii::internal::int2type<2>,
const unsigned int global_index)
{
- dof_handler.levels[obj_level]->quads.
+ dof_handler.levels[obj_level]->dof_object.
set_dof_index (dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
dealii::internal::int2type<3>)
{
- return dof_handler.levels[obj_level]->hexes.
+ return dof_handler.levels[obj_level]->dof_object.
get_dof_index (dof_handler,
obj_index,
fe_index,
dealii::internal::int2type<3>,
const unsigned int global_index)
{
- dof_handler.levels[obj_level]->hexes.
+ dof_handler.levels[obj_level]->dof_object.
set_dof_index (dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
const dealii::internal::int2type<1> &)
{
- return dof_handler.levels[obj_level]->lines.
+ return dof_handler.levels[obj_level]->dof_object.
get_dof_index (dof_handler,
obj_index,
fe_index,
const dealii::internal::int2type<1> &,
const unsigned int global_index)
{
- dof_handler.levels[obj_level]->lines.
+ dof_handler.levels[obj_level]->dof_object.
set_dof_index (dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
const dealii::internal::int2type<2> &)
{
- return dof_handler.levels[obj_level]->quads.
+ return dof_handler.levels[obj_level]->dof_object.
get_dof_index (dof_handler,
obj_index,
fe_index,
const dealii::internal::int2type<2> &,
const unsigned int global_index)
{
- dof_handler.levels[obj_level]->quads.
+ dof_handler.levels[obj_level]->dof_object.
set_dof_index (dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
const dealii::internal::int2type<3> &)
{
- return dof_handler.levels[obj_level]->hexes.
+ return dof_handler.levels[obj_level]->dof_object.
get_dof_index (dof_handler,
obj_index,
fe_index,
const dealii::internal::int2type<3> &,
const unsigned int global_index)
{
- dof_handler.levels[obj_level]->hexes.
+ dof_handler.levels[obj_level]->dof_object.
set_dof_index (dof_handler,
obj_index,
fe_index,
const unsigned int fe_index,
const dealii::internal::int2type<1> &)
{
- return dof_handler.levels[obj_level]->lines.fe_index_is_active(dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.fe_index_is_active(dof_handler,
obj_index,
fe_index,
obj_level);
const unsigned int obj_index,
const dealii::internal::int2type<1> &)
{
- return dof_handler.levels[obj_level]->lines.n_active_fe_indices (dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.n_active_fe_indices (dof_handler,
obj_index);
}
const unsigned int n,
const dealii::internal::int2type<1> &)
{
- return dof_handler.levels[obj_level]->lines.nth_active_fe_index (dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.nth_active_fe_index (dof_handler,
obj_level,
obj_index,
n);
const unsigned int fe_index,
const dealii::internal::int2type<2> &)
{
- return dof_handler.levels[obj_level]->quads.fe_index_is_active(dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.fe_index_is_active(dof_handler,
obj_index,
fe_index,
obj_level);
const unsigned int obj_index,
const dealii::internal::int2type<2> &)
{
- return dof_handler.levels[obj_level]->quads.n_active_fe_indices (dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.n_active_fe_indices (dof_handler,
obj_index);
}
const unsigned int n,
const dealii::internal::int2type<2> &)
{
- return dof_handler.levels[obj_level]->quads.nth_active_fe_index (dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.nth_active_fe_index (dof_handler,
obj_level,
obj_index,
n);
const unsigned int fe_index,
const dealii::internal::int2type<3> &)
{
- return dof_handler.levels[obj_level]->hexes.fe_index_is_active(dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.fe_index_is_active(dof_handler,
obj_index,
fe_index,
obj_level);
const unsigned int obj_index,
const dealii::internal::int2type<3> &)
{
- return dof_handler.levels[obj_level]->hexes.n_active_fe_indices (dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.n_active_fe_indices (dof_handler,
obj_index);
}
const unsigned int n,
const dealii::internal::int2type<3> &)
{
- return dof_handler.levels[obj_level]->hexes.nth_active_fe_index (dof_handler,
+ return dof_handler.levels[obj_level]->dof_object.nth_active_fe_index (dof_handler,
obj_level,
obj_index,
n);
* is first discussed in the introduction
* to the step-2 tutorial program.
*
- * The additional optional
- * parameter @p offset allows you
- * to reserve space for a finite
- * number of additional vector
- * entries in the beginning of
- * all discretization vectors, by
- * starting the enumeration of
- * degrees of freedom on the grid
- * at a nonzero value. By
- * default, this value is of
- * course zero.
- *
* A pointer of the transferred
* finite element is
* stored. Therefore, the
* releases the lock of this
* object to the finite element.
*/
- virtual void distribute_dofs (const FiniteElement<dim,spacedim> &fe,
- const unsigned int offset = 0);
+ virtual void distribute_dofs (const FiniteElement<dim,spacedim> &fe);
/**
* After distribute_dofs() with
* consideration.
*/
unsigned int
- n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const;
+ n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const;
/**
* Access to an object informing
template <> unsigned int DoFHandler<1>::n_boundary_dofs () const;
template <> unsigned int DoFHandler<1>::n_boundary_dofs (const FunctionMap &) const;
-template <> unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<types::boundary_id_t> &) const;
+template <> unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<types::boundary_id> &) const;
/* ----------------------- Inline functions ---------------------------------- */
*/
virtual
NumberCache
- distribute_dofs (const unsigned int offset,
- dealii::DoFHandler<dim,spacedim> &dof_handler) const = 0;
+ distribute_dofs (dealii::DoFHandler<dim,spacedim> &dof_handler) const = 0;
/**
* Renumber degrees of freedom as
*/
virtual
NumberCache
- distribute_dofs (const unsigned int offset,
- dealii::DoFHandler<dim,spacedim> &dof_handler) const;
+ distribute_dofs (dealii::DoFHandler<dim,spacedim> &dof_handler) const;
/**
* Renumber degrees of freedom as
*/
virtual
NumberCache
- distribute_dofs (const unsigned int offset,
- dealii::DoFHandler<dim,spacedim> &dof_handler) const;
+ distribute_dofs (dealii::DoFHandler<dim,spacedim> &dof_handler) const;
/**
* Renumber degrees of freedom as
* The object containing dof-indices
* and related access-functions
*/
- DoFObjects<1> lines;
+ DoFObjects<1> dof_object;
/**
* Determine an estimate for the
* The object containing dof-indices
* and related access-functions
*/
- internal::DoFHandler::DoFObjects<2> quads;
+ internal::DoFHandler::DoFObjects<2> dof_object;
/**
* Determine an estimate for the
* The object containing dof-indices
* and related access-functions
*/
- internal::DoFHandler::DoFObjects<3> hexes;
+ internal::DoFHandler::DoFObjects<3> dof_object;
/**
* Determine an estimate for the
const unsigned int version)
{
this->DoFLevel<0>::serialize (ar, version);
- ar & lines;
+ ar & dof_object;
}
const unsigned int version)
{
this->DoFLevel<0>::serialize (ar, version);
- ar & quads;
+ ar & dof_object;
}
const unsigned int version)
{
this->DoFLevel<0>::serialize (ar, version);
- ar & hexes;
+ ar & dof_object;
}
}
}
* preserved, as is the relative
* order within the untagged
* ones.
+ *
+ * @pre The @p selected_dofs
+ * array must have as many elements as
+ * the @p dof_handler has degrees of
+ * freedom.
*/
template <class DH>
void
sort_selected_dofs_back (DH& dof_handler,
const std::vector<bool>& selected_dofs);
+ /**
+ * Sort those degrees of freedom
+ * which are tagged with @p true
+ * in the @p selected_dofs array
+ * on the level #level
+ * to the back of the DoF
+ * numbers. The sorting is
+ * stable, i.e. the relative
+ * order within the tagged
+ * degrees of freedom is
+ * preserved, as is the relative
+ * order within the untagged
+ * ones.
+ *
+ * @pre The @p selected_dofs
+ * array must have as many elements as
+ * the @p dof_handler has degrees of
+ * freedom on the given level.
+ */
+ template <class DH>
+ void
+ sort_selected_dofs_back (DH& dof_handler,
+ const std::vector<bool>& selected_dofs,
+ const unsigned int level);
+
/**
* Computes the renumbering
* vector needed by the
* renumbering on the DoFHandler
* dofs but returns the
* renumbering vector.
+ *
+ * @pre The @p selected_dofs
+ * array must have as many elements as
+ * the @p dof_handler has degrees of
+ * freedom.
*/
template <class DH>
void
const DH& dof_handler,
const std::vector<bool>& selected_dofs);
+ /**
+ * Computes the renumbering
+ * vector on each level
+ * needed by the
+ * sort_selected_dofs_back()
+ * function. Does not perform the
+ * renumbering on the MGDoFHandler
+ * dofs but returns the
+ * renumbering vector.
+ *
+ * @pre The @p selected_dofs
+ * array must have as many elements as
+ * the @p dof_handler has degrees of
+ * freedom on the given level.
+ */
+ template <class DH>
+ void
+ compute_sort_selected_dofs_back (std::vector<unsigned int>& new_dof_indices,
+ const DH& dof_handler,
+ const std::vector<bool>& selected_dofs,
+ const unsigned int level);
+
/**
* Renumber the degrees of
* freedom in a random way.
SparsityPattern &sparsity_pattern,
const ConstraintMatrix &constraints = ConstraintMatrix(),
const bool keep_constrained_dofs = true,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id);
/**
* Locate non-zero entries for
SparsityPattern &sparsity_pattern,
const ConstraintMatrix &constraints = ConstraintMatrix(),
const bool keep_constrained_dofs = true,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id);
/**
* @deprecated This is the old
SparsityPattern &sparsity_pattern,
const ConstraintMatrix &constraints,
const bool keep_constrained_dofs = true,
- const types::subdomain_id_t subdomain_id = numbers::invalid_unsigned_int);
+ const types::subdomain_id subdomain_id = numbers::invalid_unsigned_int);
/**
* This function does the same as
template<typename DH>
void
make_periodicity_constraints (const DH &dof_handler,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
const int direction,
dealii::ConstraintMatrix &constraint_matrix,
const std::vector<bool> &component_mask = std::vector<bool>());
template<typename DH>
void
make_periodicity_constraints (const DH &dof_handler,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
const int direction,
dealii::Tensor<1,DH::space_dimension>
&offset,
extract_boundary_dofs (const DH &dof_handler,
const std::vector<bool> &component_mask,
std::vector<bool> &selected_dofs,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
/**
* This function does the same as the previous one but it
extract_boundary_dofs (const DH &dof_handler,
const std::vector<bool> &component_mask,
IndexSet &selected_dofs,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
/**
* This function is similar to
extract_dofs_with_support_on_boundary (const DH &dof_handler,
const std::vector<bool> &component_mask,
std::vector<bool> &selected_dofs,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
/**
* @name Hanging Nodes
template <class DH>
void
extract_subdomain_dofs (const DH &dof_handler,
- const types::subdomain_id_t subdomain_id,
+ const types::subdomain_id subdomain_id,
std::vector<bool> &selected_dofs);
template <class DH>
void
get_subdomain_association (const DH &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain);
+ std::vector<types::subdomain_id> &subdomain);
/**
* Count how many degrees of freedom are
template <class DH>
unsigned int
count_dofs_with_subdomain_association (const DH &dof_handler,
- const types::subdomain_id_t subdomain);
+ const types::subdomain_id subdomain);
/**
* Count how many degrees of freedom are
template <class DH>
void
count_dofs_with_subdomain_association (const DH &dof_handler,
- const types::subdomain_id_t subdomain,
+ const types::subdomain_id subdomain,
std::vector<unsigned int> &n_dofs_on_subdomain);
/**
template <class DH>
IndexSet
dof_indices_with_subdomain_association (const DH &dof_handler,
- const types::subdomain_id_t subdomain);
+ const types::subdomain_id subdomain);
// @}
/**
* target_component. If this is
* not the case, an assertion is
* thrown. The indices not
- * targetted by target_components
+ * targeted by target_components
* are left untouched.
*/
template <class DH>
void
count_dofs_per_block (const DH &dof,
std::vector<unsigned int> &dofs_per_block,
- std::vector<unsigned int> target_block
+ const std::vector<unsigned int> &target_block
= std::vector<unsigned int>());
/**
template <class DH>
void
map_dof_to_boundary_indices (const DH &dof_handler,
- const std::set<types::boundary_id_t> &boundary_indicators,
+ const std::set<types::boundary_id> &boundary_indicators,
std::vector<unsigned int> &mapping);
/**
* name it in the fashion of the
* STL local typedefs.
*/
- typedef std::map<types::boundary_id_t, const Function<dim>*> type;
+ typedef std::map<types::boundary_id, const Function<dim>*> type;
};
DEAL_II_NAMESPACE_CLOSE
* system_to_component_index()
* returns.
*
- * Only for those
- * spaces that couple the
- * components, for example to
- * make a shape function
- * divergence free, will there be
- * more than one @p true entry.
+ * Only for those spaces that couple the
+ * components, for example to make a
+ * shape function divergence free, will
+ * there be more than one @p true entry.
+ * Elements for which this is true are
+ * called non-primitive (see
+ * @ref GlossPrimitive).
*/
const std::vector<bool> &
get_nonzero_components (const unsigned int i) const;
unsigned int n_dofs_per_object () const;
/**
- * Number of components.
+ * Number of components. See
+ * @ref GlossComponent "the glossary"
+ * for more information.
*/
unsigned int n_components () const;
/**
- * Number of blocks.
+ * Number of blocks. See
+ * @ref GlossBlock "the glossary"
+ * for more information.
*/
unsigned int n_blocks () const;
/**
- * Detailed infromation on block sizes.
+ * Detailed information on block sizes.
*/
const BlockIndices& block_indices() const;
* vectors.
*
* This vector has
- * (dim-1)*GeometryInfo::faces_per_cell
+ * (dim-1)GeometryInfo::faces_per_cell
* entries. The first
- * GeometryInfo<dim>::faces_per_cell
+ * GeometryInfo::faces_per_cell
* contain the vectors in the first
* tangential direction for each
* face; the second set of
- * GeometryInfo<dim>::faces_per_cell
+ * GeometryInfo::faces_per_cell
* entries contain the vectors in the
* second tangential direction (only
* in 3d, since there we have 2
* shall have to be evaluated
* to true.
*/
- SubdomainEqualTo (const types::subdomain_id_t subdomain_id);
+ SubdomainEqualTo (const types::subdomain_id subdomain_id);
/**
* Evaluation operator. Returns
* Stored value to compare the
* subdomain with.
*/
- const types::subdomain_id_t subdomain_id;
+ const types::subdomain_id subdomain_id;
};
* class SubdomainEqualTo
* {
* public:
- * SubdomainEqualTo (const types::subdomain_id_t subdomain_id)
+ * SubdomainEqualTo (const types::subdomain_id subdomain_id)
* : subdomain_id (subdomain_id) {};
*
* template <class Iterator>
* }
*
* private:
- * const types::subdomain_id_t subdomain_id;
+ * const types::subdomain_id subdomain_id;
* };
* @endcode
* Objects like <code>SubdomainEqualTo(3)</code> can then be used as predicates.
* Since comparison between filtered and unfiltered iterators is
* defined, we could as well have let the @p endc variable in the
* last example be of type
- * <code>Triangulation@<dim@>::active_cell_iterator</code> since it is unchanged
+ * Triangulation::active_cell_iterator since it is unchanged
* and its value does not depend on the filter.
*
* @ingroup grid
// ---------------- IteratorFilters::SubdomainEqualTo ---------
inline
- SubdomainEqualTo::SubdomainEqualTo (const types::subdomain_id_t subdomain_id)
+ SubdomainEqualTo::SubdomainEqualTo (const types::subdomain_id subdomain_id)
:
subdomain_id (subdomain_id)
{}
subdivided_hyper_rectangle (Triangulation<dim> &tria,
const std::vector< std::vector<double> > &spacing,
const Point<dim> &p,
- const Table<dim,types::material_id_t> &material_id,
+ const Table<dim,types::material_id> &material_id,
const bool colorize=false);
/**
* these faces are explicitly printed
* in the <tt>write_*</tt> functions;
* all faces with indicator
- * types::internal_face_boundary_id are
+ * numbers::internal_face_boundary_id are
* interior ones and an indicator with
* value zero for faces at the boundary
* are considered default.
* these lines are explicitly printed
* in the <tt>write_*</tt> functions;
* all lines with indicator
- * types::internal_face_boundary_id are
+ * numbers::internal_face_boundary_id are
* interior ones and an indicator with
* value zero for faces at the boundary
* are considered default.
const Point<spacedim> &p);
/**
+ * @deprecated This function might
+ * be acceptable to find a patch
+ * around a single vertex, but it
+ * wastes resources creating
+ * patches around all vertices. The
+ * function mail fail on
+ * anisotropic meshes, and an easy
+ * fix is not obvious. Therefore,
+ * it should be replaced by a
+ * function which computes all
+ * active vertex patches by looping
+ * over cells.
+ *
* Find and return a vector of
* iterators to active cells that
* surround a given vertex @p vertex.
template <int dim, int spacedim>
void
get_subdomain_association (const Triangulation<dim, spacedim> &triangulation,
- std::vector<types::subdomain_id_t> &subdomain);
+ std::vector<types::subdomain_id> &subdomain);
/**
* Count how many cells are uniquely
template <int dim, int spacedim>
unsigned int
count_cells_with_subdomain_association (const Triangulation<dim, spacedim> &triangulation,
- const types::subdomain_id_t subdomain);
+ const types::subdomain_id subdomain);
/**
* Given two mesh containers
typename Container<dim,spacedim>::face_iterator>
extract_boundary_mesh (const Container<dim,spacedim> &volume_mesh,
Container<dim-1,spacedim> &surface_mesh,
- const std::set<types::boundary_id_t> &boundary_ids
- = std::set<types::boundary_id_t>());
+ const std::set<types::boundary_id> &boundary_ids
+ = std::set<types::boundary_id>());
/**
std::map<CellIterator, CellIterator>
collect_periodic_cell_pairs (const CellIterator &begin,
const typename identity<CellIterator>::type &end,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
int direction,
const dealii::Tensor<1,CellIterator::AccessorType::space_dimension>
&offset = dealii::Tensor<1,CellIterator::AccessorType::space_dimension>());
template<typename DH>
std::map<typename DH::cell_iterator, typename DH::cell_iterator>
collect_periodic_cell_pairs (const DH &dof_handler,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
int direction,
const dealii::Tensor<1,DH::space_dimension>
&offset = Tensor<1,DH::space_dimension>());
*/
union
{
- types::boundary_id_t boundary_id;
- types::material_id_t material_id;
+ types::boundary_id boundary_id;
+ types::material_id material_id;
};
};
* number describing the boundary condition to hold on this part of the
* boundary. The triangulation creation function gives lines not in this
* list either the boundary indicator zero (if on the boundary) or
- * types::internal_face_boundary_id (if in the interior). Explicitely giving a
- * line the indicator types::internal_face_boundary_id will result in an error, as well as giving
+ * numbers::internal_face_boundary_id (if in the interior). Explicitely giving a
+ * line the indicator numbers::internal_face_boundary_id will result in an error, as well as giving
* an interior line a boundary indicator.
*
* @ingroup grid
* data is spread over quite a lot of arrays and other places. However,
* there are ways powerful enough to work on these data structures
* without knowing their exact relations. This is done through the
- * concept of iterators (see the STL documentation and TriaRawIterator).
+ * concept of iterators (see the STL documentation and TriaIterator).
* In order to make things as easy and dimension independent as possible,
* use of class local typedefs is made, see below.
*
* The Triangulation class provides iterator which enable looping over all
- * lines, cells, etc without knowing the exact representation used to
+ * cells without knowing the exact representation used to
* describe them. Their names are typedefs imported from the Iterators
* class (thus making them local types to this class) and are as follows:
*
* <ul>
- * <li> @p raw_line_iterator: loop over all lines, used or not (declared for
- * all dimensions).
- *
- * <li> @p line_iterator: loop over all used lines (declared for all dimensions).
- *
- * <li> @p active_line_iterator: loop over all active lines (declared for all
- * dimensions).
- *
- * <li> @p raw_quad_iterator: loop over all quads, used or not (declared only
- * for <tt>dim>=2</tt>).
- *
- * <li> @p quad_iterator: loop over all quads (declared only for @p dim>=2).
- *
- * <li> @p active_quad_iterator: loop over all active quads (declared only for
- * @p dim>=2).
+ * <li> <tt>cell_iterator</tt>: loop over all cells used in the Triangulation
+ * <li> <tt>active_cell_iterator</tt>: loop over all active cells
* </ul>
*
- * Additionaly, for @p dim==1, the following identities hold:
+ * For <tt>dim==1</tt>, these iterators are mapped as follows:
* @verbatim
- * typedef raw_line_iterator raw_cell_iterator;
* typedef line_iterator cell_iterator;
* typedef active_line_iterator active_cell_iterator;
* @endverbatim
- * while for @p dim==2
+ * while for @p dim==2 we have the additional face iterator:
* @verbatim
- * typedef quad_line_iterator raw_cell_iterator;
* typedef quad_iterator cell_iterator;
* typedef active_quad_iterator active_cell_iterator;
*
- * typedef raw_line_iterator raw_face_iterator;
- * typedef line_iterator face_iterator;
+* typedef line_iterator face_iterator;
* typedef active_line_iterator active_face_iterator;
* @endverbatim
*
- * By using the cell iterators, you can write code nearly independent of
+ * By using the cell iterators, you can write code independent of
* the spatial dimension. The same applies for substructure iterators,
* where a substructure is defined as a face of a cell. The face of a
* cell is a vertex in 1D and a line in 2D; however, vertices are
* handled in a different way and therefore lines have no faces.
*
- * The Triangulation class offers functions like @p begin_active which gives
+ * The Triangulation class offers functions like begin_active() which gives
* you an iterator to the first active cell. There are quite a lot of functions
* returning iterators. Take a look at the class doc to get an overview.
*
* more information. The mentioned class uses the interface described
* directly below to transfer the data into the triangulation.
*
- * <li> Explicitely creating a triangulation: you can create a triangulation
+ * <li> Explicitly creating a triangulation: you can create a triangulation
* by providing a list of vertices and a list of cells. Each such cell
* consists of a vector storing the indices of the vertices of this cell
* in the vertex list. To see how this works, you can take a look at the
* quite a complex task. For example in 2D, we have to create
* lines between vertices (but only once, though there are two
* cells which link these two vertices) and we have to create
- * neighborship information. Grids being read in should
+ * neighborhood information. Grids being read in should
* therefore not be too large, reading refined grids would be
* inefficient (although there is technically no problem in
* reading grids with several 10.000 or 100.000 cells; the
* vertex indices for each cell have to be in a defined order, see the
* documentation of GeometryInfo<dim>. In one dimension, the first vertex
* index must refer to that vertex with the lower coordinate value. In 2D
- * and 3D, the correspondoing conditions are not easy to verify and no
+ * and 3D, the corresponding conditions are not easy to verify and no
* full attempt to do so is made.
* If you violate this condition, you may end up with matrix entries
* having the wrong sign (clockwise vertex numbering, which results in
* There are more subtle conditions which must be imposed upon
* the vertex numbering within cells. They do not only hold for
* the data read from an UCD or any other input file, but also
- * for the data passed to the
- * <tt>Triangulation<dim,spacedim>::create_triangulation ()</tt>
- * function. See the documentation for the GridIn class
+ * for the data passed to create_triangulation().
+ * See the documentation for the GridIn class
* for more details on this, and above all to the
* GridReordering class that explains many of the
* problems and an algorithm to reorder cells such that they
* parallel. It may be conceivable to implement a clean-up in the copy
* operation, which eliminates holes of unused memory, re-joins
* scattered data and so on. In principle this would be a useful
- * operation but guaranteeing some parallelity in the two triangulations
+ * operation but guaranteeing some parallelism in the two triangulations
* seems more important since usually data will have to be transferred
* between the grids.
* </ul>
*
* Finally, there is a special function for folks who like bad grids:
- * <tt>Triangulation<dim,spacedim>::distort_random</tt>. It moves all the vertices in the
+ * distort_random(). It moves all the vertices in the
* grid a bit around by a random value, leaving behind a distorted mesh.
* Note that you should apply this function to the final mesh, since
* refinement smoothes the mesh a bit.
* function call <tt>i->set_refine_flag()</tt> marks the respective cell for
* refinement. Marking non-active cells results in an error.
*
- * After all the cells you wanted to mark for refinement, call the
- * @p execute_coarsening_and_refinement function to actually perform
+ * After all the cells you wanted to mark for refinement, call
+ * execute_coarsening_and_refinement() to actually perform
* the refinement. This function itself first calls the
* @p prepare_coarsening_and_refinement function to regularize the resulting
* triangulation: since a face between two adjacent cells may only
* step than one needed by the finite element method.
*
* To coarsen a grid, the same way as above is possible by using
- * <tt>i->set_coarsen_flag</tt> and calling @p execute_coarsening_and_refinement.
+ * <tt>i->set_coarsen_flag</tt> and calling execute_coarsening_and_refinement().
*
* The reason for first coarsening, then refining is that the
* refinement usually adds some additional cells to keep the triangulation
* towards the boundary or always at the center (see the example programs,
* they do exactly these things). There are more advanced functions,
* however, which are more suitable for automatic generation of hierarchical
- * grids in the context of a-posteriori error estimation and adaptive finite
+ * grids in the context of a posteriori error estimation and adaptive finite
* elements. These functions can be found in the GridRefinement class.
*
*
* <h3>Smoothing of a triangulation</h3>
*
* Some degradation of approximation properties has been observed
- * for grids which are too unstructured. Therefore, the
- * @p prepare_coarsening_and_refinement function which is automatically called
- * by the @p execute_coarsening_and_refinement function can do some
+ * for grids which are too unstructured. Therefore,
+ * prepare_coarsening_and_refinement() which is automatically called
+ * by execute_coarsening_and_refinement() can do some
* smoothing of the triangulation. Note that mesh smoothing is only
* done for two or more space dimensions, no smoothing is available
* at present for one spatial dimension. In the following, let
- * <tt>execute_*</tt> stand for @p execute_coarsening_and_refinement.
+ * <tt>execute_*</tt> stand for execute_coarsening_and_refinement().
*
* For the purpose of smoothing, the
* Triangulation constructor takes an argument specifying whether a
* and once with smoothing, since then in some refinement steps would need
* to be refined twice.
*
- * The parameter taken by the constructor is an integer which may be composed
- * bitwise by the constants defined in the <tt>enum MeshSmoothing</tt>. The meaning
- * of these constants is explained in the following:
- * <ul>
- * <li> @p limit_level_difference_at_vertices:
- * It can be shown, that degradation of approximation occurs if the
- * triangulation contains vertices which are member of cells with levels
- * differing by more than one. One such example is the following:
- *
- * @image html limit_level_difference_at_vertices.png ""
- *
- * It would seem that in two space dimensions, the maximum jump in levels
- * between cells sharing a common vertex is two (as in the example
- * above). However, this is not true if more than four cells meet at a
- * vertex. It is not uncommon that a coarse (initial) mesh contains
- * vertices at which six or even eight cells meet, when small features of
- * the domain have to be resolved even on the coarsest mesh. In that case,
- * the maximum difference in levels is three or four, respectively. The
- * problem gets even worse in three space dimensions.
- *
- * Looking at an interpolation of the second derivative of the finite
- * element solution (assuming bilinear finite elements), one sees that the
- * numerical solution is almost totally wrong, compared with the true
- * second derivative. Indeed, on regular meshes, there exist sharp
- * estimations that the $H^2$-error is only $O(1)$, so we should not be
- * surprised; however, the numerical solution may show a value for the
- * second derivative which may be a factor of ten away from the true
- * value. These problems are located on the small cell adjacent to the
- * center vertex, where cells of non-subsequent levels meet, as well as on
- * the upper and right neighbor of this cell (but with a less degree of
- * deviation from the true value).
- *
- * If the smoothing indicator given to the constructor contains the bit for
- * @p limit_level_difference_at_vertices, situations as the above one are
- * eliminated by also marking the lower left cell for refinement.
- *
- * In case of anisotropic refinement, the level of a cell is not linked to
- * the refinement of a cell as directly as in case of isotropic
- * refinement. Furthermore, a cell can be strongly refined in one
- * direction and not or at least much less refined in another. Therefore,
- * it is very difficult to decide, which cases should be excluded from the
- * refinement process. As a consequence, when using anisotropic
- * refinement, the @p limit_level_difference_at_vertices flag must not be
- * set. On the other hand, the implementation of multigrid methods in
- * deal.II requires that this bit be set.
- *
- * <li> @p eliminate_unrefined_islands:
- * Single cells which are not refined and are surrounded by cells which are
- * refined usually also lead to a sharp decline in approximation properties
- * locally. The reason is that the nodes on the faces between unrefined and
- * refined cells are not real degrees of freedom but carry constraints. The
- * patch without additional degrees of freedom is thus significantly larger
- * then the unrefined cell itself. If in the parameter passed to the
- * constructor the bit for @p eliminate_unrefined_islands is set, all cells
- * which are not flagged for refinement but which are surrounded by more
- * refined cells than unrefined cells are flagged for refinement. Cells
- * which are not yet refined but flagged for that are accounted for the
- * number of refined neighbors. Cells on the boundary are not accounted for
- * at all. An unrefined island is, by this definition
- * also a cell which (in 2D) is surrounded by three refined cells and one
- * unrefined one, or one surrounded by two refined cells, one unrefined one
- * and is at the boundary on one side. It is thus not a true island, as the
- * name of the flag may indicate. However, no better name came to mind to
- * the author by now.
- *
- * <li> <tt>eliminate_refined_*_islands</tt>:
- * This algorithm seeks for isolated cells which are refined or flagged
- * for refinement. This definition is unlike that for
- * @p eliminate_unrefined_islands, which would mean that an island is
- * defined as a cell which
- * is refined but more of its neighbors are not refined than are refined.
- * For example, in 2D, a cell's refinement would be reverted if at most
- * one of its neighbors is also refined (or refined but flagged for
- * coarsening).
- *
- * The reason for the change in definition of an island is, that this
- * option would be a bit dangerous, since if you consider a
- * chain of refined cells (e.g. along a kink in the solution), the cells
- * at the two ends would be coarsened, after which the next outermost cells
- * would need to be coarsened. Therefore, only one loop of flagging cells
- * like this could be done to avoid eating up the whole chain of refined
- * cells (`chain reaction'...).
- *
- * This algorithm also takes into account cells which are not actually
- * refined but are flagged for refinement. If necessary, it takes away the
- * refinement flag.
- *
- * Actually there are two versions of this flag,
- * @p eliminate_refined_inner_islands and @p eliminate_refined_boundary_islands.
- * There first eliminates islands defined by the definition above which are
- * in the interior of the domain, while the second eliminates only those
- * islands if the cell is at the boundary. The reason for this split of
- * flags is that one often wants to eliminate such islands in the interior
- * while those at the boundary may well be wanted, for example if one
- * refines the mesh according to a criterion associated with a boundary
- * integral or if one has rough boundary data.
- *
- * <li> @p do_not_produce_unrefined_islands:
- * This flag prevents the occurrence of unrefined islands. In more detail:
- * It prohibits the coarsening of a cell if 'most of the neighbors' will
- * be refined after the step.
- *
- * <li> @p patch_level_1:
- * A triangulation of patch level 1 consists of patches, i.e. of
- * cells that are refined once. This flag ensures that a mesh of
- * patch level 1 is still of patch level 1 after coarsening and
- * refinement. It is, however, the user's responsibility to ensure
- * that the mesh is of patch level 1 before calling
- * execute_coarsening_and_refinement the first time. The easiest
- * way to achieve this is by calling global_refine(1) straight
- * after creation of the triangulation. It follows that if at
- * least one of the children of a cell is or will be refined than
- * all children need to be refined. If the @p patch_level_1 flag
- * is set, than the flags @p eliminate_unrefined_islands, @p
- * eliminate_refined_inner_islands and @p
- * eliminate_refined_boundary_islands will be ignored as they will
- * be fulfilled automatically.
- *
- * <li> @p coarsest_level_1:
- * Each coarse grid cell is refined at least once, i.e. the
- * triangulation might have active cells on level 1 but not on
- * level 0. This flag ensures that a mesh which has
- * coarsest_level_1 has still coarsest_level_1 after coarsening
- * and refinement. It is, however, the user's responsibility to
- * ensure that the mesh has coarsest_level_1 before calling
- * execute_coarsening_and_refinement the first time. The easiest
- * way to achieve this is by calling global_refine(1) straight
- * after creation of the triangulation. It follows that active
- * cells on level 1 may not be coarsenend.
- *
- * The main use of this flag is to ensure that each cell has at least one
- * neighbor in each coordinate direction (i.e. each cell has at least a
- * left or right, and at least an upper or lower neighbor in 2d). This is
- * a necessary precondition for some algorihms that compute finite
- * differences between cells. The DerivativeApproximation class is one of
- * these algorithms that require that a triangulation is coarsest_level_1
- * unless all cells already have at least one neighbor in each coordinate
- * direction on the coarsest level.
+ * The parameter taken by the constructor is an integer which may be
+ * composed bitwise by the constants defined in the enum
+ * #MeshSmoothing (see there for the possibilities).
*
- * <li> @p smoothing_on_refinement:
- * This flag sums up all smoothing algorithms which may be performed upon
- * refinement by flagging some more cells for refinement.
- *
- * <li> @p smoothing_on_coarsening:
- * This flag sums up all smoothing algorithms which may be performed upon
- * coarsening by flagging some more cells for coarsening.
- *
- * <li> @p maximum_smoothing:
- * This flag includes all the above ones and therefore combines all
- * smoothing algorithms implemented.
- *
- * <li> @p allow_anisotropic_smoothing:
- * This flag is not included in @p maximum_smoothing. The flag is
- * concerned with the following case: consider the case that an
- * unrefined and a refined cell share a common face and that one
- * of the children of the refined cell along the common face is
- * flagged for further refinement. In that case, the resulting
- * mesh would have more than one hanging node along one or more of
- * the edges of the triangulation, a situation that is not
- * allowed. Consequently, in order to perform the refinement, the
- * coarser of the two original cells is also going to be refined.
- *
- * However, in many cases it is sufficient to refine the coarser
- * of the two original cells in an anisotropic way to avoid the
- * case of multiple hanging vertices on a single edge. Doing only
- * the minimal anisotropic refinement can save cells and degrees
- * of freedom. By specifying this flag, the library can produce
- * these anisotropic refinements.
- *
- * The flag is not included by default since it may lead to
- * anisotropically refined meshes even though no cell has ever
- * been refined anisotropically explicitly by a user command. This
- * surprising fact may lead to programs that do the wrong thing
- * since they are not written for the additional cases that can
- * happen with anisotropic meshes, see the discussion in the
- * introduction to step-30.
- *
- * <li> @p none:
- * Select no smoothing at all.
- * </ul>
- *
- * @note While it is possible to pass all of the flags discussed above to
+ * @note While it is possible to pass all of the flags in #MeshSmoothing to
* objects of type parallel::distributed::Triangulation, it is not always
* possible to honor all of these smoothing options if they would require
* knowledge of refinement/coarsening flags on cells not locally owned by
* use is like the material id of cells).
* Boundary indicators may be in the range from zero to
- * types::internal_face_boundary_id-1. The value
- * types::internal_face_boundary_id is reserved to denote interior lines (in 2D)
+ * numbers::internal_face_boundary_id-1. The value
+ * numbers::internal_face_boundary_id is reserved to denote interior lines (in 2D)
* and interior lines and quads (in 3D), which do not have a
* boundary indicator. This way, a program can easily
* determine, whether such an object is at the boundary or not.
- * Material indicators may be in the range from zero to types::invalid_material_id-1.
+ * Material indicators may be in the range from zero to numbers::invalid_material_id-1.
*
* Lines in two dimensions and quads in three dimensions inherit their
* boundary indicator to their children upon refinement. You should therefore
*/
enum MeshSmoothing
{
+/**
+ * No mesh smoothing at all, except that meshes have to remain one-irregular.
+ */
none = 0x0,
+/**
+ * It can be shown, that degradation of approximation occurs if the
+ * triangulation contains vertices which are member of cells with levels
+ * differing by more than one. One such example is the following:
+ *
+ * @image html limit_level_difference_at_vertices.png ""
+ *
+ * It would seem that in two space dimensions, the maximum jump in levels
+ * between cells sharing a common vertex is two (as in the example
+ * above). However, this is not true if more than four cells meet at a
+ * vertex. It is not uncommon that a coarse (initial) mesh contains
+ * vertices at which six or even eight cells meet, when small features of
+ * the domain have to be resolved even on the coarsest mesh. In that case,
+ * the maximum difference in levels is three or four, respectively. The
+ * problem gets even worse in three space dimensions.
+ *
+ * Looking at an interpolation of the second derivative of the finite
+ * element solution (assuming bilinear finite elements), one sees that the
+ * numerical solution is almost totally wrong, compared with the true
+ * second derivative. Indeed, on regular meshes, there exist sharp
+ * estimations that the H<sup>2</sup>-error is only of order one, so we should not be
+ * surprised; however, the numerical solution may show a value for the
+ * second derivative which may be a factor of ten away from the true
+ * value. These problems are located on the small cell adjacent to the
+ * center vertex, where cells of non-subsequent levels meet, as well as on
+ * the upper and right neighbor of this cell (but with a less degree of
+ * deviation from the true value).
+ *
+ * If the smoothing indicator given to the constructor contains the bit for
+ * #limit_level_difference_at_vertices, situations as the above one are
+ * eliminated by also marking the lower left cell for refinement.
+ *
+ * In case of anisotropic refinement, the level of a cell is not linked to
+ * the refinement of a cell as directly as in case of isotropic
+ * refinement. Furthermore, a cell can be strongly refined in one
+ * direction and not or at least much less refined in another. Therefore,
+ * it is very difficult to decide, which cases should be excluded from the
+ * refinement process. As a consequence, when using anisotropic
+ * refinement, the #limit_level_difference_at_vertices flag must not be
+ * set. On the other hand, the implementation of multigrid methods in
+ * deal.II requires that this bit be set.
+ */
limit_level_difference_at_vertices = 0x1,
- eliminate_unrefined_islands = 0x2,
+/**
+ * Single cells which are not refined and are surrounded by cells which are
+ * refined usually also lead to a sharp decline in approximation properties
+ * locally. The reason is that the nodes on the faces between unrefined and
+ * refined cells are not real degrees of freedom but carry constraints. The
+ * patch without additional degrees of freedom is thus significantly larger
+ * then the unrefined cell itself. If in the parameter passed to the
+ * constructor the bit for #eliminate_unrefined_islands is set, all cells
+ * which are not flagged for refinement but which are surrounded by more
+ * refined cells than unrefined cells are flagged for refinement. Cells
+ * which are not yet refined but flagged for that are accounted for the
+ * number of refined neighbors. Cells on the boundary are not accounted for
+ * at all. An unrefined island is, by this definition
+ * also a cell which (in 2D) is surrounded by three refined cells and one
+ * unrefined one, or one surrounded by two refined cells, one unrefined one
+ * and is at the boundary on one side. It is thus not a true island, as the
+ * name of the flag may indicate. However, no better name came to mind to
+ * the author by now.
+ */
+ eliminate_unrefined_islands = 0x2,
+/**
+ * A triangulation of patch level 1 consists of patches, i.e. of
+ * cells that are refined once. This flag ensures that a mesh of
+ * patch level 1 is still of patch level 1 after coarsening and
+ * refinement. It is, however, the user's responsibility to ensure
+ * that the mesh is of patch level 1 before calling
+ * Triangulation::execute_coarsening_and_refinement() the first time. The easiest
+ * way to achieve this is by calling global_refine(1) straight
+ * after creation of the triangulation. It follows that if at
+ * least one of the children of a cell is or will be refined than
+ * all children need to be refined. If the #patch_level_1 flag
+ * is set, than the flags #eliminate_unrefined_islands,
+ * #eliminate_refined_inner_islands and
+ * #eliminate_refined_boundary_islands will be ignored as they will
+ * be fulfilled automatically.
+ */
patch_level_1 = 0x4,
+/**
+ * Each coarse grid cell is refined at least once, i.e. the
+ * triangulation might have active cells on level 1 but not on
+ * level 0. This flag ensures that a mesh which has
+ * coarsest_level_1 has still coarsest_level_1 after coarsening
+ * and refinement. It is, however, the user's responsibility to
+ * ensure that the mesh has coarsest_level_1 before calling
+ * execute_coarsening_and_refinement the first time. The easiest
+ * way to achieve this is by calling global_refine(1) straight
+ * after creation of the triangulation. It follows that active
+ * cells on level 1 may not be coarsenend.
+ *
+ * The main use of this flag is to ensure that each cell has at least one
+ * neighbor in each coordinate direction (i.e. each cell has at least a
+ * left or right, and at least an upper or lower neighbor in 2d). This is
+ * a necessary precondition for some algorihms that compute finite
+ * differences between cells. The DerivativeApproximation class is one of
+ * these algorithms that require that a triangulation is coarsest_level_1
+ * unless all cells already have at least one neighbor in each coordinate
+ * direction on the coarsest level.
+ */
coarsest_level_1 = 0x8,
-
+/**
+ * This flag is not included in @p maximum_smoothing. The flag is
+ * concerned with the following case: consider the case that an
+ * unrefined and a refined cell share a common face and that one
+ * of the children of the refined cell along the common face is
+ * flagged for further refinement. In that case, the resulting
+ * mesh would have more than one hanging node along one or more of
+ * the edges of the triangulation, a situation that is not
+ * allowed. Consequently, in order to perform the refinement, the
+ * coarser of the two original cells is also going to be refined.
+ *
+ * However, in many cases it is sufficient to refine the coarser
+ * of the two original cells in an anisotropic way to avoid the
+ * case of multiple hanging vertices on a single edge. Doing only
+ * the minimal anisotropic refinement can save cells and degrees
+ * of freedom. By specifying this flag, the library can produce
+ * these anisotropic refinements.
+ *
+ * The flag is not included by default since it may lead to
+ * anisotropically refined meshes even though no cell has ever
+ * been refined anisotropically explicitly by a user command. This
+ * surprising fact may lead to programs that do the wrong thing
+ * since they are not written for the additional cases that can
+ * happen with anisotropic meshes, see the discussion in the
+ * introduction to step-30.
+ */
allow_anisotropic_smoothing = 0x10,
-
+/**
+ * This algorithm seeks for isolated cells which are refined or flagged
+ * for refinement. This definition is unlike that for
+ * #eliminate_unrefined_islands, which would mean that an island is
+ * defined as a cell which
+ * is refined but more of its neighbors are not refined than are refined.
+ * For example, in 2D, a cell's refinement would be reverted if at most
+ * one of its neighbors is also refined (or refined but flagged for
+ * coarsening).
+ *
+ * The reason for the change in definition of an island is, that this
+ * option would be a bit dangerous, since if you consider a
+ * chain of refined cells (e.g. along a kink in the solution), the cells
+ * at the two ends would be coarsened, after which the next outermost cells
+ * would need to be coarsened. Therefore, only one loop of flagging cells
+ * like this could be done to avoid eating up the whole chain of refined
+ * cells (`chain reaction'...).
+ *
+ * This algorithm also takes into account cells which are not actually
+ * refined but are flagged for refinement. If necessary, it takes away the
+ * refinement flag.
+ *
+ * Actually there are two versions of this flag,
+ * #eliminate_refined_inner_islands and #eliminate_refined_boundary_islands.
+ * There first eliminates islands defined by the definition above which are
+ * in the interior of the domain, while the second eliminates only those
+ * islands if the cell is at the boundary. The reason for this split of
+ * flags is that one often wants to eliminate such islands in the interior
+ * while those at the boundary may well be wanted, for example if one
+ * refines the mesh according to a criterion associated with a boundary
+ * integral or if one has rough boundary data.
+ */
eliminate_refined_inner_islands = 0x100,
+/**
+ * The result of this flag is very similar to
+ * #eliminate_refined_inner_islands. See the documentation there.
+ */
eliminate_refined_boundary_islands = 0x200,
+/**
+ * This flag prevents the occurrence of unrefined islands. In more detail:
+ * It prohibits the coarsening of a cell if 'most of the neighbors' will
+ * be refined after the step.
+ */
do_not_produce_unrefined_islands = 0x400,
+/**
+ * This flag sums up all smoothing algorithms which may be performed upon
+ * refinement by flagging some more cells for refinement.
+ */
smoothing_on_refinement = (limit_level_difference_at_vertices |
eliminate_unrefined_islands),
+/**
+ * This flag sums up all smoothing algorithms which may be performed upon
+ * coarsening by flagging some more cells for coarsening.
+ */
smoothing_on_coarsening = (eliminate_refined_inner_islands |
eliminate_refined_boundary_islands |
do_not_produce_unrefined_islands),
+/**
+ * This flag includes all the above ones and therefore combines all
+ * smoothing algorithms implemented with the exception of
+ * anisotropic smoothening.
+ */
maximum_smoothing = 0xffff ^ allow_anisotropic_smoothing
};
-
+ /**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ */
typedef TriaRawIterator <CellAccessor<dim,spacedim> > raw_cell_iterator;
typedef TriaIterator <CellAccessor<dim,spacedim> > cell_iterator;
typedef TriaActiveIterator<CellAccessor<dim,spacedim> > active_cell_iterator;
+ /**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ */
typedef TriaRawIterator <TriaAccessor<dim-1, dim, spacedim> > raw_face_iterator;
typedef TriaIterator <TriaAccessor<dim-1, dim, spacedim> > face_iterator;
typedef TriaActiveIterator<TriaAccessor<dim-1, dim, spacedim> > active_face_iterator;
+ /**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ */
typedef typename IteratorSelector::raw_line_iterator raw_line_iterator;
typedef typename IteratorSelector::line_iterator line_iterator;
typedef typename IteratorSelector::active_line_iterator active_line_iterator;
+ /**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ */
typedef typename IteratorSelector::raw_quad_iterator raw_quad_iterator;
typedef typename IteratorSelector::quad_iterator quad_iterator;
typedef typename IteratorSelector::active_quad_iterator active_quad_iterator;
- typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator;
+ /**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ */
+ typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator;
typedef typename IteratorSelector::hex_iterator hex_iterator;
typedef typename IteratorSelector::active_hex_iterator active_hex_iterator;
* boundary, for instance the material id
* in a UCD input file. They are not
* necessarily consecutive but must be in
- * the range 0-(types::boundary_id_t-1).
+ * the range 0-(types::boundary_id-1).
* Material IDs on boundaries are also
* called boundary indicators and are
* accessed with accessor functions
*
* @ingroup boundary
*/
- void set_boundary (const types::boundary_id_t number,
+ void set_boundary (const types::boundary_id number,
const Boundary<dim,spacedim> &boundary_object);
/**
*
* @ingroup boundary
*/
- void set_boundary (const types::boundary_id_t number);
+ void set_boundary (const types::boundary_id number);
/**
* Return a constant reference to
*
* @ingroup boundary
*/
- const Boundary<dim,spacedim> & get_boundary (const types::boundary_id_t number) const;
+ const Boundary<dim,spacedim> & get_boundary (const types::boundary_id number) const;
/**
* Returns a vector containing
*
* @ingroup boundary
*/
- std::vector<types::boundary_id_t> get_boundary_indicators() const;
+ std::vector<types::boundary_id> get_boundary_indicators() const;
/**
* Copy a triangulation. This
*/
/*@{*/
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Iterator to the first cell, used
* or not, on level @p level. If a level
* has no cells, a past-the-end iterator
cell_iterator end (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return a raw iterator which is the first
* iterator not on level. If @p level is
* the last level, then this returns
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last cell, used or not.
*
raw_cell_iterator last_raw () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last cell of the level @p level, used
* or not.
*/
/*@{*/
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Iterator to the first face, used
* or not. As faces have no level,
* no argument can be given.
raw_face_iterator end_face () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return a raw iterator which is past
* the end. This is the same as
* <tt>end()</tt> and is only for
active_face_iterator end_active_face () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last face, used or not.
*
*/
/*@{*/
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Iterator to the first line, used or
* not, on level @p level. If a level
* has no lines, a past-the-end iterator
line_iterator end_line (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return a raw iterator which is the
* first iterator not on level. If @p
* level is the last level, then this
active_line_iterator end_active_line (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last line, used or not.
*/
last_raw_line () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last line of the level @p level, used
* or not.
/*@{
*/
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Iterator to the first quad, used or
* not, on the given level. If a level
* has no quads, a past-the-end iterator
quad_iterator end_quad (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return a raw iterator which is the
* first iterator not on level. If @p
* level is the last level, then this
active_quad_iterator end_active_quad (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last quad, used or not.
*/
last_raw_quad () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last quad of the level @p level, used
* or not.
/*@{
*/
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Iterator to the first hex, used
* or not, on level @p level. If a level
* has no hexs, a past-the-end iterator
hex_iterator end_hex (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return a raw iterator which is the first
* iterator not on level. If @p level is
* the last level, then this returns
active_hex_iterator end_active_hex (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last hex, used or not.
*/
raw_hex_iterator last_raw_hex () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return an iterator pointing to the
* last hex of the level @p level, used
* or not.
*/
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Total Number of lines, used or
* unused.
*/
unsigned int n_raw_lines () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Number of lines, used or
* unused, on the given level.
*/
unsigned int n_active_lines (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Total number of quads, used or
* unused.
*/
unsigned int n_raw_quads () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Number of quads, used or
* unused, on the given level.
*/
unsigned int n_active_quads (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Total number of hexs, used or
* unused.
*/
unsigned int n_raw_hexs () const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Number of hexs, used or
* unused, on the given level.
*/
unsigned int n_active_hexs(const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Number of cells, used or
* unused, on the given level.
*/
unsigned int n_active_cells (const unsigned int level) const;
/**
+ * @deprecated The use of raw iterators is highly disencouraged and they might go away in future releases
+ *
* Return total number of faces,
* used or not. In 2d, the result
* equals n_raw_lines(), while in 3d it
* of those cells that are owned
* by the current processor.
*/
- virtual types::subdomain_id_t locally_owned_subdomain () const;
+ virtual types::subdomain_id locally_owned_subdomain () const;
/*@}*/
/**
* objects, which are not
* of type StraightBoundary.
*/
- std::map<types::boundary_id_t, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > > boundary;
+ std::map<types::boundary_id, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > > boundary;
/**
* Flag indicating whether
* TriaAccessor::set_boundary_indicator)
* were not a pointer.
*/
- std::map<unsigned int, types::boundary_id_t> *vertex_to_boundary_id_map_1d;
+ std::map<unsigned int, types::boundary_id> *vertex_to_boundary_id_map_1d;
/**
* A map that correlates each refinement listener that has been added
* object.
*
* If the return value is the special
- * value types::internal_face_boundary_id,
+ * value numbers::internal_face_boundary_id,
* then this object is in the
* interior of the domain.
*/
- types::boundary_id_t boundary_indicator () const;
+ types::boundary_id boundary_indicator () const;
/**
* Set the boundary indicator.
* (a face not at the boundary of the
* domain), or set set the boundary
* indicator of an exterior face to
- * types::internal_face_boundary_id
+ * numbers::internal_face_boundary_id
* (this value is reserved for another
* purpose). Algorithms may not work or
* produce very confusing results if
* boundary cells have a boundary
- * indicator of types::internal_face_boundary_id
+ * indicator of numbers::internal_face_boundary_id
* or if interior cells have boundary
- * indicators other than types::internal_face_boundary_id.
+ * indicators other than numbers::internal_face_boundary_id.
* Unfortunately, the current object
* has no means of finding out whether it
* really is at the boundary of the
*
* @ingroup boundary
*/
- void set_boundary_indicator (const types::boundary_id_t) const;
+ void set_boundary_indicator (const types::boundary_id) const;
/**
* Do as set_boundary_indicator()
*
* @ingroup boundary
*/
- void set_all_boundary_indicators (const types::boundary_id_t) const;
+ void set_all_boundary_indicators (const types::boundary_id) const;
/**
* Return whether this object is at the
* boundary indicator one.
*
* If the return value is the special
- * value types::internal_face_boundary_id,
+ * value numbers::internal_face_boundary_id,
* then this object is in the
* interior of the domain.
*/
- types::boundary_id_t boundary_indicator () const;
+ types::boundary_id boundary_indicator () const;
/**
* @name Orientation of sub-objects
* (a face not at the boundary of the
* domain), or set set the boundary
* indicator of an exterior face to
- * types::internal_face_boundary_id
+ * numbers::internal_face_boundary_id
* (this value is reserved for another
* purpose). Algorithms may not work or
* produce very confusing results if
* boundary cells have a boundary
- * indicator of types::internal_face_boundary_id
+ * indicator of numbers::internal_face_boundary_id
* or if interior cells have boundary
- * indicators other than types::internal_face_boundary_id.
+ * indicators other than numbers::internal_face_boundary_id.
* Unfortunately, the current object
* has no means of finding out whether it
* really is at the boundary of the
* @ingroup boundary
*/
void
- set_boundary_indicator (const types::boundary_id_t);
+ set_boundary_indicator (const types::boundary_id);
/**
* Since this object only represents a
* @ingroup boundary
*/
void
- set_all_boundary_indicators (const types::boundary_id_t);
+ set_all_boundary_indicators (const types::boundary_id);
/**
* @}
*/
* "glossary" for more
* information.
*/
- types::material_id_t material_id () const;
+ types::material_id material_id () const;
/**
* Set the material id of this
* "glossary" for more
* information.
*/
- void set_material_id (const types::material_id_t new_material_id) const;
+ void set_material_id (const types::material_id new_material_id) const;
/**
* Set the material id of this
* "glossary" for more
* information.
*/
- void recursively_set_material_id (const types::material_id_t new_material_id) const;
+ void recursively_set_material_id (const types::material_id new_material_id) const;
/**
* @}
*/
* parallel::distributed::Triangulation
* object.
*/
- types::subdomain_id_t subdomain_id () const;
+ types::subdomain_id subdomain_id () const;
/**
* Set the subdomain id of this
* parallel::distributed::Triangulation
* object.
*/
- void set_subdomain_id (const types::subdomain_id_t new_subdomain_id) const;
+ void set_subdomain_id (const types::subdomain_id new_subdomain_id) const;
/**
* Set the subdomain id of this
* parallel::distributed::Triangulation
* object.
*/
- void recursively_set_subdomain_id (const types::subdomain_id_t new_subdomain_id) const;
+ void recursively_set_subdomain_id (const types::subdomain_id new_subdomain_id) const;
/**
* @}
*/
template <int structdim, int dim, int spacedim>
-types::boundary_id_t
+types::boundary_id
TriaAccessor<structdim, dim, spacedim>::boundary_indicator () const
{
Assert (structdim<dim, ExcImpossibleInDim(dim));
template <int structdim, int dim, int spacedim>
void
TriaAccessor<structdim, dim, spacedim>::
-set_boundary_indicator (const types::boundary_id_t boundary_ind) const
+set_boundary_indicator (const types::boundary_id boundary_ind) const
{
Assert (structdim<dim, ExcImpossibleInDim(dim));
Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
template <int structdim, int dim, int spacedim>
void
TriaAccessor<structdim, dim, spacedim>::
-set_all_boundary_indicators (const types::boundary_id_t boundary_ind) const
+set_all_boundary_indicators (const types::boundary_id boundary_ind) const
{
set_boundary_indicator (boundary_ind);
{
// error checking is done
// in boundary_indicator()
- return (boundary_indicator() != types::internal_face_boundary_id);
+ return (boundary_indicator() != numbers::internal_face_boundary_id);
}
template <int spacedim>
inline
-types::boundary_id_t
+types::boundary_id
TriaAccessor<0, 1, spacedim>::boundary_indicator () const
{
switch (vertex_kind)
}
default:
- return types::internal_face_boundary_id;
+ return numbers::internal_face_boundary_id;
}
}
template <int spacedim>
inline
void
-TriaAccessor<0, 1, spacedim>::set_boundary_indicator (const types::boundary_id_t b)
+TriaAccessor<0, 1, spacedim>::set_boundary_indicator (const types::boundary_id b)
{
Assert (tria->vertex_to_boundary_id_map_1d->find (this->vertex_index())
!= tria->vertex_to_boundary_id_map_1d->end(),
template <int spacedim>
inline
-void TriaAccessor<0, 1, spacedim>::set_all_boundary_indicators (const types::boundary_id_t b)
+void TriaAccessor<0, 1, spacedim>::set_all_boundary_indicators (const types::boundary_id b)
{
set_boundary_indicator (b);
}
#ifndef DEAL_II_USE_P4EST
return true;
#else
- const types::subdomain_id_t subdomain = this->subdomain_id();
+ const types::subdomain_id subdomain = this->subdomain_id();
if (subdomain == types::artificial_subdomain_id)
return false;
#ifndef DEAL_II_USE_P4EST
return false;
#else
- const types::subdomain_id_t subdomain = this->subdomain_id();
+ const types::subdomain_id subdomain = this->subdomain_id();
if (subdomain == types::artificial_subdomain_id)
return false;
* @author documentation update Guido Kanschat, 2004
*/
template <typename Accessor>
-class TriaRawIterator :
-#ifdef HAVE_STD_ITERATOR_CLASS
- public std::iterator<std::bidirectional_iterator_tag,Accessor>
-#else
- public bidirectional_iterator<Accessor,int>
-#endif
+class TriaRawIterator : public std::iterator<std::bidirectional_iterator_tag,Accessor>
{
public:
/**
* cells with a given subdomain
* number.
*/
- std::vector<types::subdomain_id_t> subdomain_ids;
+ std::vector<types::subdomain_id> subdomain_ids;
/**
* One integer for every consecutive
std::vector<unsigned char> refine_flags;
std::vector<bool> coarsen_flags;
std::vector<std::pair<int,int> > neighbors;
- std::vector<types::subdomain_id_t> subdomain_ids;
+ std::vector<types::subdomain_id> subdomain_ids;
std::vector<int> parents;
// The following is not used
{
union
{
- types::boundary_id_t boundary_id;
- types::material_id_t material_id;
+ types::boundary_id boundary_id;
+ types::material_id material_id;
};
* example, in one dimension, this field
* stores the material id of a line, which
* is a number between 0 and
- * types::invalid_material_id-1. In more
+ * numbers::invalid_material_id-1. In more
* than one dimension, lines have no
* material id, but they may be at the
* boundary; then, we store the
* boundary conditions hold on this
* part. The boundary indicator also
* is a number between zero and
- * types::internal_face_boundary_id-1;
- * the id types::internal_face_boundary_id
+ * numbers::internal_face_boundary_id-1;
+ * the id numbers::internal_face_boundary_id
* is reserved for lines
* in the interior and may be used
* to check whether a line is at the
inline
TriaObjects<G>::BoundaryOrMaterialId::BoundaryOrMaterialId ()
{
- material_id = types::invalid_material_id;
+ material_id = numbers::invalid_material_id;
}
* consideration.
*/
unsigned int
- n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const;
+ n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const;
/**
* Return the number of
* Create default tables for
* the active_fe_indices in
* the
- * dealii::internal::hp::DoFLevels. They
+ * dealii::internal::hp::DoFLevel. They
* are initialized with the a
* zero indicator, meaning
* that fe[0] is going to be
* form of a linked list, is
* the same as used for the
* arrays used in the
- * hp::DoFLevel
+ * internal::hp::DoFLevel
* hierarchy. Starting indices
* into this array are provided
* by the vertex_dofs_offsets
* store the dof-indices and related functions of
* lines
*/
- internal::hp::DoFObjects<1> lines;
+ internal::hp::DoFObjects<1> dof_object;
/**
* Determine an estimate for the
* store the dof-indices and related functions of
* quads
*/
- internal::hp::DoFObjects<2> quads;
+ internal::hp::DoFObjects<2> dof_object;
/**
* Determine an estimate for the
* store the dof-indices and related functions of
* hexes
*/
- internal::hp::DoFObjects<3> hexes;
+ internal::hp::DoFObjects<3> dof_object;
/**
* Determine an estimate for the
* this collection. This number must
* be the same for all elements in the
* collection.
+ *
+ * This function calls
+ * FiniteElement::n_components. See
+ * @ref GlossComponent "the glossary"
+ * for more information.
*/
unsigned int n_components () const;
FECollection<dim,spacedim>::n_components () const
{
Assert (finite_elements.size () > 0, ExcNoFiniteElements());
+
+ // note that there is no need
+ // here to enforce that indeed
+ // all elements have the same
+ // number of components since we
+ // have already done this when
+ // adding a new element to the
+ // collection.
+
return finite_elements[0]->n_components ();
}
--- /dev/null
+//---------------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------------------------------------------------------
+#ifndef __deal2__integrators_advection_h
+#define __deal2__integrators_advection_h
+
+
+#include <deal.II/base/config.h>
+#include <deal.II/base/exceptions.h>
+#include <deal.II/base/quadrature.h>
+#include <deal.II/lac/full_matrix.h>
+#include <deal.II/fe/mapping.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/meshworker/dof_info.h>
+
+DEAL_II_NAMESPACE_OPEN
+
+namespace LocalIntegrators
+{
+/**
+ * @brief Local integrators related to advection along a vector field and its DG formulations
+ *
+ * All advection operators depend on an advection velocity denoted by
+ * <b>w</b> in the formulas below. It is denoted as <tt>velocity</tt>
+ * in the parameter lists.
+ *
+ * The functions cell_matrix() and both upwind_value_matrix() are
+ * taking the equation in weak form, that is, the directional
+ * derivative is on the test function.
+ *
+ * @ingroup Integrators
+ * @author Guido Kanschat
+ * @date 2012
+ */
+ namespace Advection
+ {
+/**
+ * Advection along the direction <b>w</b> in weak form
+ * with derivative on the test function
+ * \f[
+ * m_{ij} = \int_Z u_j\,(\mathbf w \cdot \nabla) v_i \, dx.
+ * \f]
+ *
+ * The FiniteElement in <tt>fe</tt> may be scalar or vector valued. In
+ * the latter case, the advection operator is applied to each component
+ * separately.
+ *
+ * @param M: The advection matrix obtained as result
+ * @param fe: The FEValues object describing the local trial function
+ * space. #update_values and #update_gradients, and #update_JxW_values
+ * must be set.
+ * @param fetest: The FEValues object describing the local test
+ * function space. #update_values and #update_gradients must be set.
+ * @param velocity: The advection velocity, a vector of dimension
+ * <tt>dim</tt>. Each component may either contain a vector of length
+ * one, in which case a constant velocity is assumed, or a vector with
+ * as many entries as quadrature points if the velocity is not constant.
+ * @param factor is an optional multiplication factor for the result.
+ *
+ * @ingroup Integrators
+ * @author Guido Kanschat
+ * @date 2012
+ */
+ template<int dim>
+ void cell_matrix (
+ FullMatrix<double>& M,
+ const FEValuesBase<dim>& fe,
+ const FEValuesBase<dim>& fetest,
+ const VectorSlice<const std::vector<std::vector<double> > >& velocity,
+ const double factor = 1.)
+ {
+ const unsigned int n_dofs = fe.dofs_per_cell;
+ const unsigned int t_dofs = fetest.dofs_per_cell;
+ const unsigned int n_components = fe.get_fe().n_components();
+
+ AssertDimension(velocity.size(), dim);
+ // If the size of the
+ // velocity vectors is one,
+ // then do not increment
+ // between quadrature points.
+ const unsigned int v_increment = (velocity[0].size() == 1) ? 0 : 1;
+
+ if (v_increment == 1)
+ {
+ AssertVectorVectorDimension(velocity, dim, fe.n_quadrature_points);
+ }
+
+ AssertDimension(M.n(), n_dofs);
+ AssertDimension(M.m(), t_dofs);
+
+ for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ {
+ const double dx = factor * fe.JxW(k);
+ const unsigned int vindex = k * v_increment;
+
+ for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned i=0;i<t_dofs;++i)
+ for (unsigned int c=0;c<n_components;++c)
+ {
+ double wgradv = velocity[0][vindex]
+ * fe.shape_grad_component(i,k,c)[0];
+ for (unsigned int d=1;d<dim;++d)
+ wgradv += velocity[d][vindex]
+ * fe.shape_grad_component(i,k,c)[d];
+ M(i,j) -= dx * wgradv * fe.shape_value_component(j,k,c);
+ }
+ }
+ }
+
+/**
+ * Advection residual operator in weak form
+ *
+ * \f[
+ * r_i = \int_Z u\,(\mathbf w \cdot \nabla) v_i \, dx.
+ * \f]
+ */
+ template <int dim>
+ inline void
+ cell_residual (
+ Vector<double>& result,
+ const FEValuesBase<dim>& fe,
+ const std::vector<Tensor<1,dim> >& input,
+ const VectorSlice<const std::vector<std::vector<double> > >& velocity,
+ double factor = 1.)
+ {
+ const unsigned int nq = fe.n_quadrature_points;
+ const unsigned int n_dofs = fe.dofs_per_cell;
+ Assert(input.size() == nq, ExcDimensionMismatch(input.size(), nq));
+ Assert(result.size() == n_dofs, ExcDimensionMismatch(result.size(), n_dofs));
+
+ AssertDimension(velocity.size(), dim);
+ const unsigned int v_increment = (velocity[0].size() == 1) ? 0 : 1;
+ if (v_increment == 1)
+ {
+ AssertVectorVectorDimension(velocity, dim, fe.n_quadrature_points);
+ }
+
+ for (unsigned k=0;k<nq;++k)
+ {
+ const double dx = factor * fe.JxW(k);
+ for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int d=0;d<dim;++d)
+ result(i) += dx * input[k]
+ * fe.shape_grad(i,k)[d] * velocity[d][k * v_increment];
+ }
+ }
+
+
+/**
+ * Vector-valued advection residual operator in weak form
+ *
+ *
+ * \f[
+ * r_i = \int_Z \mathbf u\cdot\bigl((\mathbf w \cdot \nabla) \mathbf v_i\bigr) \, dx.
+ * \f]
+ */
+ template <int dim>
+ inline void
+ cell_residual (
+ Vector<double>& result,
+ const FEValuesBase<dim>& fe,
+ const VectorSlice<const std::vector<std::vector<Tensor<1,dim> > > >& input,
+ const VectorSlice<const std::vector<std::vector<double> > >& velocity,
+ double factor = 1.)
+ {
+ const unsigned int nq = fe.n_quadrature_points;
+ const unsigned int n_dofs = fe.dofs_per_cell;
+ const unsigned int n_comp = fe.get_fe().n_components();
+
+ AssertVectorVectorDimension(input, n_comp, fe.n_quadrature_points);
+ Assert(result.size() == n_dofs, ExcDimensionMismatch(result.size(), n_dofs));
+
+ AssertDimension(velocity.size(), dim);
+ const unsigned int v_increment = (velocity[0].size() == 1) ? 0 : 1;
+ if (v_increment == 1)
+ {
+ AssertVectorVectorDimension(velocity, dim, fe.n_quadrature_points);
+ }
+
+ for (unsigned k=0;k<nq;++k)
+ {
+ const double dx = factor * fe.JxW(k);
+ for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int c=0;c<n_comp;++c)
+ for (unsigned int d=0;d<dim;++d)
+ result(i) += dx * input[c][k]
+ * fe.shape_grad_component(i,k,c)[d] * velocity[d][k * v_increment];
+ }
+ }
+
+ /**
+ * Upwind flux at the boundary
+ * for weak advection
+ * operator. This is the value of
+ * the trial function at the
+ * outflow boundary and zero
+ * else:
+ * @f[
+ * a_{ij} = \int_{\partial\Omega}
+ * [\mathbf w\cdot\mathbf n]_+
+ * u_i v_j \, ds
+ * @f]
+ *
+ * The <tt>velocity</tt> is
+ * provided as a VectorSlice,
+ * having <tt>dim</tt> vectors,
+ * one for each velocity
+ * component. Each of the
+ * vectors must either have only
+ * a single entry, if t he
+ * advection velocity is
+ * constant, or have an entry
+ * for each quadrature point.
+ *
+ * The finite element can have
+ * several components, in which
+ * case each component is
+ * advected by the same velocity.
+ */
+ template <int dim>
+ void upwind_value_matrix(
+ FullMatrix<double>& M,
+ const FEValuesBase<dim>& fe,
+ const FEValuesBase<dim>& fetest,
+ const VectorSlice<const std::vector<std::vector<double> > >& velocity,
+ double factor = 1.)
+ {
+ const unsigned int n_dofs = fe.dofs_per_cell;
+ const unsigned int t_dofs = fetest.dofs_per_cell;
+ unsigned int n_components = fe.get_fe().n_components();
+ AssertDimension (M.m(), n_dofs);
+ AssertDimension (M.n(), n_dofs);
+
+ AssertDimension(velocity.size(), dim);
+ const unsigned int v_increment = (velocity[0].size() == 1) ? 0 : 1;
+ if (v_increment == 1)
+ {
+ AssertVectorVectorDimension(velocity, dim, fe.n_quadrature_points);
+ }
+
+ for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ {
+ const double dx = factor * fe.JxW(k);
+
+ double nv = 0.;
+ for (unsigned int d=0;d<dim;++d)
+ nv += fe.normal_vector(k)[d] * velocity[d][k * v_increment];
+
+ if (nv > 0)
+ {
+ for (unsigned i=0;i<t_dofs;++i)
+ for (unsigned j=0;j<n_dofs;++j)
+ {
+ if (fe.get_fe().is_primitive())
+ M(i,j) += dx * nv * fe.shape_value(i,k) * fe.shape_value(j,k);
+ else
+ for (unsigned int c=0;c<n_components;++c)
+ M(i,j) += dx * nv * fetest.shape_value_component(i,k,c)
+ * fe.shape_value_component(j,k,c);
+ }
+ }
+ }
+ }
+
+ /**
+ * Upwind flux in the interior
+ * for weak advection
+ * operator. Matrix entries
+ * correspond to the upwind value
+ * of the trial function, multiplied
+ * by the jump of the test
+ * functions
+ * @f[
+ * a_{ij} = \int_F \left|\mathbf w
+ * \cdot \mathbf n\right|
+ * u^\uparrow
+ * (v^\uparrow-v^\downarrow)
+ * \,ds
+ * @f]
+ *
+ * The <tt>velocity</tt> is
+ * provided as a VectorSlice,
+ * having <tt>dim</tt> vectors,
+ * one for each velocity
+ * component. Each of the
+ * vectors must either have only
+ * a single entry, if t he
+ * advection velocity is
+ * constant, or have an entry
+ * for each quadrature point.
+ *
+ * The finite element can have
+ * several components, in which
+ * case each component is
+ * advected the same way.
+ */
+ template <int dim>
+ void upwind_value_matrix (
+ FullMatrix<double>& M11,
+ FullMatrix<double>& M12,
+ FullMatrix<double>& M21,
+ FullMatrix<double>& M22,
+ const FEValuesBase<dim>& fe1,
+ const FEValuesBase<dim>& fe2,
+ const FEValuesBase<dim>& fetest1,
+ const FEValuesBase<dim>& fetest2,
+ const VectorSlice<const std::vector<std::vector<double> > >& velocity,
+ const double factor = 1.)
+ {
+ const unsigned int n1 = fe1.dofs_per_cell;
+ // Multiply the quadrature point
+ // index below with this factor to
+ // have simpler data for constant
+ // velocities.
+ AssertDimension(velocity.size(), dim);
+ const unsigned int v_increment = (velocity[0].size() == 1) ? 0 : 1;
+ if (v_increment == 1)
+ {
+ AssertVectorVectorDimension(velocity, dim, fe1.n_quadrature_points);
+ }
+
+ for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ {
+ double nbeta = fe1.normal_vector(k)[0] * velocity[0][k * v_increment];
+ for (unsigned int d=1;d<dim;++d)
+ nbeta += fe1.normal_vector(k)[d] * velocity[d][k * v_increment];
+ const double dx_nbeta = factor * nbeta * fe1.JxW(k);
+
+ for (unsigned i=0;i<n1;++i)
+ for (unsigned j=0;j<n1;++j)
+ if (fe1.get_fe().is_primitive())
+ {
+ if (nbeta > 0)
+ {
+ M11(i,j) += dx_nbeta
+ * fe1.shape_value(j,k)
+ * fetest1.shape_value(i,k);
+ M21(i,j) -= dx_nbeta
+ * fe1.shape_value(j,k)
+ * fetest2.shape_value(i,k);
+ }
+ else
+ {
+ M22(i,j) -= dx_nbeta
+ * fe2.shape_value(j,k)
+ * fetest2.shape_value(i,k);
+ M12(i,j) += dx_nbeta
+ * fe2.shape_value(j,k)
+ * fetest1.shape_value(i,k);
+ }
+ }
+ else
+ {
+ for (unsigned int d=0;d<fe1.get_fe().n_components();++d)
+ if (nbeta > 0)
+ {
+ M11(i,j) += dx_nbeta
+ * fe1.shape_value_component(j,k,d)
+ * fetest1.shape_value_component(i,k,d);
+ M21(i,j) -= dx_nbeta
+ * fe1.shape_value_component(j,k,d)
+ * fetest2.shape_value_component(i,k,d);
+ }
+ else
+ {
+ M22(i,j) -= dx_nbeta
+ * fe2.shape_value_component(j,k,d)
+ * fetest2.shape_value_component(i,k,d);
+ M12(i,j) += dx_nbeta
+ * fe2.shape_value_component(j,k,d)
+ * fetest1.shape_value_component(i,k,d);
+ }
+ }
+ }
+ }
+ }
+}
+
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
AssertDimension(M.m(), t_dofs);
AssertDimension(M.n(), n_dofs);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = fe.JxW(k) * factor;
- for (unsigned i=0;i<t_dofs;++i)
+ for (unsigned int i=0;i<t_dofs;++i)
{
const double vv = fetest.shape_value(i,k);
for (unsigned int d=0;d<dim;++d)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int j=0;j<n_dofs;++j)
{
const double du = fe.shape_grad_component(j,k,d)[d];
M(i,j) += dx * du * vv;
}
}
}
+
+/**
+ * The residual of the divergence operator in strong form.
+ * \f[
+ * \int_Z v\nabla \cdot \mathbf u \,dx
+ * \f]
+ * This is the strong divergence operator and the trial
+ * space should be at least <b>H</b><sup>div</sup>. The test functions
+ * may be discontinuous.
+ *
+ * The function cell_matrix() is the Frechet derivative of this function with respect
+ * to the test functions.
+ */
+ template <int dim>
+ void cell_residual(
+ Vector<double>& result,
+ const FEValuesBase<dim>& fetest,
+ const VectorSlice<const std::vector<std::vector<Tensor<1,dim> > > >& input,
+ const double factor = 1.)
+ {
+ AssertDimension(fetest.get_fe().n_components(), 1);
+ AssertVectorVectorDimension(input, dim, fetest.n_quadrature_points);
+ const unsigned int t_dofs = fetest.dofs_per_cell;
+ Assert (result.size() == t_dofs, ExcDimensionMismatch(result.size(), t_dofs));
+
+ for (unsigned int k=0;k<fetest.n_quadrature_points;++k)
+ {
+ const double dx = factor * fetest.JxW(k);
+
+ for (unsigned int i=0;i<t_dofs;++i)
+ for (unsigned int d=0;d<dim;++d)
+ result(i) += dx * input[d][k][d] * fetest.shape_value(i,k);
+ }
+ }
/**
* Cell matrix for gradient. The derivative is on the trial
* function.
AssertDimension(M.m(), t_dofs);
AssertDimension(M.n(), n_dofs);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = fe.JxW(k) * factor;
for (unsigned int d=0;d<dim;++d)
- for (unsigned i=0;i<t_dofs;++i)
+ for (unsigned int i=0;i<t_dofs;++i)
{
const double vv = fetest.shape_value_component(i,k,d);
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int j=0;j<n_dofs;++j)
{
const Tensor<1,dim>& Du = fe.shape_grad(j,k);
M(i,j) += dx * vv * Du[d];
}
}
+ /**
+ * The residual of the gradient operator in strong form.
+ * \f[
+ * \int_Z \mathbf v\cdot\nabla u \,dx
+ * \f]
+ * This is the strong gradient operator and the trial
+ * space should be at least <b>H</b><sup>1</sup>. The test functions
+ * may be discontinuous.
+ *
+ * The function cell_residual() is the Frechet derivative of this function with respect to the test functions.
+ */
+ template <int dim>
+ void gradient_residual(
+ Vector<double>& result,
+ const FEValuesBase<dim>& fetest,
+ const std::vector<Tensor<1,dim> >& input,
+ const double factor = 1.)
+ {
+ AssertDimension(fetest.get_fe().n_components(), dim);
+ AssertDimension(input.size(), fetest.n_quadrature_points);
+ const unsigned int t_dofs = fetest.dofs_per_cell;
+ Assert (result.size() == t_dofs, ExcDimensionMismatch(result.size(), t_dofs));
+
+ for (unsigned int k=0;k<fetest.n_quadrature_points;++k)
+ {
+ const double dx = factor * fetest.JxW(k);
+
+ for (unsigned int i=0;i<t_dofs;++i)
+ for (unsigned int d=0;d<dim;++d)
+ result(i) += dx * input[k][d] * fetest.shape_value_component(i,k,d);
+ }
+ }
+
/**
- * The trace of the divergence
- * operator, namely the product
- * of the normal component of the
- * vector valued trial space and
- * the test space.
- * @f[
- * \int_F (\mathbf u\cdot \mathbf n) v \,ds
- * @f]
+ * The trace of the divergence operator, namely the product of the
+ * normal component of the vector valued trial space and the test
+ * space.
+ * @f[ \int_F (\mathbf u\cdot \mathbf n) v \,ds @f]
*/
template<int dim>
void
AssertDimension(M.m(), t_dofs);
AssertDimension(M.n(), n_dofs);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const Tensor<1,dim> ndx = factor * fe.JxW(k) * fe.normal_vector(k);
- for (unsigned i=0;i<t_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<t_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<dim;++d)
M(i,j) += ndx[d] * fe.shape_value_component(j,k,d)
* fetest.shape_value(i,k);
* vector valued trial space and
* the test space.
* @f[
- * \int_F (\mathbf f\cdot \mathbf n) v \,ds
+ * \int_F (\mathbf u\cdot \mathbf n) v \,ds
* @f]
*/
template<int dim>
AssertDimension(result.size(), t_dofs);
AssertVectorVectorDimension (data, dim, fe.n_quadrature_points);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const Tensor<1,dim> ndx = factor * fe.normal_vector(k) * fe.JxW(k);
- for (unsigned i=0;i<t_dofs;++i)
+ for (unsigned int i=0;i<t_dofs;++i)
for (unsigned int d=0;d<dim;++d)
result(i) += ndx[d] * fetest.shape_value(i,k) * data[d][k];
}
}
+
/**
* The trace of the divergence
* operator, namely the product
AssertDimension(M22.m(), t_dofs);
AssertDimension(M22.n(), n_dofs);
- for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
{
const double dx = factor * fe1.JxW(k);
- for (unsigned i=0;i<t_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<t_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<dim;++d)
{
const double un1 = fe1.shape_value_component(j,k,d) * fe1.normal_vector(k)[d];
AssertDimension(M.m(), n_dofs);
AssertDimension(M.n(), n_dofs);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
{
double dv = 0.;
double du = 0.;
AssertDimension(M22.m(), n_dofs);
AssertDimension(M22.n(), n_dofs);
- for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
{
const double dx = factor * fe1.JxW(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<dim;++d)
{
const double un1 = fe1.shape_value_component(j,k,d) * fe1.normal_vector(k)[d];
AssertVectorVectorDimension (Du, dim, fe.n_quadrature_points);
double result = 0;
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
double div = Du[0][k][0];
for (unsigned int d=1;d<dim;++d)
AssertDimension(M.m(), n_dofs);
AssertDimension(M.n(), n_dofs);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d1=0;d1<dim;++d1)
for (unsigned int d2=0;d2<dim;++d2)
M(i,j) += dx * .25 *
AssertDimension(M.m(), n_dofs);
AssertDimension(M.n(), n_dofs);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
const Point<dim>& n = fe.normal_vector(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d1=0;d1<dim;++d1)
{
const double u = fe.shape_value_component(j,k,d1);
const double nu2 = (ext_factor < 0) ? int_factor : ext_factor;
const double penalty = .5 * pen * (nu1 + nu2);
- for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
{
const double dx = fe1.JxW(k);
const Point<dim>& n = fe1.normal_vector(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d1=0;d1<dim;++d1)
{
const double u1 = fe1.shape_value_component(j,k,d1);
const unsigned int n_dofs = fe.dofs_per_cell;
const unsigned int n_components = fe.get_fe().n_components();
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = fe.JxW(k) * factor;
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<n_components;++d)
M(i,j) += dx
* fe.shape_value_component(j,k,d)
AssertDimension(fe.get_fe().n_components(), 1);
AssertDimension(input.size(), fe.n_quadrature_points);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
- for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int i=0;i<n_dofs;++i)
result(i) += fe.JxW(k) * factor * input[k] * fe.shape_value(i,k);
}
AssertDimension(result.size(), n_dofs);
AssertDimension(input.size(), fe_components);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
- for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int i=0;i<n_dofs;++i)
for (unsigned int d=0;d<n_components;++d)
result(i) += fe.JxW(k) * factor * fe.shape_value_component(i,k,d) * input[d][k];
}
AssertDimension(M21.n(), n1_dofs);
AssertDimension(M22.n(), n2_dofs);
- for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
{
const double dx = fe1.JxW(k);
- for (unsigned i=0;i<n1_dofs;++i)
- for (unsigned j=0;j<n1_dofs;++j)
+ for (unsigned int i=0;i<n1_dofs;++i)
+ for (unsigned int j=0;j<n1_dofs;++j)
for (unsigned int d=0;d<n_components;++d)
{
const double u1 = factor1*fe1.shape_value_component(j,k,d);
const unsigned int n_dofs = fe.dofs_per_cell;
const unsigned int n_components = fe.get_fe().n_components();
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = fe.JxW(k) * factor;
- for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int i=0;i<n_dofs;++i)
{
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<n_components;++d)
M(i,j) += dx *
(fe.shape_grad_component(j,k,d) * fe.shape_grad_component(i,k,d));
Assert(input.size() == nq, ExcDimensionMismatch(input.size(), nq));
Assert(result.size() == n_dofs, ExcDimensionMismatch(result.size(), n_dofs));
- for (unsigned k=0;k<nq;++k)
+ for (unsigned int k=0;k<nq;++k)
{
const double dx = factor * fe.JxW(k);
- for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int i=0;i<n_dofs;++i)
result(i) += dx * (input[k] * fe.shape_grad(i,k));
}
}
AssertVectorVectorDimension(input, n_comp, fe.n_quadrature_points);
Assert(result.size() == n_dofs, ExcDimensionMismatch(result.size(), n_dofs));
+<<<<<<< HEAD
for (unsigned k=0;k<nq;++k)
{
const double dx = factor * fe.JxW(k);
for (unsigned i=0;i<n_dofs;++i)
+=======
+ for (unsigned int k=0;k<nq;++k)
+ {
+ const double dx = factor * fe.JxW(k);
+ for (unsigned int i=0;i<n_dofs;++i)
+>>>>>>> trunk
for (unsigned int d=0;d<n_comp;++d)
{
Assert (M.m() == n_dofs, ExcDimensionMismatch(M.m(), n_dofs));
Assert (M.n() == n_dofs, ExcDimensionMismatch(M.n(), n_dofs));
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = fe.JxW(k) * factor;
const Point<dim>& n = fe.normal_vector(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<n_comp;++d)
M(i,j) += dx *
(2. * fe.shape_value_component(i,k,d) * penalty * fe.shape_value_component(j,k,d)
AssertDimension(Dinput.size(), fe.n_quadrature_points);
AssertDimension(data.size(), fe.n_quadrature_points);
+<<<<<<< HEAD
for (unsigned k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
const Point<dim>& n = fe.normal_vector(k);
for (unsigned i=0;i<n_dofs;++i)
+=======
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
+ {
+ const double dx = factor * fe.JxW(k);
+ const Point<dim>& n = fe.normal_vector(k);
+ for (unsigned int i=0;i<n_dofs;++i)
+>>>>>>> trunk
{
const double dnv = fe.shape_grad(i,k) * n;
const double dnu = Dinput[k] * n;
AssertVectorVectorDimension(Dinput, n_comp, fe.n_quadrature_points);
AssertVectorVectorDimension(data, n_comp, fe.n_quadrature_points);
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
const Point<dim>& n = fe.normal_vector(k);
+<<<<<<< HEAD
for (unsigned i=0;i<n_dofs;++i)
+=======
+ for (unsigned int i=0;i<n_dofs;++i)
+>>>>>>> trunk
for (unsigned int d=0;d<n_comp;++d)
{
const double dnv = fe.shape_grad_component(i,k,d) * n;
const double nui = factor1;
const double nue = (factor2 < 0) ? factor1 : factor2;
-
- for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ const double nu = .5*(nui+nue);
+
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
{
const double dx = fe1.JxW(k);
const Point<dim>& n = fe1.normal_vector(k);
for (unsigned int d=0;d<fe1.get_fe().n_components();++d)
{
- for (unsigned i=0;i<n_dofs;++i)
+ for (unsigned int i=0;i<n_dofs;++i)
{
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int j=0;j<n_dofs;++j)
{
const double vi = fe1.shape_value_component(i,k,d);
const double dnvi = n * fe1.shape_grad_component(i,k,d);
const double dnui = n * fe1.shape_grad_component(j,k,d);
const double ue = fe2.shape_value_component(j,k,d);
const double dnue = n * fe2.shape_grad_component(j,k,d);
- M11(i,j) += dx*(-.5*nui*dnvi*ui-.5*nui*dnui*vi+penalty*ui*vi);
- M12(i,j) += dx*( .5*nui*dnvi*ue-.5*nue*dnue*vi-penalty*vi*ue);
- M21(i,j) += dx*(-.5*nue*dnve*ui+.5*nui*dnui*ve-penalty*ui*ve);
- M22(i,j) += dx*( .5*nue*dnve*ue+.5*nue*dnue*ve+penalty*ue*ve);
+ M11(i,j) += dx*(-.5*nui*dnvi*ui-.5*nui*dnui*vi+nu*penalty*ui*vi);
+ M12(i,j) += dx*( .5*nui*dnvi*ue-.5*nue*dnue*vi-nu*penalty*vi*ue);
+ M21(i,j) += dx*(-.5*nue*dnve*ui+.5*nui*dnui*ve-nu*penalty*ui*ve);
+ M22(i,j) += dx*( .5*nue*dnve*ue+.5*nue*dnue*ve+nu*penalty*ue*ve);
}
}
}
const unsigned int n_dofs = fe1.dofs_per_cell;
+<<<<<<< HEAD
for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+=======
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
+>>>>>>> trunk
{
const double dx = fe1.JxW(k);
const Point<dim>& n = fe1.normal_vector(k);
+<<<<<<< HEAD
for (unsigned i=0;i<n_dofs;++i)
+=======
+ for (unsigned int i=0;i<n_dofs;++i)
+>>>>>>> trunk
{
const double vi = fe1.shape_value(i,k);
const Tensor<1,dim>& Dvi = fe1.shape_grad(i,k);
const double penalty = .5 * pen * (nui + nue);
+<<<<<<< HEAD
for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+=======
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
+>>>>>>> trunk
{
const double dx = fe1.JxW(k);
const Point<dim>& n = fe1.normal_vector(k);
+<<<<<<< HEAD
for (unsigned i=0;i<n1;++i)
+=======
+ for (unsigned int i=0;i<n1;++i)
+>>>>>>> trunk
for (unsigned int d=0;d<n_comp;++d)
{
const double vi = fe1.shape_value_component(i,k,d);
L2::cell_matrix(dinfo.matrix(2,false).matrix, info.fe_values(1));
}
* @endcode
- * See step-42 for a worked out example of this code.
+ * See step-39 for a worked out example of this code.
*
* @ingroup Integrators
*/
// all dimensions
const unsigned int d_max = (dim==2) ? 1 : dim;
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<d_max;++d)
{
const unsigned int d1 = (d+1)%dim;
const unsigned int d_max = (dim==2) ? 1 : dim;
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = fe.JxW(k) * factor;
- for (unsigned i=0;i<t_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<t_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<d_max;++d)
{
const unsigned int d1 = (d+1)%dim;
// over all dimensions
const unsigned int d_max = (dim==2) ? 1 : dim;
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
const Point<dim>& n = fe.normal_vector(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<d_max;++d)
{
const unsigned int d1 = (d+1)%dim;
// over all dimensions
const unsigned int d_max = (dim==2) ? 1 : dim;
- for (unsigned k=0;k<fe.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe.n_quadrature_points;++k)
{
const double dx = factor * fe.JxW(k);
const Point<dim>& n = fe.normal_vector(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
for (unsigned int d=0;d<d_max;++d)
{
const unsigned int d1 = (d+1)%dim;
// over all dimensions
const unsigned int d_max = (dim==2) ? 1 : dim;
- for (unsigned k=0;k<fe1.n_quadrature_points;++k)
+ for (unsigned int k=0;k<fe1.n_quadrature_points;++k)
{
const double dx = fe1.JxW(k);
const Point<dim>& n = fe1.normal_vector(k);
- for (unsigned i=0;i<n_dofs;++i)
- for (unsigned j=0;j<n_dofs;++j)
- for (unsigned d=0;d<d_max;++d)
+ for (unsigned int i=0;i<n_dofs;++i)
+ for (unsigned int j=0;j<n_dofs;++j)
+ for (unsigned int d=0;d<d_max;++d)
{
const unsigned int d1 = (d+1)%dim;
const unsigned int d2 = (d+2)%dim;
//---------------------------------------------------------------------------
-// $Id: laplace.h 23983 2011-07-29 22:45:15Z kanschat $
+// $Id$
//
// Copyright (C) 2010, 2011, 2012 by the deal.II authors
//
{
AssertIndexRange(block, index_sets.size());
const block_container& b = index_sets[block];
- for (unsigned i=0;i<b.size();++i)
+ for (unsigned int i=0; i<b.size(); ++i)
if (b[i] == index)
return i;
return numbers::invalid_unsigned_int;
#include <deal.II/lac/exceptions.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/lac/matrix_iterator.h>
+#include <deal.II/lac/vector.h>
#include <cmath>
/**
* Call the compress() function on all
* the subblocks of the matrix.
+ *
+ *
+ * See @ref GlossCompress "Compressing
+ * distributed objects" for more
+ * information.
*/
- void compress ();
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
/**
* Multiply the entire matrix by a
template <class MatrixType>
inline
void
-BlockMatrixBase<MatrixType>::compress ()
+BlockMatrixBase<MatrixType>::compress (::dealii::VectorOperation::values operation)
{
for (unsigned int r=0; r<n_block_rows(); ++r)
for (unsigned int c=0; c<n_block_cols(); ++c)
- block(r,c).compress ();
+ block(r,c).compress (operation);
}
*/
~BlockVector ();
+ /**
+ * Call the compress() function on all
+ * the subblocks.
+ *
+ * This functionality only needs to be
+ * called if using MPI based vectors and
+ * exists in other objects for
+ * compatibility.
+ *
+ * See @ref GlossCompress "Compressing
+ * distributed objects" for more
+ * information.
+ */
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
+
/**
* Copy operator: fill all components of
* the vector with the given scalar
return *this;
}
+template <typename Number>
+inline
+void BlockVector<Number>::compress (::dealii::VectorOperation::values operation)
+{
+ for (unsigned int i=0; i<this->n_blocks();++i)
+ this->components[i].compress(operation);
+}
+
template <typename Number>
*/
template <class BlockVectorType, bool constness>
class Iterator :
-#ifdef HAVE_STD_ITERATOR_CLASS
public std::iterator<std::random_access_iterator_tag,
typename Types<BlockVectorType,constness>::value_type>
-#else
- random_access_iterator<typename Types<BlockVectorType,constness>::value_type,int>
-#endif
{
private:
/**
/**
* Call the compress() function on all
* the subblocks of the matrix.
+ *
+ * This functionality only needs to be
+ * called if using MPI based vectors and
+ * exists in other objects for
+ * compatibility.
+ *
+ * See @ref GlossCompress "Compressing
+ * distributed objects" for more
+ * information.
*/
- void compress ();
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
+
/**
* Access to a single block.
template <class BlockVectorType, bool constness>
Iterator<BlockVectorType,constness>::
- Iterator (BlockVector &parent,
- const unsigned global_index)
+ Iterator (BlockVector &parent,
+ const unsigned int global_index)
:
parent (&parent),
global_index (global_index)
template <class VectorType>
inline
void
-BlockVectorBase<VectorType>::compress ()
+BlockVectorBase<VectorType>::compress (::dealii::VectorOperation::values operation)
{
for (unsigned int i=0; i<n_blocks(); ++i)
- block(i).compress ();
+ block(i).compress (operation);
}
* constraints is extensively described in the @ref constraints module. The
* class is meant to deal with a limited number of constraints relative to the
* total number of degrees of freedom, for example a few per cent up to maybe
- * 30 per cent; and with a linear combination of $M$ other degrees of freedom
- * where $M$ is also relatively small (no larger than at most around the
+ * 30 per cent; and with a linear combination of <i>M</i> other degrees of freedom
+ * where <i>M</i> is also relatively small (no larger than at most around the
* average number of entries per row of a linear system). It is <em>not</em>
* meant to describe full rank linear systems.
*
* <h3>Description of constraints</h3>
*
* Each "line" in objects of this class corresponds to one constrained degree
- * of freedom, with the number of the line being $i_1$, and the entries in
- * this line being pairs $(i_j,a_{i_j})$. Note that the constraints are linear
- * in the $x_i$, and that there might be a constant (non-homogeneous) term in
+ * of freedom, with the number of the line being <i>i</i>, entered by
+ * using add_line() or add_lines(). The entries in
+ * this line are pairs of the form
+ * (<i>j</i>,<i>a<sub>ij</sub></i>), which are added by add_entry() or
+ * add_entries(). The organization is essentially a
+ * SparsityPattern, but with only a few lines containing nonzero
+ * elements, and therefore no data wasted on the others. For each
+ * line, which has been added by the mechanism above, an elimination
+ * of the constrained degree of freedom of the form
+ * @f[
+ * x_i = \sum_j a_{ij} x_j + b_i
+ * @f]
+ * is performed, where <i>b<sub>i</sub></i> is optional and set by
+ * set_inhomogeneity(). Thus, if a constraint is formulated for
+ * instance as a zero mean value of several degrees of freedom, one of
+ * the degrees has to be chosen to be eliminated.
+ *
+ * Note that the constraints are linear
+ * in the <i>x<sub>i</sub></i>, and that there might be a constant (non-homogeneous) term in
* the constraint. This is exactly the form we need for hanging node
* constraints, where we need to constrain one degree of freedom in terms of
* others. There are other conditions of this form possible, for example for
* implementing mean value conditions as is done in the step-11
* tutorial program. The name of the class stems from the fact that these
- * constraints can be represented in matrix form as $X x = b$, and this object
- * then describes the matrix $X$ (as well as, incidentally, the vector $b$ --
+ * constraints can be represented in matrix form as <b>X</b> <i>x</i> = <i>b</i>, and this object
+ * then describes the matrix <b>X</b> (and the vector <i>b</i>;
* originally, the ConstraintMatrix class was only meant to handle homogenous
- * constraints where $b=0$, thus the name). The most frequent way to
+ * constraints where <i>b</i>=0, thus the name). The most frequent way to
* create/fill objects of this type is using the
* DoFTools::make_hanging_node_constraints() function. The use of these
* objects is first explained in step-6.
*
* This function essentially exists to
* allow adding several constraints of
- * the form $x_i=0$ all at once, where
- * the set of indices $i$ for which these
+ * the form <i>x<sub>i</sub></i>=0 all at once, where
+ * the set of indices <i>i</i> for which these
* constraints should be added are given
* by the argument of this function. On
* the other hand, just as if the
*
* This function essentially exists to
* allow adding several constraints of
- * the form $x_i=0$ all at once, where
- * the set of indices $i$ for which these
+ * the form <i>x<sub>i</sub></i>=0 all at once, where
+ * the set of indices <i>i</i> for which these
* constraints should be added are given
* by the argument of this function. On
* the other hand, just as if the
*
* This function essentially exists to
* allow adding several constraints of
- * the form $x_i=0$ all at once, where
- * the set of indices $i$ for which these
+ * the form <i>x<sub>i</sub></i>=0 all at once, where
+ * the set of indices <i>i</i> for which these
* constraints should be added are given
* by the argument of this function. On
* the other hand, just as if the
* This function also resolves chains
* of constraints. For example, degree
* of freedom 13 may be constrained to
- * $u_{13}=u_3/2+u_7/2$ while degree of
+ * <i>u</i><sub>13</sub>=<i>u</i><sub>3</sub>/2+<i>u</i><sub>7</sub>/2 while degree of
* freedom 7 is itself constrained as
- * $u_7=u_2/2+u_4/2$. Then, the
+ * <i>u</i><sub>7</sub>=<i>u</i><sub>2</sub>/2+<i>u</i><sub>4</sub>/2. Then, the
* resolution will be that
- * $u_{13}=u_3/2+u_2/4+u_4/4$. Note,
+ * <i>u</i><sub>13</sub>=<i>u</i><sub>3</sub>/2+<i>u</i><sub>2</sub>/4+<i>u</i><sub>4</sub>/4. Note,
* however, that cycles in this graph
* of constraints are not allowed,
- * i.e. for example $u_4$ may not be
+ * i.e. for example <i>u</i><sub>4</sub> may not be
* constrained, directly or indirectly,
- * to $u_{13}$ again.
+ * to <i>u</i><sub>13</sub> again.
*/
void close ();
* the constraints represented by this
* object. Both objects may or may not
* be closed (by having their function
- * @p close called before). If this
+ * close() called before). If this
* object was closed before, then it
* will be closed afterwards as
* well. Note, however, that if the
*
* This function is useful if you are
* building block matrices, where all
- * blocks are built by the same @p
+ * blocks are built by the same
* DoFHandler object, i.e. the matrix
* size is larger than the number of
* degrees of freedom. Since several
* to the same degrees of freedom,
* you'd generate several constraint
* objects, then shift them, and
- * finally @p merge them together
+ * finally merge() them together
* again.
*/
void shift (const unsigned int offset);
* with number @p index is a
* constrained one.
*
- * Note that if @p close was called
+ * Note that if close() was called
* before, then this function is
* significantly faster, since then the
* constrained degrees of freedom are
* sorted and we can do a binary
- * search, while before @p close was
+ * search, while before close() was
* called, we have to perform a linear
* search through all entries.
*/
* to. For example, in 2d a hanging
* node is constrained only to its two
* neighbors, so the returned value
- * would be @p 2. However, for higher
+ * would be 2. However, for higher
* order elements and/or higher
* dimensions, or other types of
* constraints, this number is no more
* any other type having the same
* interface.
*
- * Note that if called with a @p
+ * Note that if called with a
* TrilinosWrappers::MPI::Vector it may
* not contain ghost elements.
*/
* A list of unsigned integers that
* contains the position of the
* ConstraintLine of a constrained degree
- * of freedom, or @p
+ * of freedom, or
* numbers::invalid_unsigned_int if the
* degree of freedom is not
- * constrained. The @p invalid_unsigned
- * int return value returns thus whether
+ * constrained. The
+ * numbers::invalid_unsigned_int
+ * return value returns thus whether
* there is a constraint line for a given
* degree of freedom index. Note that
* this class has no notion of how many
* Creates a list of affected rows for
* distribution without any additional
* information, otherwise similar to the
- * other @p make_sorted_row_list
+ * other make_sorted_row_list()
* function.
*/
void
// check whether the
// constraints are really empty.
const unsigned int length = size();
-#ifdef DEBUG
+
// make sure that we are in the
// range of the vector
AssertIndexRange (length, total_row_indices.size()+1);
Assert (total_row_indices[i].constraint_position ==
numbers::invalid_unsigned_int,
ExcInternalError());
-#endif
step = length/2;
while (step > 0)
AssertIndexRange (column_end-1, global_rows.size());
const SparsityPattern & sparsity = sparse_matrix->get_sparsity_pattern();
-#ifndef DEBUG
+
if (sparsity.n_nonzero_elements() == 0)
return;
-#endif
+
const std::size_t * row_start = sparsity.get_rowstart_indices();
const unsigned int * sparsity_struct = sparsity.get_column_numbers();
const unsigned int row = global_rows.global_row(i);
const unsigned int loc_row = global_rows.local_row(i);
-#ifdef DEBUG
- const unsigned int * col_ptr = sparsity.n_nonzero_elements() == 0 ? 0 :
+ const unsigned int * col_ptr = sparsity.row_length(row) == 0 ? 0 :
&sparsity_struct[row_start[row]];
- number * val_ptr = sparsity.n_nonzero_elements() == 0 ? 0 :
+ number * val_ptr = sparsity.row_length(row) == 0 ? 0 :
&sparse_matrix->global_entry (row_start[row]);
-#else
- const unsigned int * col_ptr = &sparsity_struct[row_start[row]];
- number * val_ptr = &sparse_matrix->global_entry (row_start[row]);
-#endif
const bool optimize_diagonal = sparsity.optimize_diagonal();
unsigned int counter = optimize_diagonal;
* FullMatrix<double> M(IdentityMatrix(n));
* @endverbatim
*/
- explicit FullMatrix (const IdentityMatrix &id);
+ FullMatrix (const IdentityMatrix &id);
/**
* @}
*/
const unsigned int src_offset_j = 0);
/**
- * Adda single element at the
+ * Add a single element at the
* given position.
*/
- void add(const unsigned int row, const unsigned int column, const number value);
+ void add (const unsigned int row,
+ const unsigned int column,
+ const number value);
/**
* Add an array of values given by
Assert (!this->empty(), ExcEmptyMatrix());
const unsigned int size_m = m();
- for (unsigned l=0; l<size_m; ++l)
+ for (unsigned int l=0; l<size_m; ++l)
(*this)(i,l) += s*(*this)(j,l) + t*(*this)(k,l);
}
/**
* This function copies the data that has
* accumulated in the data buffer for ghost
- * indices to the owning processor. If the
- * optional argument @p add_ghost_data is set
- * to true, the data is added into the
- * respective positions of the owning
- * processor, otherwise the new data
- * overwrites the old content in the host
- * vector. In that case, data coming from
- * different processor to the same target
- * entry should be identical. However, no
- * checking is performed, so it is the user's
- * responsibility to ensure consistency of
- * data.
+ * indices to the owning processor.
*
- * For the meaning of this argument, see the
- * entry on
- * @ref GlossCompress "Compressing distributed vectors and matrices"
+ * For the meaning of this argument,
+ * see the entry on @ref
+ * GlossCompress "Compressing
+ * distributed vectors and matrices"
* in the glossary.
*/
- void compress (const bool add_ghost_data = true);
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
+
/**
* Fills the data field for ghost indices with
template <typename Number>
inline
void
- Vector<Number>::compress (const bool add_ghost_data)
+ Vector<Number>::compress (::dealii::VectorOperation::values operation)
{
compress_start ();
- compress_finish (add_ghost_data);
+ if (operation == ::dealii::VectorOperation::insert)
+ compress_finish (false);
+ else
+ compress_finish (true);
}
# include <deal.II/base/subscriptor.h>
# include <deal.II/lac/full_matrix.h>
# include <deal.II/lac/exceptions.h>
+# include <deal.II/lac/vector.h>
# include <petscmat.h>
# include <deal.II/base/std_cxx1x/shared_ptr.h>
* for more information.
* more information.
*/
- void compress ();
-
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
/**
* Return the value of the entry
* (<i>i,j</i>). This may be an
*/
PetscReal frobenius_norm () const;
+
+ /**
+ * Return the square of the norm
+ * of the vector $v$ with respect
+ * to the norm induced by this
+ * matrix,
+ * i.e. $\left(v,Mv\right)$. This
+ * is useful, e.g. in the finite
+ * element context, where the
+ * $L_2$ norm of a function
+ * equals the matrix norm with
+ * respect to the mass matrix of
+ * the vector representing the
+ * nodal values of the finite
+ * element function.
+ *
+ * Obviously, the matrix needs to
+ * be quadratic for this operation.
+ *
+ * The implementation of this function
+ * is not as efficient as the one in
+ * the @p MatrixBase class used in
+ * deal.II (i.e. the original one, not
+ * the PETSc wrapper class) since PETSc
+ * doesn't support this operation and
+ * needs a temporary vector.
+ *
+ * Note that if the current object
+ * represents a parallel distributed
+ * matrix (of type
+ * PETScWrappers::MPI::SparseMatrix),
+ * then the given vector has to be
+ * a distributed vector as
+ * well. Conversely, if the matrix is
+ * not distributed, then neither
+ * may the vector be.
+ */
+ PetscScalar matrix_norm_square (const VectorBase &v) const;
+
+
+ /**
+ * Compute the matrix scalar
+ * product $\left(u,Mv\right)$.
+ *
+ * The implementation of this function
+ * is not as efficient as the one in
+ * the @p MatrixBase class used in
+ * deal.II (i.e. the original one, not
+ * the PETSc wrapper class) since PETSc
+ * doesn't support this operation and
+ * needs a temporary vector.
+ *
+ * Note that if the current object
+ * represents a parallel distributed
+ * matrix (of type
+ * PETScWrappers::MPI::SparseMatrix),
+ * then both vectors have to be
+ * distributed vectors as
+ * well. Conversely, if the matrix is
+ * not distributed, then neither of the
+ * vectors may be.
+ */
+ PetscScalar matrix_scalar_product (const VectorBase &u,
+ const VectorBase &v) const;
+
+
#if DEAL_II_PETSC_VERSION_GTE(3,1,0)
/**
* Return the trace of the
#endif
is_symmetric (const double tolerance = 1.e-12);
-#if DEAL_II_PETSC_VERSION_GTE(2,3,0)
/**
* Test whether a matrix is
* Hermitian, i.e. it is the
PetscBool
#endif
is_hermitian (const double tolerance = 1.e-12);
-#endif
- /*
+ /**
* Abstract PETSc object that helps view
* in ASCII other PETSc objects. Currently
* this function simply writes non-zero
for (unsigned int i=0; i<v.size(); ++i)
(*this)(i) = v(i);
- compress ();
+ compress (::dealii::VectorOperation::insert);
return *this;
}
*/
~SolverData ();
-#if (PETSC_VERSION_MAJOR == 2) && (PETSC_VERSION_MINOR < 2)
- /**
- * A PETSc solver object.
- */
- SLES sles;
-#endif
/**
* Objects for Krylov subspace
* solvers and preconditioners.
virtual void set_solver_type (KSP &ksp) const;
};
+/**
+ * An implementation of the solver interface using the MUMPS lu solver
+ * through PETSc.
+ *
+ * @ingroup PETScWrappers
+ * @author Daniel Brauss, 2012
+ */
+ class SparseDirectMUMPS : public SolverBase
+ {
+ public:
+ /**
+ * Standardized data structure
+ * to pipe additional data to
+ * the solver.
+ */
+ struct AdditionalData
+ {};
+ /**
+ * constructor
+ */
+ SparseDirectMUMPS (SolverControl &cn,
+ const MPI_Comm &mpi_communicator = PETSC_COMM_SELF,
+ const AdditionalData &data = AdditionalData());
+
+ /**
+ * the method to solve the
+ * linear system. SolverBase has a method
+ * with this name already. However, the
+ * different function calls and objects used here
+ * were not easily incorporated
+ */
+ void solve (const MatrixBase &A,
+ VectorBase &x,
+ const VectorBase &b);
+
+ protected:
+ /**
+ * Store a copy of flags for this
+ * particular solver.
+ */
+ const AdditionalData additional_data;
+
+ virtual void set_solver_type (KSP &ksp) const;
+
+ private:
+ /**
+ * A function that is used in PETSc
+ * as a callback to check convergence.
+ * It takes the information provided
+ * from PETSc and checks it against
+ * deal.II's own SolverControl objects
+ * to see if convergence has been reached.
+ */
+ static
+#ifdef PETSC_USE_64BIT_INDICES
+ PetscErrorCode
+#else
+ int
+#endif
+ convergence_test (KSP ksp,
+#ifdef PETSC_USE_64BIT_INDICES
+ const PetscInt iteration,
+#else
+ const int iteration,
+#endif
+ const PetscReal residual_norm,
+ KSPConvergedReason *reason,
+ void *solver_control);
+ /**
+ * A structure that contains the
+ * PETSc solver and preconditioner
+ * objects. Since the solve member
+ * function in the base is not used
+ * here, the private SolverData struct
+ * located in the base could not be used
+ * either
+ */
+ struct SolverDataMUMPS
+ {
+ KSP ksp;
+ PC pc;
+ };
+
+ std_cxx1x::shared_ptr<SolverDataMUMPS> solver_data;
+ };
}
DEAL_II_NAMESPACE_CLOSE
for (unsigned int i=0; i<v.size(); ++i)
(*this)(i) = v(i);
- compress ();
+ compress (::dealii::VectorOperation::insert);
return *this;
}
# include <deal.II/base/subscriptor.h>
# include <deal.II/lac/exceptions.h>
+# include <deal.II/lac/vector.h>
# include <vector>
# include <utility>
*
* See @ref GlossCompress "Compressing distributed objects"
* for more information.
- * more information.
*/
- void compress ();
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
/**
* Set all components of the vector to
* collective piecewise
* multiply operation of
* <code>this</code> vector
- * with \f$v\f$.
+ * with <b>v</b>.
*/
VectorBase & mult (const VectorBase &v);
* Same as above, but a
* collective piecewise
* multiply operation of
- * \f$u\f$ with \f$v\f$.
+ * <b>u</b> with <b>v</b>.
*/
VectorBase & mult (const VectorBase &u,
const VectorBase &v);
*/
IndexSet ghost_indices;
- /**
- * PETSc doesn't allow to mix additions
- * to matrix entries and overwriting
- * them (to make synchronisation of
- * parallel computations
- * simpler). Since the interface of the
- * existing classes don't support the
- * notion of not interleaving things,
- * we have to emulate this
- * ourselves. The way we do it is to,
- * for each access operation, store
- * whether it is an insertion or an
- * addition. If the previous one was of
- * different type, then we first have
- * to flush the PETSc buffers;
- * otherwise, we can simply go on.
- *
- * The following structure and variable
- * declare and store the previous
- * state.
- */
- struct LastAction
- {
- enum Values { none, insert, add };
- };
-
-
/**
* Store whether the last action was a
* write or add operation. This
* even though the vector object they
* refer to is constant.
*/
- mutable LastAction::Values last_action;
+ mutable ::dealii::VectorOperation::values last_action;
/**
* Make the reference class a friend.
const VectorReference &
VectorReference::operator = (const PetscScalar &value) const
{
- Assert ((vector.last_action == VectorBase::LastAction::insert)
+ Assert ((vector.last_action == VectorOperation::insert)
||
- (vector.last_action == VectorBase::LastAction::none),
- ExcWrongMode (VectorBase::LastAction::insert,
+ (vector.last_action == VectorOperation::unknown),
+ ExcWrongMode (VectorOperation::insert,
vector.last_action));
#ifdef PETSC_USE_64BIT_INDICES
= VecSetValues (vector, 1, &petsc_i, &value, INSERT_VALUES);
AssertThrow (ierr == 0, ExcPETScError(ierr));
- vector.last_action = VectorBase::LastAction::insert;
+ vector.last_action = VectorOperation::insert;
return *this;
}
const VectorReference &
VectorReference::operator += (const PetscScalar &value) const
{
- Assert ((vector.last_action == VectorBase::LastAction::add)
+ Assert ((vector.last_action == VectorOperation::add)
||
- (vector.last_action == VectorBase::LastAction::none),
- ExcWrongMode (VectorBase::LastAction::add,
+ (vector.last_action == VectorOperation::unknown),
+ ExcWrongMode (VectorOperation::add,
vector.last_action));
- vector.last_action = VectorBase::LastAction::add;
+ vector.last_action = VectorOperation::add;
// we have to do above actions in any
// case to be consistent with the MPI
const VectorReference &
VectorReference::operator -= (const PetscScalar &value) const
{
- Assert ((vector.last_action == VectorBase::LastAction::add)
+ Assert ((vector.last_action == VectorOperation::add)
||
- (vector.last_action == VectorBase::LastAction::none),
- ExcWrongMode (VectorBase::LastAction::add,
+ (vector.last_action == VectorOperation::unknown),
+ ExcWrongMode (VectorOperation::add,
vector.last_action));
- vector.last_action = VectorBase::LastAction::add;
+ vector.last_action = VectorOperation::add;
// we have to do above actions in any
// case to be consistent with the MPI
const VectorReference &
VectorReference::operator *= (const PetscScalar &value) const
{
- Assert ((vector.last_action == VectorBase::LastAction::insert)
+ Assert ((vector.last_action == VectorOperation::insert)
||
- (vector.last_action == VectorBase::LastAction::none),
- ExcWrongMode (VectorBase::LastAction::insert,
+ (vector.last_action == VectorOperation::unknown),
+ ExcWrongMode (VectorOperation::insert,
vector.last_action));
- vector.last_action = VectorBase::LastAction::insert;
+ vector.last_action = VectorOperation::insert;
// we have to do above actions in any
// case to be consistent with the MPI
const VectorReference &
VectorReference::operator /= (const PetscScalar &value) const
{
- Assert ((vector.last_action == VectorBase::LastAction::insert)
+ Assert ((vector.last_action == VectorOperation::insert)
||
- (vector.last_action == VectorBase::LastAction::none),
- ExcWrongMode (VectorBase::LastAction::insert,
+ (vector.last_action == VectorOperation::unknown),
+ ExcWrongMode (VectorOperation::insert,
vector.last_action));
- vector.last_action = VectorBase::LastAction::insert;
+ vector.last_action = VectorOperation::insert;
// we have to do above actions in any
// case to be consistent with the MPI
const Vector<number2> &src,
bool adding) const
{
- // introduce the following typedef
- // since in the use of exceptions,
- // strict C++ requires us to
- // specify them fully as they are
- // from a template dependent base
- // class. thus, we'd have to write
- // PreconditionBlock<number,inverse_type>::ExcNoMatrixGivenToUse,
- // which is lengthy, but also poses
- // some problems to the
- // preprocessor due to the comma in
- // the template arg list. we could
- // then wrap the whole thing into
- // parentheses, but that creates a
- // parse error for gcc for the
- // exceptions that do not take
- // args...
- typedef PreconditionBlock<MATRIX,inverse_type> BaseClass;
Assert(this->A!=0, ExcNotInitialized());
const MATRIX &M=*this->A;
const bool transpose_diagonal,
const bool) const
{
- // introduce the following typedef
- // since in the use of exceptions,
- // strict C++ requires us to
- // specify them fully as they are
- // from a template dependent base
- // class. thus, we'd have to write
- // PreconditionBlock<number,inverse_type>::ExcNoMatrixGivenToUse,
- // which is lengthy, but also poses
- // some problems to the
- // preprocessor due to the comma in
- // the template arg list. we could
- // then wrap the whole thing into
- // parentheses, but that creates a
- // parse error for gcc for the
- // exceptions that do not take
- // args...
- typedef PreconditionBlock<MATRIX,inverse_type> BaseClass;
-
Assert (this->A!=0, ExcNotInitialized());
const MATRIX &M=*this->A;
const bool transpose_diagonal,
const bool) const
{
- // introduce the following typedef
- // since in the use of exceptions,
- // strict C++ requires us to
- // specify them fully as they are
- // from a template dependent base
- // class. thus, we'd have to write
- // PreconditionBlock<number,inverse_type>::ExcNoMatrixGivenToUse,
- // which is lengthy, but also poses
- // some problems to the
- // preprocessor due to the comma in
- // the template arg list. we could
- // then wrap the whole thing into
- // parentheses, but that creates a
- // parse error for gcc for the
- // exceptions that do not take
- // args...
- typedef PreconditionBlock<MATRIX,inverse_type> BaseClass;
-
Assert (this->A!=0, ExcNotInitialized());
const MATRIX &M=*this->A;
int,
<< "The number of partitions you gave is " << arg1
<< ", but must be greater than zero.");
+
+ /**
+ * Exception
+ */
+ DeclException1 (ExcMETISError,
+ int,
+ << " An error with error number " << arg1
+ << " occurred while calling a METIS function");
+
/**
* Exception
*/
* compute_eigenvalues(), you can
* access each eigenvalue here.
*/
- number eigenvalue(const unsigned i) const;
+ number eigenvalue(const unsigned int i) const;
//@}
///@name Miscellanea
//@{
void reinit (const ::dealii::BlockSparseMatrix<double> &deal_ii_sparse_matrix,
const double drop_tolerance=1e-13);
- /**
- * This function calls the compress()
- * command of all matrices after
- * the assembly is
- * completed. Note that all MPI
- * processes need to call this
- * command (whereas the individual
- * assembly routines will most probably
- * only be called on each processor
- * individually) before any
- * can complete it.
- */
- void compress ();
-
/**
* Returns the state of the
* matrix, i.e., whether
#ifdef DEAL_II_USE_TRILINOS
# include <deal.II/lac/trilinos_vector.h>
+# include <deal.II/lac/trilinos_parallel_block_vector.h>
# include <deal.II/lac/block_indices.h>
# include <deal.II/lac/block_vector_base.h>
# include <deal.II/lac/exceptions.h>
class BlockSparseMatrix;
- namespace MPI
- {
-/**
- * An implementation of block vectors based on the vector class
- * implemented in TrilinosWrappers. While the base class provides for
- * most of the interface, this class handles the actual allocation of
- * vectors and provides functions that are specific to the underlying
- * vector type.
- *
- * The model of distribution of data is such that each of the blocks
- * is distributed across all MPI processes named in the MPI
- * communicator. I.e. we don't just distribute the whole vector, but
- * each component. In the constructors and reinit() functions, one
- * therefore not only has to specify the sizes of the individual
- * blocks, but also the number of elements of each of these blocks to
- * be stored on the local process.
- *
- * @ingroup Vectors
- * @ingroup TrilinosWrappers
- * @see @ref GlossBlockLA "Block (linear algebra)"
- * @author Martin Kronbichler, Wolfgang Bangerth, 2008, 2009
- */
- class BlockVector : public BlockVectorBase<Vector>
- {
- public:
- /**
- * Typedef the base class for simpler
- * access to its own typedefs.
- */
- typedef BlockVectorBase<Vector> BaseClass;
-
- /**
- * Typedef the type of the underlying
- * vector.
- */
- typedef BaseClass::BlockType BlockType;
-
- /**
- * Import the typedefs from the base
- * class.
- */
- typedef BaseClass::value_type value_type;
- typedef BaseClass::pointer pointer;
- typedef BaseClass::const_pointer const_pointer;
- typedef BaseClass::reference reference;
- typedef BaseClass::const_reference const_reference;
- typedef BaseClass::size_type size_type;
- typedef BaseClass::iterator iterator;
- typedef BaseClass::const_iterator const_iterator;
-
- /**
- * Default constructor. Generate an
- * empty vector without any blocks.
- */
- BlockVector ();
-
- /**
- * Constructor. Generate a block
- * vector with as many blocks as
- * there are entries in @p
- * partitioning. Each Epetra_Map
- * contains the layout of the
- * distribution of data among the MPI
- * processes.
- */
- BlockVector (const std::vector<Epetra_Map> ¶llel_partitioning);
-
- /**
- * Constructor. Generate a block
- * vector with as many blocks as
- * there are entries in
- * @p partitioning. Each IndexSet
- * together with the MPI communicator
- * contains the layout of the
- * distribution of data among the MPI
- * processes.
- */
- BlockVector (const std::vector<IndexSet> ¶llel_partitioning,
- const MPI_Comm &communicator = MPI_COMM_WORLD);
-
- /**
- * Copy-Constructor. Set all the
- * properties of the parallel vector
- * to those of the given argument and
- * copy the elements.
- */
- BlockVector (const BlockVector &V);
-
- /**
- * Creates a block vector
- * consisting of
- * <tt>num_blocks</tt>
- * components, but there is no
- * content in the individual
- * components and the user has to
- * fill appropriate data using a
- * reinit of the blocks.
- */
- BlockVector (const unsigned int num_blocks);
-
- /**
- * Destructor. Clears memory
- */
- ~BlockVector ();
-
- /**
- * Copy operator: fill all
- * components of the vector that
- * are locally stored with the
- * given scalar value.
- */
- BlockVector &
- operator = (const value_type s);
-
- /**
- * Copy operator for arguments of
- * the same type.
- */
- BlockVector &
- operator = (const BlockVector &V);
-
- /**
- * Copy operator for arguments of
- * the localized Trilinos vector
- * type.
- */
- BlockVector &
- operator = (const ::dealii::TrilinosWrappers::BlockVector &V);
-
- /**
- * Another copy function. This
- * one takes a deal.II block
- * vector and copies it into a
- * TrilinosWrappers block
- * vector. Note that the number
- * of blocks has to be the same
- * in the vector as in the input
- * vector. Use the reinit()
- * command for resizing the
- * BlockVector or for changing
- * the internal structure of the
- * block components.
- *
- * Since Trilinos only works on
- * doubles, this function is
- * limited to accept only one
- * possible number type in the
- * deal.II vector.
- */
- template <typename Number>
- BlockVector &
- operator = (const ::dealii::BlockVector<Number> &V);
-
- /**
- * Reinitialize the BlockVector to
- * contain as many blocks as there
- * are Epetra_Maps given in the input
- * argument, according to the
- * parallel distribution of the
- * individual components described
- * in the maps.
- *
- * If <tt>fast==false</tt>, the vector
- * is filled with zeros.
- */
- void reinit (const std::vector<Epetra_Map> ¶llel_partitioning,
- const bool fast = false);
-
- /**
- * Reinitialize the BlockVector to
- * contain as many blocks as there
- * are index sets given in the input
- * argument, according to the
- * parallel distribution of the
- * individual components described
- * in the maps.
- *
- * If <tt>fast==false</tt>, the vector
- * is filled with zeros.
- */
- void reinit (const std::vector<IndexSet> ¶llel_partitioning,
- const MPI_Comm &communicator = MPI_COMM_WORLD,
- const bool fast = false);
-
- /**
- * Change the dimension to that
- * of the vector <tt>V</tt>. The same
- * applies as for the other
- * reinit() function.
- *
- * The elements of <tt>V</tt> are not
- * copied, i.e. this function is
- * the same as calling <tt>reinit
- * (V.size(), fast)</tt>.
- *
- * Note that you must call this
- * (or the other reinit()
- * functions) function, rather
- * than calling the reinit()
- * functions of an individual
- * block, to allow the block
- * vector to update its caches of
- * vector sizes. If you call
- * reinit() on one of the
- * blocks, then subsequent
- * actions on this object may
- * yield unpredictable results
- * since they may be routed to
- * the wrong block.
- */
- void reinit (const BlockVector &V,
- const bool fast = false);
-
- /**
- * Change the number of blocks to
- * <tt>num_blocks</tt>. The individual
- * blocks will get initialized with
- * zero size, so it is assumed that
- * the user resizes the
- * individual blocks by herself
- * in an appropriate way, and
- * calls <tt>collect_sizes</tt>
- * afterwards.
- */
- void reinit (const unsigned int num_blocks);
-
- /**
- * This reinit function is meant to
- * be used for parallel
- * calculations where some
- * non-local data has to be
- * used. The typical situation
- * where one needs this function is
- * the call of the
- * FEValues<dim>::get_function_values
- * function (or of some
- * derivatives) in parallel. Since
- * it is usually faster to retrieve
- * the data in advance, this
- * function can be called before
- * the assembly forks out to the
- * different processors. What this
- * function does is the following:
- * It takes the information in the
- * columns of the given matrix and
- * looks which data couples between
- * the different processors. That
- * data is then queried from the
- * input vector. Note that you
- * should not write to the
- * resulting vector any more, since
- * the some data can be stored
- * several times on different
- * processors, leading to
- * unpredictable results. In
- * particular, such a vector cannot
- * be used for matrix-vector
- * products as for example done
- * during the solution of linear
- * systems.
- */
- void import_nonlocal_data_for_fe (const TrilinosWrappers::BlockSparseMatrix &m,
- const BlockVector &v);
-
- /**
- * Compress the underlying
- * representation of the Trilinos
- * object, i.e. flush the buffers
- * of the vector object if it has
- * any. This function is
- * necessary after writing into a
- * vector element-by-element and
- * before anything else can be
- * done on it.
- *
- * The (defaulted) argument can
- * be used to specify the
- * compress mode
- * (<code>Add</code> or
- * <code>Insert</code>) in case
- * the vector has not been
- * written to since the last
- * time this function was
- * called. The argument is
- * ignored if the vector has
- * been added or written to
- * since the last time
- * compress() was called.
- *
- * See @ref GlossCompress "Compressing distributed objects"
- * for more information.
- * more information.
- */
- void compress (const Epetra_CombineMode last_action = Zero);
-
- /**
- * Returns the state of the
- * vector, i.e., whether
- * compress() needs to be
- * called after an operation
- * requiring data
- * exchange. Does only return
- * non-true values when used in
- * <tt>debug</tt> mode, since
- * it is quite expensive to
- * keep track of all operations
- * that lead to the need for
- * compress().
- */
- bool is_compressed () const;
-
- /**
- * Swap the contents of this
- * vector and the other vector
- * <tt>v</tt>. One could do this
- * operation with a temporary
- * variable and copying over the
- * data elements, but this
- * function is significantly more
- * efficient since it only swaps
- * the pointers to the data of
- * the two vectors and therefore
- * does not need to allocate
- * temporary storage and move
- * data around.
- *
- * Limitation: right now this
- * function only works if both
- * vectors have the same number
- * of blocks. If needed, the
- * numbers of blocks should be
- * exchanged, too.
- *
- * This function is analog to the
- * the swap() function of all C++
- * standard containers. Also,
- * there is a global function
- * swap(u,v) that simply calls
- * <tt>u.swap(v)</tt>, again in analogy
- * to standard functions.
- */
- void swap (BlockVector &v);
-
- /**
- * Print to a stream.
- */
- void print (std::ostream &out,
- const unsigned int precision = 3,
- const bool scientific = true,
- const bool across = true) const;
-
- /**
- * Exception
- */
- DeclException0 (ExcIteratorRangeDoesNotMatchVectorSize);
-
- /**
- * Exception
- */
- DeclException0 (ExcNonMatchingBlockVectors);
- };
-
-
-
-/*----------------------- Inline functions ----------------------------------*/
-
-
- inline
- BlockVector::BlockVector ()
- {}
-
-
-
- inline
- BlockVector::BlockVector (const std::vector<Epetra_Map> ¶llel_partitioning)
- {
- reinit (parallel_partitioning, false);
- }
-
-
-
- inline
- BlockVector::BlockVector (const std::vector<IndexSet> ¶llel_partitioning,
- const MPI_Comm &communicator)
- {
- reinit (parallel_partitioning, communicator, false);
- }
-
-
-
- inline
- BlockVector::BlockVector (const unsigned int num_blocks)
- {
- reinit (num_blocks);
- }
-
-
-
- inline
- BlockVector::BlockVector (const BlockVector& v)
- :
- BlockVectorBase<Vector > ()
- {
- this->components.resize (v.n_blocks());
- this->block_indices = v.block_indices;
-
- for (unsigned int i=0; i<this->n_blocks(); ++i)
- this->components[i] = v.components[i];
- }
-
-
-
- inline
- bool
- BlockVector::is_compressed () const
- {
- bool compressed = true;
- for (unsigned int row=0; row<n_blocks(); ++row)
- if (block(row).is_compressed() == false)
- {
- compressed = false;
- break;
- }
-
- return compressed;
- }
-
-
-
- template <typename Number>
- BlockVector &
- BlockVector::operator = (const ::dealii::BlockVector<Number> &v)
- {
- if (n_blocks() != v.n_blocks())
- {
- std::vector<unsigned int> block_sizes (v.n_blocks(), 0);
- block_indices.reinit (block_sizes);
- if (components.size() != n_blocks())
- components.resize(n_blocks());
- }
-
- for (unsigned int i=0; i<this->n_blocks(); ++i)
- this->components[i] = v.block(i);
-
- collect_sizes();
-
- return *this;
- }
-
-
- inline
- void
- BlockVector::swap (BlockVector &v)
- {
- Assert (n_blocks() == v.n_blocks(),
- ExcDimensionMismatch(n_blocks(),v.n_blocks()));
-
- for (unsigned int row=0; row<n_blocks(); ++row)
- block(row).swap (v.block(row));
- }
-
-
-
-/**
- * Global function which overloads the default implementation
- * of the C++ standard library which uses a temporary object. The
- * function simply exchanges the data of the two vectors.
- *
- * @relates TrilinosWrappers::MPI::BlockVector
- * @author Martin Kronbichler, Wolfgang Bangerth, 2008
- */
- inline
- void swap (BlockVector &u,
- BlockVector &v)
- {
- u.swap (v);
- }
-
- } /* end of namespace MPI */
-
-
-
-
/**
* An implementation of block vectors based on the vector class
* implemented in TrilinosWrappers. While the base class provides for
*/
~BlockVector ();
+ /**
+ * use compress(VectorOperation) instead
+ *
+ * @deprecated
+ *
+ * See @ref GlossCompress "Compressing
+ * distributed objects" for more
+ * information.
+ */
+ void compress (const Epetra_CombineMode last_action);
+
+ /**
+ * so it is not hidden
+ */
+ using BlockVectorBase<Vector>::compress;
+
/**
* Copy operator: fill all
* components of the vector that
}
+ inline
+ void
+ BlockVector::compress (const Epetra_CombineMode last_action)
+ {
+ ::dealii::VectorOperation::values last_action_;
+ if (last_action == Add)
+ last_action_ = ::dealii::VectorOperation::add;
+ else if (last_action == Insert)
+ last_action_ = ::dealii::VectorOperation::insert;
+ else
+ AssertThrow(false, ExcNotImplemented());
+
+ this->compress(last_action_);
+ }
+
inline
void
BlockVector::swap (BlockVector &v)
--- /dev/null
+//---------------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 2008, 2009, 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------------------------------------------------------
+#ifndef __deal2__trilinos_parallel_block_vector_h
+#define __deal2__trilinos_parallel_block_vector_h
+
+
+#include <deal.II/base/config.h>
+
+#ifdef DEAL_II_USE_TRILINOS
+
+# include <deal.II/lac/trilinos_vector.h>
+# include <deal.II/lac/block_indices.h>
+# include <deal.II/lac/block_vector_base.h>
+# include <deal.II/lac/exceptions.h>
+
+DEAL_II_NAMESPACE_OPEN
+
+ // forward declaration
+template <typename Number> class BlockVector;
+
+/*! @addtogroup TrilinosWrappers
+ *@{
+ */
+
+namespace TrilinosWrappers
+{
+ // forward declaration
+ namespace MPI
+ {
+ class BlockVector;
+ }
+ class BlockVector;
+ class BlockSparseMatrix;
+
+
+ namespace MPI
+ {
+/**
+ * An implementation of block vectors based on the vector class
+ * implemented in TrilinosWrappers. While the base class provides for
+ * most of the interface, this class handles the actual allocation of
+ * vectors and provides functions that are specific to the underlying
+ * vector type.
+ *
+ * The model of distribution of data is such that each of the blocks
+ * is distributed across all MPI processes named in the MPI
+ * communicator. I.e. we don't just distribute the whole vector, but
+ * each component. In the constructors and reinit() functions, one
+ * therefore not only has to specify the sizes of the individual
+ * blocks, but also the number of elements of each of these blocks to
+ * be stored on the local process.
+ *
+ * @ingroup Vectors
+ * @ingroup TrilinosWrappers
+ * @see @ref GlossBlockLA "Block (linear algebra)"
+ * @author Martin Kronbichler, Wolfgang Bangerth, 2008, 2009
+ */
+ class BlockVector : public BlockVectorBase<Vector>
+ {
+ public:
+ /**
+ * Typedef the base class for simpler
+ * access to its own typedefs.
+ */
+ typedef BlockVectorBase<Vector> BaseClass;
+
+ /**
+ * Typedef the type of the underlying
+ * vector.
+ */
+ typedef BaseClass::BlockType BlockType;
+
+ /**
+ * Import the typedefs from the base
+ * class.
+ */
+ typedef BaseClass::value_type value_type;
+ typedef BaseClass::pointer pointer;
+ typedef BaseClass::const_pointer const_pointer;
+ typedef BaseClass::reference reference;
+ typedef BaseClass::const_reference const_reference;
+ typedef BaseClass::size_type size_type;
+ typedef BaseClass::iterator iterator;
+ typedef BaseClass::const_iterator const_iterator;
+
+ /**
+ * Default constructor. Generate an
+ * empty vector without any blocks.
+ */
+ BlockVector ();
+
+ /**
+ * Constructor. Generate a block
+ * vector with as many blocks as
+ * there are entries in @p
+ * partitioning. Each Epetra_Map
+ * contains the layout of the
+ * distribution of data among the MPI
+ * processes.
+ */
+ BlockVector (const std::vector<Epetra_Map> ¶llel_partitioning);
+
+ /**
+ * Constructor. Generate a block
+ * vector with as many blocks as
+ * there are entries in
+ * @p partitioning. Each IndexSet
+ * together with the MPI communicator
+ * contains the layout of the
+ * distribution of data among the MPI
+ * processes.
+ */
+ BlockVector (const std::vector<IndexSet> ¶llel_partitioning,
+ const MPI_Comm &communicator = MPI_COMM_WORLD);
+
+ /**
+ * Copy-Constructor. Set all the
+ * properties of the parallel vector
+ * to those of the given argument and
+ * copy the elements.
+ */
+ BlockVector (const BlockVector &V);
+
+ /**
+ * Creates a block vector
+ * consisting of
+ * <tt>num_blocks</tt>
+ * components, but there is no
+ * content in the individual
+ * components and the user has to
+ * fill appropriate data using a
+ * reinit of the blocks.
+ */
+ BlockVector (const unsigned int num_blocks);
+
+ /**
+ * Destructor. Clears memory
+ */
+ ~BlockVector ();
+
+ /**
+ * Copy operator: fill all
+ * components of the vector that
+ * are locally stored with the
+ * given scalar value.
+ */
+ BlockVector &
+ operator = (const value_type s);
+
+ /**
+ * Copy operator for arguments of
+ * the same type.
+ */
+ BlockVector &
+ operator = (const BlockVector &V);
+
+ /**
+ * Copy operator for arguments of
+ * the localized Trilinos vector
+ * type.
+ */
+ BlockVector &
+ operator = (const ::dealii::TrilinosWrappers::BlockVector &V);
+
+ /**
+ * Another copy function. This
+ * one takes a deal.II block
+ * vector and copies it into a
+ * TrilinosWrappers block
+ * vector. Note that the number
+ * of blocks has to be the same
+ * in the vector as in the input
+ * vector. Use the reinit()
+ * command for resizing the
+ * BlockVector or for changing
+ * the internal structure of the
+ * block components.
+ *
+ * Since Trilinos only works on
+ * doubles, this function is
+ * limited to accept only one
+ * possible number type in the
+ * deal.II vector.
+ */
+ template <typename Number>
+ BlockVector &
+ operator = (const ::dealii::BlockVector<Number> &V);
+
+ /**
+ * Reinitialize the BlockVector to
+ * contain as many blocks as there
+ * are Epetra_Maps given in the input
+ * argument, according to the
+ * parallel distribution of the
+ * individual components described
+ * in the maps.
+ *
+ * If <tt>fast==false</tt>, the vector
+ * is filled with zeros.
+ */
+ void reinit (const std::vector<Epetra_Map> ¶llel_partitioning,
+ const bool fast = false);
+
+ /**
+ * Reinitialize the BlockVector to
+ * contain as many blocks as there
+ * are index sets given in the input
+ * argument, according to the
+ * parallel distribution of the
+ * individual components described
+ * in the maps.
+ *
+ * If <tt>fast==false</tt>, the vector
+ * is filled with zeros.
+ */
+ void reinit (const std::vector<IndexSet> ¶llel_partitioning,
+ const MPI_Comm &communicator = MPI_COMM_WORLD,
+ const bool fast = false);
+
+ /**
+ * Change the dimension to that
+ * of the vector <tt>V</tt>. The same
+ * applies as for the other
+ * reinit() function.
+ *
+ * The elements of <tt>V</tt> are not
+ * copied, i.e. this function is
+ * the same as calling <tt>reinit
+ * (V.size(), fast)</tt>.
+ *
+ * Note that you must call this
+ * (or the other reinit()
+ * functions) function, rather
+ * than calling the reinit()
+ * functions of an individual
+ * block, to allow the block
+ * vector to update its caches of
+ * vector sizes. If you call
+ * reinit() on one of the
+ * blocks, then subsequent
+ * actions on this object may
+ * yield unpredictable results
+ * since they may be routed to
+ * the wrong block.
+ */
+ void reinit (const BlockVector &V,
+ const bool fast = false);
+
+ /**
+ * Change the number of blocks to
+ * <tt>num_blocks</tt>. The individual
+ * blocks will get initialized with
+ * zero size, so it is assumed that
+ * the user resizes the
+ * individual blocks by herself
+ * in an appropriate way, and
+ * calls <tt>collect_sizes</tt>
+ * afterwards.
+ */
+ void reinit (const unsigned int num_blocks);
+
+ /**
+ * This reinit function is meant to
+ * be used for parallel
+ * calculations where some
+ * non-local data has to be
+ * used. The typical situation
+ * where one needs this function is
+ * the call of the
+ * FEValues<dim>::get_function_values
+ * function (or of some
+ * derivatives) in parallel. Since
+ * it is usually faster to retrieve
+ * the data in advance, this
+ * function can be called before
+ * the assembly forks out to the
+ * different processors. What this
+ * function does is the following:
+ * It takes the information in the
+ * columns of the given matrix and
+ * looks which data couples between
+ * the different processors. That
+ * data is then queried from the
+ * input vector. Note that you
+ * should not write to the
+ * resulting vector any more, since
+ * the some data can be stored
+ * several times on different
+ * processors, leading to
+ * unpredictable results. In
+ * particular, such a vector cannot
+ * be used for matrix-vector
+ * products as for example done
+ * during the solution of linear
+ * systems.
+ */
+ void import_nonlocal_data_for_fe (const TrilinosWrappers::BlockSparseMatrix &m,
+ const BlockVector &v);
+
+
+ /**
+ * use compress(VectorOperation) instead
+ *
+ * @deprecated
+ *
+ * See @ref GlossCompress "Compressing
+ * distributed objects" for more
+ * information.
+ */
+ void compress (const Epetra_CombineMode last_action);
+
+ /**
+ * so it is not hidden
+ */
+ using BlockVectorBase<Vector>::compress;
+
+
+ /**
+ * Returns the state of the
+ * vector, i.e., whether
+ * compress() needs to be
+ * called after an operation
+ * requiring data
+ * exchange. Does only return
+ * non-true values when used in
+ * <tt>debug</tt> mode, since
+ * it is quite expensive to
+ * keep track of all operations
+ * that lead to the need for
+ * compress().
+ */
+ bool is_compressed () const;
+
+ /**
+ * Swap the contents of this
+ * vector and the other vector
+ * <tt>v</tt>. One could do this
+ * operation with a temporary
+ * variable and copying over the
+ * data elements, but this
+ * function is significantly more
+ * efficient since it only swaps
+ * the pointers to the data of
+ * the two vectors and therefore
+ * does not need to allocate
+ * temporary storage and move
+ * data around.
+ *
+ * Limitation: right now this
+ * function only works if both
+ * vectors have the same number
+ * of blocks. If needed, the
+ * numbers of blocks should be
+ * exchanged, too.
+ *
+ * This function is analog to the
+ * the swap() function of all C++
+ * standard containers. Also,
+ * there is a global function
+ * swap(u,v) that simply calls
+ * <tt>u.swap(v)</tt>, again in analogy
+ * to standard functions.
+ */
+ void swap (BlockVector &v);
+
+ /**
+ * Print to a stream.
+ */
+ void print (std::ostream &out,
+ const unsigned int precision = 3,
+ const bool scientific = true,
+ const bool across = true) const;
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcIteratorRangeDoesNotMatchVectorSize);
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcNonMatchingBlockVectors);
+ };
+
+
+
+/*----------------------- Inline functions ----------------------------------*/
+
+
+ inline
+ BlockVector::BlockVector ()
+ {}
+
+
+
+ inline
+ BlockVector::BlockVector (const std::vector<Epetra_Map> ¶llel_partitioning)
+ {
+ reinit (parallel_partitioning, false);
+ }
+
+
+
+ inline
+ BlockVector::BlockVector (const std::vector<IndexSet> ¶llel_partitioning,
+ const MPI_Comm &communicator)
+ {
+ reinit (parallel_partitioning, communicator, false);
+ }
+
+
+
+ inline
+ BlockVector::BlockVector (const unsigned int num_blocks)
+ {
+ reinit (num_blocks);
+ }
+
+
+
+ inline
+ BlockVector::BlockVector (const BlockVector& v)
+ :
+ BlockVectorBase<Vector > ()
+ {
+ this->components.resize (v.n_blocks());
+ this->block_indices = v.block_indices;
+
+ for (unsigned int i=0; i<this->n_blocks(); ++i)
+ this->components[i] = v.components[i];
+ }
+
+
+
+ inline
+ bool
+ BlockVector::is_compressed () const
+ {
+ bool compressed = true;
+ for (unsigned int row=0; row<n_blocks(); ++row)
+ if (block(row).is_compressed() == false)
+ {
+ compressed = false;
+ break;
+ }
+
+ return compressed;
+ }
+
+
+
+ inline
+ void
+ BlockVector::compress (const Epetra_CombineMode last_action)
+ {
+ ::dealii::VectorOperation::values last_action_;
+ if (last_action == Add)
+ last_action_ = ::dealii::VectorOperation::add;
+ else if (last_action == Insert)
+ last_action_ = ::dealii::VectorOperation::insert;
+ else
+ AssertThrow(false, ExcNotImplemented());
+
+ this->compress(last_action_);
+ }
+
+
+
+ template <typename Number>
+ BlockVector &
+ BlockVector::operator = (const ::dealii::BlockVector<Number> &v)
+ {
+ if (n_blocks() != v.n_blocks())
+ {
+ std::vector<unsigned int> block_sizes (v.n_blocks(), 0);
+ block_indices.reinit (block_sizes);
+ if (components.size() != n_blocks())
+ components.resize(n_blocks());
+ }
+
+ for (unsigned int i=0; i<this->n_blocks(); ++i)
+ this->components[i] = v.block(i);
+
+ collect_sizes();
+
+ return *this;
+ }
+
+
+ inline
+ void
+ BlockVector::swap (BlockVector &v)
+ {
+ Assert (n_blocks() == v.n_blocks(),
+ ExcDimensionMismatch(n_blocks(),v.n_blocks()));
+
+ for (unsigned int row=0; row<n_blocks(); ++row)
+ block(row).swap (v.block(row));
+ }
+
+
+
+/**
+ * Global function which overloads the default implementation
+ * of the C++ standard library which uses a temporary object. The
+ * function simply exchanges the data of the two vectors.
+ *
+ * @relates TrilinosWrappers::MPI::BlockVector
+ * @author Martin Kronbichler, Wolfgang Bangerth, 2008
+ */
+ inline
+ void swap (BlockVector &u,
+ BlockVector &v)
+ {
+ u.swap (v);
+ }
+
+ } /* end of namespace MPI */
+
+}
+
+/*@}*/
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif // DEAL_II_USE_TRILINOS
+
+#endif
* See @ref GlossCompress "Compressing distributed objects"
* for more information.
*/
- void compress ();
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
/**
* Set the element (<i>i,j</i>)
inline
void
- SparseMatrix::compress ()
+ SparseMatrix::compress (::dealii::VectorOperation::values /*operation*/)
{
// flush buffers
int ierr;
if (vector.get() != 0 && vector->Map().SameAs(parallel_partitioner))
vector.reset (new Epetra_FEVector(parallel_partitioner));
+ has_ghosts = vector->Map().UniqueGIDs()==false;
+
const int size = parallel_partitioner.NumMyElements();
// Need to copy out values, since the
*
* See @ref GlossCompress "Compressing distributed objects"
* for more information.
- * more information.
*/
- void compress (const Epetra_CombineMode last_action = Zero);
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown);
+
+ /**
+ * @deprecated
+ */
+ void compress (const Epetra_CombineMode last_action);
/**
* Returns the state of the
* To figure out which elements
* exactly are stored locally,
* use local_range().
+ *
+ * If the vector contains ghost
+ * elements, they are included in
+ * this number.
*/
unsigned int local_size () const;
/**
* Return if the vector contains ghost
- * elements.
+ * elements. This answer is true if there
+ * are ghost elements on at least one
+ * process.
*/
bool has_ghost_elements() const;
*/
bool compressed;
+ /**
+ * Whether this vector has ghost elements. This is true
+ * on all processors even if only one of them has any
+ * ghost elements.
+ */
+ bool has_ghosts;
+
/**
* An Epetra distibuted vector
* type. Requires an existing
bool
VectorBase::has_ghost_elements() const
{
- return vector->Map().UniqueGIDs()==false;
+ return has_ghosts;
}
inline
void
- VectorBase::compress (const Epetra_CombineMode given_last_action)
+ VectorBase::compress (const Epetra_CombineMode last_action)
{
- Epetra_CombineMode mode = (last_action != Zero) ?
- last_action : given_last_action;
+ ::dealii::VectorOperation::values last_action_;
+ if (last_action == Add)
+ last_action_ = ::dealii::VectorOperation::add;
+ else if (last_action == Insert)
+ last_action_ = ::dealii::VectorOperation::insert;
+ else
+ AssertThrow(false, ExcNotImplemented());
+
+ compress(last_action_);
+ }
+
+
+
+ inline
+ void
+ VectorBase::compress (::dealii::VectorOperation::values given_last_action)
+ {
+ //Select which mode to send to
+ //Trilinos. Note that we use last_action
+ //if available and ignore what the user
+ //tells us to detect wrongly mixed
+ //operations. Typically given_last_action
+ //is only used on machines that do not
+ //execute an operation (because they have
+ //no own cells for example).
+ Epetra_CombineMode mode = last_action;
+ if (last_action == Zero)
+ {
+ if (given_last_action==::dealii::VectorOperation::add)
+ mode = Add;
+ else if (given_last_action==::dealii::VectorOperation::insert)
+ mode = Insert;
+ }
+
#ifdef DEBUG
# ifdef DEAL_II_COMPILER_SUPPORTS_MPI
// check that every process has decided
*@{
*/
+/**
+ * This enum keeps track of the current operation in parallel linear algebra
+ * objects like Vectors and Matrices.
+ *
+ * It is used in the various compress() functions. They also exist in serial
+ * codes for compatibility and are empty there.
+ *
+ * See @ref GlossCompress "Compressing distributed objects" for more
+ * information.
+ */
+struct VectorOperation
+{
+ enum values { unknown, insert, add };
+};
+
/**
* Numerical vector of data. For this class there are different types
* this class, it is immaterial and thus
* an empty function.
*/
- void compress () const;
+ void compress (::dealii::VectorOperation::values operation
+ =::dealii::VectorOperation::unknown) const;
/**
* Change the dimension of the vector to
template <typename Number>
inline
void
-Vector<Number>::compress () const
+Vector<Number>::compress (::dealii::VectorOperation::values) const
{}
{
grad_out[comp][d] = (jac[d][0] *
this->gradients_quad[comp][0][q_point]);
- for (unsigned e=1; e<dim; ++e)
+ for (unsigned int e=1; e<dim; ++e)
grad_out[comp][d] += (jac[d][e] *
this->gradients_quad[comp][e][q_point]);
}
for (unsigned int d=0; d<dim; ++d)
{
VectorizedArray<Number> new_val = jac[0][d] * grad_in[comp][0];
- for (unsigned e=1; e<dim; ++e)
+ for (unsigned int e=1; e<dim; ++e)
new_val += (jac[e][d] * grad_in[comp][e]);
this->gradients_quad[comp][d][q_point] = new_val * JxW;
}
for (unsigned int d=0; d<dim; ++d)
{
grad_out[d] = (jac[d][0] * this->gradients_quad[0][0][q_point]);
- for (unsigned e=1; e<dim; ++e)
+ for (unsigned int e=1; e<dim; ++e)
grad_out[d] += (jac[d][e] * this->gradients_quad[0][e][q_point]);
}
}
for (unsigned int d=0; d<dim; ++d)
{
VectorizedArray<Number> new_val = jac[0][d] * grad_in[0];
- for (unsigned e=1; e<dim; ++e)
+ for (unsigned int e=1; e<dim; ++e)
new_val += jac[e][d] * grad_in[e];
this->gradients_quad[0][d][q_point] = new_val * JxW;
}
this->cell_type == internal::MatrixFreeFunctions::general ?
this->jacobian[q_point] : this->jacobian[0];
divergence = (jac[0][0] * this->gradients_quad[0][0][q_point]);
- for (unsigned e=1; e<dim; ++e)
+ for (unsigned int e=1; e<dim; ++e)
divergence += (jac[0][e] * this->gradients_quad[0][e][q_point]);
for (unsigned int d=1; d<dim; ++d)
- for (unsigned e=0; e<dim; ++e)
+ for (unsigned int e=0; e<dim; ++e)
divergence += (jac[d][e] * this->gradients_quad[d][e][q_point]);
}
return divergence;
this->quadrature_weights[q_point]) * div_in;
for (unsigned int d=0; d<dim; ++d)
{
- for (unsigned e=0; e<dim; ++e)
+ for (unsigned int e=0; e<dim; ++e)
this->gradients_quad[d][e][q_point] = jac[d][e] * fac;
}
}
for (unsigned int d=0; d<dim; ++d)
{
VectorizedArray<Number> new_val = jac[0][d] * weighted[comp][0];
- for (unsigned e=1; e<dim; ++e)
+ for (unsigned int e=1; e<dim; ++e)
new_val += jac[e][d] * weighted[comp][e];
this->gradients_quad[comp][d][q_point] = new_val;
}
* store arrays of data for all cells
* to be worked on. This number is
* approximately
- * n_physical_cells()/VectorizedArray@<Number@>::n_array_elements
+ * n_physical_cells()/VectorizedArray::n_array_elements
* (depending on how many cell chunks
* that do not get filled up
* completely).
return std::pair<unsigned int,unsigned int> (range.second,range.second);
}
- const unsigned int fe_index =
+ const unsigned int fe_index =
dof_info[vector_component].fe_index_from_degree(degree);
if (fe_index >= dof_info[vector_component].max_fe_index)
return std::pair<unsigned int,unsigned int>(range.second, range.second);
if(task_info.use_partition_partition == true)
{
internal::update_ghost_values_start(src);
- tbb::empty_task* root = new( tbb::task::allocate_root() )
+ tbb::empty_task* root = new( tbb::task::allocate_root() )
tbb::empty_task;
unsigned int evens = task_info.evens;
unsigned int odds = task_info.odds;
root->set_ref_count(evens+1);
unsigned int n_blocked_workers = task_info.n_blocked_workers;
unsigned int n_workers = task_info.n_workers;
- std::vector<internal::partition::PartitionWork<Worker,false>*>
+ std::vector<internal::partition::PartitionWork<Worker,false>*>
worker(n_workers);
- std::vector<internal::partition::PartitionWork<Worker,true>*>
+ std::vector<internal::partition::PartitionWork<Worker,true>*>
blocked_worker(n_blocked_workers);
- internal::MPIComCompress<OutVector> *worker_compr =
+ internal::MPIComCompress<OutVector> *worker_compr =
new(root->allocate_child())
internal::MPIComCompress<OutVector>(dst);
worker_compr->set_ref_count(1);
/**
* A class that, instead of assembling into a matrix or vector,
- * outputs the results on a cell to a gnuplot patch. This works only
- * for elements with support points. The first dim data vectors will
- * be the coordinates, the following are the data.
+ * outputs the results on a cell to a gnuplot patch.
+ *
+ * This assembler expects that LocalResults contains quadrature values
+ * set with LocalResults::quadrature_value(). When it is initialized
+ * with the number of quadrature points in a single (!) space
+ * direction and the number of data fields to be displayed, it
+ * initializes LocalResults automatically. The number of data fields
+ * in local results will be increased by dim in order to accommodate
+ * for the coordinates of the data points.
+ *
+ * While data slots for the space coordinates are allocated
+ * automatically, these coordinates are not entered. It is up to the
+ * user to enter the coordinates in the first dim data entries at
+ * every point. This adds the flexibility to output transformed
+ * coordinates or even something completely different.
*
* @note In the current implementation, only cell data can be written.
+ *
+ * @author Guido Kanschat
+ * @date 2011, 2012
*/
class GnuplotPatch
{
* actual Quadrature used to
* create the patches. The
* total number of data
- * vectors produced is n+dim
- * and the first dim will be
+ * vectors produced is <tt>n+dim</tt>
+ * and the first dim should be
* the space coordinates of
- * the points.
+ * the points. Nevertheless,
+ * it is up to the user to
+ * set these values to
+ * whatever is desired.
*/
void initialize (const unsigned int n_points,
const unsigned int n_vectors);
void initialize_info(DoFInfo<dim>& info, bool face);
/**
- * Assemble the local values
- * into the global vectors.
+ * Write the patch to the
+ * output stream.
*/
template<int dim>
void assemble(const DoFInfo<dim>& info);
/**
- * Assemble both local values
- * into the global vectors.
+ * @warning Not implemented yet
*/
template<int dim>
void assemble(const DoFInfo<dim>& info1,
private:
/**
* Write the object T either
- * to the stream #os, if initialize_stream
+ * to the stream #os, if initialize_stream()
* has been called, or to
* @p deallog if no pointer has
* been set.
* A copy of the transferred
* finite element is stored.
*/
- virtual void distribute_dofs (const FiniteElement<dim,spacedim> &,
- const unsigned int offset = 0);
+ virtual void distribute_dofs (const FiniteElement<dim,spacedim> &);
/**
* Clear all data of this object
#include <deal.II/lac/block_vector.h>
#include <deal.II/lac/constraint_matrix.h>
-#ifdef DEAL_PREFER_MATRIX_EZ
-# include <deal.II/lac/sparse_matrix_ez.h>
-# include <deal.II/lac/block_sparse_matrix_ez.h>
-#else
-# include <deal.II/lac/sparsity_pattern.h>
-# include <deal.II/lac/block_sparsity_pattern.h>
-#endif
+#include <deal.II/lac/sparsity_pattern.h>
+#include <deal.II/lac/block_sparsity_pattern.h>
#include <deal.II/lac/vector_memory.h>
#include <deal.II/multigrid/mg_base.h>
{
std::size_t result = sizeof(*this);
result += sizeof(unsigned int) * sizes.size();
-#ifdef DEAL_PREFER_MATRIX_EZ
- std::vector<std_cxx1x::shared_ptr<SparseMatrixEZ<double> > >::const_iterator m;
- const std::vector<std_cxx1x::shared_ptr<SparseMatrixEZ<double> > >::const_iterator end = prolongation_matrices.end();
- for (m = prolongation_matrices.begin(); m != end ; ++m)
- result += *m->memory_consumption();
-#else
+
for (unsigned int i=0;i<prolongation_matrices.size();++i)
result += prolongation_matrices[i]->memory_consumption()
+ prolongation_sparsities[i]->memory_consumption();
-#endif
+
return result;
}
#include <deal.II/base/config.h>
#include <deal.II/lac/block_vector.h>
-#ifdef DEAL_PREFER_MATRIX_EZ
-# include <deal.II/lac/sparse_matrix_ez.h>
-# include <deal.II/lac/block_sparse_matrix_ez.h>
-#else
-# include <deal.II/lac/sparsity_pattern.h>
-# include <deal.II/lac/block_sparsity_pattern.h>
-#endif
+#include <deal.II/lac/sparsity_pattern.h>
+#include <deal.II/lac/block_sparsity_pattern.h>
#include <deal.II/lac/vector_memory.h>
#include <deal.II/lac/block_matrix_array.h>
#include <deal.II/lac/block_vector.h>
#include <deal.II/lac/constraint_matrix.h>
-#ifdef DEAL_PREFER_MATRIX_EZ
-# include <deal.II/lac/sparse_matrix_ez.h>
-# include <deal.II/lac/block_sparse_matrix_ez.h>
-#else
-# include <deal.II/lac/sparsity_pattern.h>
-# include <deal.II/lac/block_sparsity_pattern.h>
-#endif
+#include <deal.II/lac/sparsity_pattern.h>
+#include <deal.II/lac/block_sparsity_pattern.h>
#include <deal.II/lac/vector_memory.h>
#include <deal.II/multigrid/mg_base.h>
*
* The way the difference quotients are computed on cell $K$ is the
* following (here described for the approximation of the gradient of
- * a finite element field, but see below for higher derivatived): let
+ * a finite element field, but see below for higher derivatives): let
* $K'$ be a neighboring cell, and let $y_{K'}=x_{K'}-x_K$ be the
* distance vector between the centers of the two cells, then
* $ \frac{u_h(x_{K'}) - u_h(x_K)}{ \|y_{K'}\| }$
*
* The @p material_id parameter has a similar
* meaning: if not set to its default value
- * (which is types::invalid_material_id),
+ * (which is numbers::invalid_material_id),
* it means that indicators will only be
* computed for cells with this particular
* material id.
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = numbers::invalid_unsigned_int,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Calls the @p estimate
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Same function as above, but
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Calls the @p estimate
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim>* coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Calls the @p estimate
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Same function as above, but
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Calls the @p estimate
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
const std::vector<bool> &component_mask = std::vector<bool>(),
const Function<spacedim> *coefficients = 0,
const unsigned int n_threads = multithread_info.n_default_threads,
- const types::subdomain_id_t subdomain_id = types::invalid_subdomain_id,
- const types::material_id_t material_id = types::invalid_material_id);
+ const types::subdomain_id subdomain_id = types::invalid_subdomain_id,
+ const types::material_id material_id = numbers::invalid_material_id);
/**
* Exception
// further information on this license.
//
//---------------------------------------------------------------------------
-#ifndef __deal2__matrices_h
-#define __deal2__matrices_h
-
-
-#include <deal.II/base/config.h>
-#include <deal.II/base/exceptions.h>
-#include <deal.II/base/thread_management.h>
-#include <deal.II/dofs/function_map.h>
-
-#include <map>
-
-DEAL_II_NAMESPACE_OPEN
-
-
-// forward declarations
-template <int dim> class Quadrature;
-
-template<typename number> class Vector;
-template<typename number> class FullMatrix;
-template<typename number> class SparseMatrix;
-
-template <typename number> class BlockSparseMatrix;
-template <typename Number> class BlockVector;
-
-template <int dim, int spacedim> class Mapping;
-template <int dim, int spacedim> class DoFHandler;
-template <int dim, int spacedim> class MGDoFHandler;
-template <int dim, int spacedim> class FEValues;
-
-namespace hp
-{
- template <int> class QCollection;
- template <int, int> class MappingCollection;
- template <int, int> class DoFHandler;
-}
-
-
-#ifdef DEAL_II_USE_PETSC
-namespace PETScWrappers
-{
- class SparseMatrix;
- class Vector;
- namespace MPI
- {
- class SparseMatrix;
- class BlockSparseMatrix;
- class Vector;
- class BlockVector;
- }
-}
-#endif
-
-#ifdef DEAL_II_USE_TRILINOS
-namespace TrilinosWrappers
-{
- class SparseMatrix;
- class Vector;
- class BlockSparseMatrix;
- class BlockVector;
- namespace MPI
- {
- class Vector;
- class BlockVector;
- }
-}
-#endif
-
-
-/**
- * This namespace provides functions that assemble certain standard matrices for a
- * given triangulation, using a given finite element, a given mapping and a
- * quadrature formula.
- *
- *
- * <h3>Conventions for all functions</h3>
- *
- * There exist two versions of each function. One with a Mapping
- * argument and one without. If a code uses a mapping different from
- * MappingQ1 the functions <em>with</em> mapping argument should
- * be used. Code that uses only MappingQ1 may also use the
- * functions <em>without</em> Mapping argument. Each of these
- * latter functions create a MappingQ1 object and just call the
- * respective functions with that object as mapping argument.
- *
- * All functions take a sparse matrix object to hold the matrix to be
- * created. The functions assume that the matrix is initialized with a
- * sparsity pattern (SparsityPattern) corresponding to the given degree
- * of freedom handler, i.e. the sparsity structure is already as needed.
- * You can do this by calling the DoFTools::make_sparsity_pattern()
- * function.
- *
- * Furthermore it is assumed that no relevant data is in the matrix. Some
- * entries will be overwritten and some others will contain invalid data if
- * the matrix wasn't empty before. Therefore you may want to clear the matrix
- * before assemblage.
- *
- * All created matrices are `raw': they are not condensed,
- * i.e. hanging nodes are not eliminated. The reason is that you may
- * want to add several matrices and could then condense afterwards
- * only once, instead of for every matrix. To actually do computations
- * with these matrices, you have to condense the matrix using the
- * ConstraintMatrix::condense function; you also have to
- * condense the right hand side accordingly and distribute the
- * solution afterwards.
- *
- * If you want to use boundary conditions with the matrices generated
- * by the functions of this class, you have to use a function like
- * <tt>ProblemBase<>::apply_dirichlet_bc</tt> to matrix and right hand
- * side.
- *
- *
- * <h3>Supported matrices</h3>
- *
- * At present there are functions to create the following matrices:
- * <ul>
- * <li> @p create_mass_matrix: create the matrix with entries
- * $m_{ij} = \int_\Omega \phi_i(x) \phi_j(x) dx$ by numerical
- * quadrature. Here, the $\phi_i$ are the basis functions of the
- * finite element space given.
- *
- * A coefficient may be given to evaluate
- * $m_{ij} = \int_\Omega a(x) \phi_i(x) \phi_j(x) dx$ instead.
- *
- * <li> @p create_laplace_matrix: create the matrix with entries
- * $a_{ij} = \int_\Omega \nabla\phi_i(x) \nabla\phi_j(x) dx$ by
- * numerical quadrature.
- *
- * Again, a coefficient may be given to evaluate
- * $a_{ij} = \int_\Omega a(x) \nabla\phi_i(x) \nabla\phi_j(x) dx$ instead.
- * </ul>
- *
- * Make sure that the order of the Quadrature formula given to these
- * functions is sufficiently high to compute the matrices with the
- * required accuracy. For the choice of this quadrature rule you need
- * to take into account the polynomial degree of the FiniteElement
- * basis functions, the roughness of the coefficient @p a, as well as
- * the degree of the given @p Mapping (if any).
- *
- * Note, that for system elements the mass matrix and the laplace matrix is
- * implemented such that each components couple only with itself, i.e. there
- * is no coupling of shape functions belonging to different components. If the
- * degrees of freedom have been sorted according to their vector component
- * (e.g., using DoFRenumbering::component_wise()), then the resulting matrices
- * will be block diagonal.
- *
- * If the finite element for which the mass matrix or the laplace
- * matrix is to be built has more than one component, this function
- * accepts a single coefficient as well as a vector valued coefficient
- * function. For the latter case make sure that the number of
- * components coincides with the number of components of the system
- * finite element.
- *
- *
- * <h3>Matrices on the boundary</h3>
- *
- * The create_boundary_mass_matrix() creates the matrix with entries $m_{ij} =
- * \int_{\Gamma} \phi_i \phi_j dx$, where $\Gamma$ is the union of boundary
- * parts with indicators contained in a FunctionMap passed to the function
- * (i.e. if you want to set up the mass matrix for the parts of the boundary
- * with indicators zero and 2, you pass the function a map of <tt>unsigned
- * char</tt>s as parameter @p boundary_functions containing the keys zero and
- * 2). The size of the matrix is equal to the number of degrees of freedom
- * that have support on the boundary, i.e. it is <em>not</em> a matrix on all
- * degrees of freedom, but only a subset. (The $\phi_i$ in the formula are
- * this subsect of basis functions which have at least part of their support
- * on $\Gamma$.) In order to determine which shape functions are to be
- * considered, and in order to determine in which order, the function takes a
- * @p dof_to_boundary_mapping; this object maps global DoF numbers to a
- * numbering of the degrees of freedom located on the boundary, and can be
- * obtained using the function DoFTools::map_dof_to_boundary_indices().
- *
- * In order to work, the function needs a matrix of the correct size, built on
- * top of a corresponding sparsity pattern. Since we only work on a subset of
- * the degrees of freedom, we can't use the matrices and sparsity patterns
- * that are created for the entire set of degrees of freedom. Rather, you
- * should use the DoFHandler::make_boundary_sparsity_pattern() function to
- * create the correct sparsity pattern, and build a matrix on top of it.
- *
- * Note that at present there is no function that computes the mass matrix for
- * <em>all</em> shape functions, though such a function would be trivial to
- * implement.
- *
- *
- * <h3>Right hand sides</h3>
- *
- * In many cases, you will not only want to build the matrix, but also
- * a right hand side, which will give a vector with
- * $f_i = \int_\Omega f(x) \phi_i(x) dx$. For this purpose, each function
- * exists in two versions, one only building the matrix and one also
- * building the right hand side vector. If you want to create a right
- * hand side vector without creating a matrix, you can use the
- * VectorTools::create_right_hand_side() function. The use of the
- * latter may be useful if you want to create many right hand side
- * vectors.
- *
- * @ingroup numerics
- * @author Wolfgang Bangerth, 1998, Ralf Hartmann, 2001
- */
-namespace MatrixCreator
-{
- /**
- * Assemble the mass matrix. If no
- * coefficient is given, it is assumed
- * to be unity.
- *
- * If the library is configured
- * to use multithreading, this
- * function works in parallel.
- *
- * See the general doc of this class
- * for more information.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Calls the create_mass_matrix()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Assemble the mass matrix and a
- * right hand side vector. If no
- * coefficient is given, it is
- * assumed to be unity.
- *
- * If the library is configured
- * to use multithreading, this
- * function works in parallel.
- *
- * See the general doc of this
- * class for more information.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
- /**
- * Calls the create_mass_matrix()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
- /**
- * Same function as above, but for hp
- * objects.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Same function as above, but for hp
- * objects.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Same function as above, but for hp
- * objects.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
- /**
- * Same function as above, but for hp
- * objects.
- */
- template <int dim, typename number, int spacedim>
- void create_mass_matrix (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<number> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
-
- /**
- * Assemble the mass matrix and a
- * right hand side vector along
- * the boundary.
- *
- * The matrix is assumed to
- * already be initialized with a
- * suiting sparsity pattern (the
- * DoFHandler provides an
- * appropriate function).
- *
- * If the library is configured
- * to use multithreading, this
- * function works in parallel.
- *
- * @arg @p weight: an optional
- * weight for the computation of
- * the mass matrix. If no weight
- * is given, it is set to one.
- *
- * @arg @p component_mapping: if
- * the components in @p
- * boundary_functions and @p dof
- * do not coincide, this vector
- * allows them to be remapped. If
- * the vector is not empty, it
- * has to have one entry for each
- * component in @p dof. This
- * entry is the component number
- * in @p boundary_functions that
- * should be used for this
- * component in @p dof. By
- * default, no remapping is
- * applied.
- *
- * @todo This function does not
- * work for finite elements with
- * cell-dependent shape functions.
- */
- template <int dim, int spacedim>
-
- void create_boundary_mass_matrix (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim-1> &q,
- SparseMatrix<double> &matrix,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
- const Function<spacedim> * const weight = 0,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
-// * Same function, but for 1d.
-// */
-//
-// void create_boundary_mass_matrix (const Mapping<1,1> &mapping,
-// const DoFHandler<1,1> &dof,
-// const Quadrature<0> &q,
-// SparseMatrix<double> &matrix,
-// const FunctionMap<1>::type &boundary_functions,
-// Vector<double> &rhs_vector,
-// std::vector<unsigned int>&dof_to_boundary_mapping,
-// const Function<1> * const a = 0);
-// //codimension 1
-//
-// void create_boundary_mass_matrix (const Mapping<1,2> &mapping,
-// const DoFHandler<1,2> &dof,
-// const Quadrature<0> &q,
-// SparseMatrix<double> &matrix,
-// const FunctionMap<2>::type &boundary_functions,
-// Vector<double> &rhs_vector,
-// std::vector<unsigned int>&dof_to_boundary_mapping,
-// const Function<2> * const a = 0);
-
-
-
- /**
- * Calls the
- * create_boundary_mass_matrix()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
-
- void create_boundary_mass_matrix (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim-1> &q,
- SparseMatrix<double> &matrix,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
- const Function<spacedim> * const a = 0,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
- /**
- * Same function as above, but for hp
- * objects.
- */
- template <int dim, int spacedim>
-
- void create_boundary_mass_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim-1> &q,
- SparseMatrix<double> &matrix,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
- const Function<spacedim> * const a = 0,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
- /**
- * Same function as above, but for hp
- * objects.
- */
-//
-// void create_boundary_mass_matrix (const hp::MappingCollection<1,1> &mapping,
-// const hp::DoFHandler<1,1> &dof,
-// const hp::QCollection<0> &q,
-// SparseMatrix<double> &matrix,
-// const FunctionMap<1>::type &boundary_functions,
-// Vector<double> &rhs_vector,
-// std::vector<unsigned int>&dof_to_boundary_mapping,
-// const Function<1> * const a = 0);
-
- /**
- * Same function as above, but for hp
- * objects.
- */
- template <int dim, int spacedim>
-
- void create_boundary_mass_matrix (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim-1> &q,
- SparseMatrix<double> &matrix,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
- const Function<spacedim> * const a = 0,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
- /**
- * Assemble the Laplace
- * matrix. If no coefficient is
- * given, it is assumed to be
- * constant one.
- *
- * If the library is configured
- * to use multithreading, this
- * function works in parallel.
- *
- * See the general doc of this
- * class for more information.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Calls the
- * create_laplace_matrix()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Assemble the Laplace matrix
- * and a right hand side
- * vector. If no coefficient is
- * given, it is assumed to be
- * constant one.
- *
- * If the library is configured
- * to use multithreading, this
- * function works in parallel.
- *
- * See the general doc of this
- * class for more information.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
- /**
- * Calls the
- * create_laplace_matrix()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
- /**
- * Like the functions above, but for hp
- * dof handlers, mappings, and quadrature
- * collections.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Like the functions above, but for hp
- * dof handlers, mappings, and quadrature
- * collections.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> * const a = 0);
-
- /**
- * Like the functions above, but for hp
- * dof handlers, mappings, and quadrature
- * collections.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
- /**
- * Like the functions above, but for hp
- * dof handlers, mappings, and quadrature
- * collections.
- */
- template <int dim, int spacedim>
- void create_laplace_matrix (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- SparseMatrix<double> &matrix,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const Function<spacedim> * const a = 0);
-
- /**
- * Exception
- */
- DeclException0 (ExcComponentMismatch);
-}
-
-
-
-/**
- * Provide a collection of functions operating on matrices. These include
- * the application of boundary conditions to a linear system of equations
- * and others.
- *
- *
- * <h3>Boundary conditions</h3>
- *
- * The apply_boundary_values() function inserts boundary conditions
- * into a system of equations. To actually do this you have to
- * specify a list of degree of freedom indices along with the values
- * these degrees of freedom shall assume. To see how to get such a
- * list, see the discussion of the
- * VectorTools::interpolate_boundary_values function.
- *
- * There are two ways to incorporate fixed degrees of freedom such as boundary
- * nodes into a linear system, as discussed below.
- *
- *
- * <h3>Global elimination</h3>
- *
- * In the first method, we first assemble the global linear system without
- * respect for fixed degrees of freedom, and in a second step eliminate them
- * again from the linear system. The inclusion into the assembly process is as
- * follows: when the matrix and vectors are set up, a list of nodes subject to
- * dirichlet bc is made and matrix and vectors are modified accordingly. This
- * is done by deleting all entries in the matrix in the line of this degree of
- * freedom, setting the main diagonal entry to a suitable positive value and
- * the right hand side element to a value so that the solution of the linear
- * system will have the boundary value at this node. To decouple the remaining
- * linear system of equations and to make the system symmetric again (at least
- * if it was before), one Gauss elimination step is performed with this line,
- * by adding this (now almost empty) line to all other lines which couple with
- * the given degree of freedom and thus eliminating all coupling between this
- * degree of freedom and others. Now the respective column also consists only
- * of zeroes, apart from the main diagonal entry. Alternatively, the functions
- * in this class take a boolean parameter that allows to omit this last step,
- * if symmetry of the resulting linear system is not required. Note that
- * usually even CG can cope with a non-symmetric linear system with this
- * particular structure.
- *
- * Finding which rows contain an entry in the column for which we are
- * presently performing a Gauss elimination step is either difficult
- * or very simple, depending on the circumstances. If the sparsity
- * pattern is symmetric (whether the matrix is symmetric is irrelevant
- * here), then we can infer the rows which have a nonzero entry in the
- * present column by looking at which columns in the present row are
- * nonempty. In this case, we only need to look into a fixed number of
- * rows and need not search all rows. On the other hand, if the
- * sparsity pattern is nonsymmetric, then we need to use an iterative
- * solver which can handle nonsymmetric matrices in any case, so there
- * may be no need to do the Gauss elimination anyway. In fact, this is
- * the way the function works: it takes a parameter
- * (@p elininate_columns) that specifies whether the sparsity pattern
- * is symmetric; if so, then the column is eliminated and the right
- * hand side is also modified accordingly. If not, then only the row
- * is deleted and the column is not touched at all, and all right hand
- * side values apart from the one corresponding to the present row
- * remain unchanged.
- *
- * If the sparsity pattern for your matrix is non-symmetric, you must
- * set the value of this parameter to @p false in any case, since then
- * we can't eliminate the column without searching all rows, which
- * would be too expensive (if @p N be the number of rows, and @p m the
- * number of nonzero elements per row, then eliminating one column is
- * an <tt>O(N*log(m))</tt> operation, since searching in each row takes
- * <tt>log(m)</tt> operations). If your sparsity pattern is symmetric, but
- * your matrix is not, then you might specify @p false as well. If your
- * sparsity pattern and matrix are both symmetric, you might want to
- * specify @p true (the complexity of eliminating one row is then
- * <tt>O(m*log(m))</tt>, since we only have to search @p m rows for the
- * respective element of the column). Given the fact that @p m is
- * roughly constant, irrespective of the discretization, and that the
- * number of boundary nodes is <tt>sqrt(N)</tt> in 2d, the algorithm for
- * symmetric sparsity patterns is <tt>O(sqrt(N)*m*log(m))</tt>, while it
- * would be <tt>O(N*sqrt(N)*log(m))</tt> for the general case; the latter
- * is too expensive to be performed.
- *
- * It seems as if we had to make clear not to overwrite the lines of
- * other boundary nodes when doing the Gauss elimination
- * step. However, since we reset the right hand side when passing such
- * a node, it is not a problem to change the right hand side values of
- * other boundary nodes not yet processed. It would be a problem to
- * change those entries of nodes already processed, but since the
- * matrix entry of the present column on the row of an already
- * processed node is zero, the Gauss step does not change the right
- * hand side. We need therefore not take special care of other
- * boundary nodes.
- *
- * To make solving faster, we preset the solution vector with the right
- * boundary values (as to why this is necessary, see the discussion below in
- * the description of local elimination). It it not clear whether the deletion
- * of coupling between the boundary degree of freedom and other dofs really
- * forces the corresponding entry in the solution vector to have the right
- * value when using iterative solvers, since their search directions may
- * contain components in the direction of the boundary node. For this reason,
- * we perform a very simple line balancing by not setting the main diagonal
- * entry to unity, but rather to the value it had before deleting this line,
- * or to the first nonzero main diagonal entry if it is zero for some reason.
- * Of course we have to change the right hand side appropriately. This is not
- * a very good strategy, but it at least should give the main diagonal entry a
- * value in the right order of dimension, which makes the solvution process a
- * bit more stable. A refined algorithm would set the entry to the mean of the
- * other diagonal entries, but this seems to be too expensive.
- *
- * In some cases, it might be interesting to solve several times with
- * the same matrix, but for different right hand sides or boundary
- * values. However, since the modification for boundary values of the
- * right hand side vector depends on the original matrix, this is not
- * possible without storing the original matrix somewhere and applying
- * the @p apply_boundary_conditions function to a copy of it each
- * time we want to solve. In that case, you can use the
- * FilteredMatrix class in the @p LAC sublibrary. There you can
- * also find a formal (mathematical) description of the process of
- * modifying the matrix and right hand side vectors for boundary
- * values.
- *
- *
- * <h3>Local elimination</h3>
- *
- * The second way of handling boundary values is to modify the local
- * matrix and vector contributions appropriately before transferring
- * them into the global sparse matrix and vector. This is what
- * local_apply_boundary_values() does. The advantage is that we save
- * the call to the apply_boundary_values function (which is expensive
- * because it has to work on sparse data structures). On the other
- * hand, the local_apply_boundary_values() function is called many
- * times, even if we only have a very small number of fixed boundary
- * nodes, and the main drawback is that this function doesn't work as
- * expected if there are hanging nodes that also need to be
- * treated. The reason that this function doesn't work is that it is
- * meant to be run before distribution into the global matrix,
- * i.e. before hanging nodes are distributed; since hanging nodes can
- * be constrained to a boundary node, the treatment of hanging nodes
- * can add entries again to rows and columns corresponding to boundary
- * values and that we have already vacated in the local elimination
- * step. To make things worse, in 3d constrained nodes can even lie on
- * the boundary. Thus, it is imperative that boundary node elimination
- * happens @em after hanging node elimination, but this can't be
- * achieved with local elimination of boundary nodes unless there are
- * no hanging node constraints at all.
- *
- * Local elimination has one additional drawback: we don't have access
- * to the solution vector, only to the local contributions to the
- * matrix and right hand side. The problem with this is subtle, but
- * can lead to very hard to find difficulties: when we eliminate a
- * degree of freedom, we delete the row and column of this unknown,
- * and set the diagonal entry to some positive value. To make the
- * problem more or less well-conditioned, we set this diagonal entry
- * to the absolute value of its prior value if that was non-zero, or
- * to the average magnitude of all other nonzero diagonal
- * elements. Then we set the right hand side value such that the
- * resulting solution entry has the right value as given by the
- * boundary values. Since we add these contributions up over all local
- * contributions, the diagonal entry and the respective value in the
- * right hand side are added up correspondingly, so that the entry in
- * the solution of the linear system is still valid.
- *
- * A problem arises, however, if the diagonal entries so chosen are not
- * appropriate for the linear system. Consider, for example, a mixed Laplace
- * problem with matrix <tt>[[A B][C^T 0]]</tt>, where we only specify boundary
- * values for the second component of the solution. In the mixed formulation,
- * the stress-strain tensor only appears in either the matrix @p B or @p C, so
- * one of them may be significantly larger or smaller than the other one. Now,
- * if we eliminate boundary values, we delete some rows and columns, but we
- * also introduce a few entries on the diagonal of the lower right block, so
- * that we get the system <tt>[[A' B'][C'^T X]]</tt>. The diagonal entries in
- * the matrix @p X will be of the same order of magnitude as those in @p
- * A. Now, if we solve this system in the Schur complement formulation, we
- * have to invert the matrix <tt>X-C'^TA'^{-1}B'</tt>. Deleting rows and
- * columns above makes sure that boundary nodes indeed have empty rows and
- * columns in the Schur complement as well, except for the entries in @p
- * X. However, the entries in @p X may be of significantly different orders of
- * magnitude than those in <tt>C'^TA'^{-1}B'</tt>! If this is the case, we may
- * run into trouble with iterative solvers. For example, assume that we start
- * with zero entries in the solution vector and that the entries in @p X are
- * several orders of magnitude too small; in this case, iterative solvers will
- * compute the residual vector in each step and form correction vectors, but
- * since the entries in @p X are so small, the residual contributions for
- * boundary nodes are really small, despite the fact that the boundary nodes
- * are still at values close to zero and not in accordance with the prescribed
- * boundary values. Since the residual is so small, the corrections the
- * iterative solver computes are very small, and in the end the solver will
- * indicate convergence to a small total residual with the boundary values
- * still being significantly wrong.
- *
- * We avoid this problem in the global elimination process described above by
- * 'priming' the solution vector with the correct values for boundary
- * nodes. However, we can't do this for the local elimination
- * process. Therefore, if you experience a problem like the one above, you
- * need to either increase the diagonal entries in @p X to a size that matches
- * those in the other part of the Schur complement, or, simpler, prime the
- * solution vector before you start the solver.
- *
- * In conclusion, local elimination of boundary nodes only works if
- * there are no hanging nodes and even then doesn't always work fully
- * satisfactorily.
- *
- * @ingroup numerics
- * @author Wolfgang Bangerth, 1998, 2000, 2004, 2005
- */
-namespace MatrixTools
-{
- /**
- * Import namespace MatrixCreator for
- * backward compatibility with older
- * versions of deal.II in which these
- * namespaces were classes and class
- * MatrixTools was publicly derived from
- * class MatrixCreator.
- */
- using namespace MatrixCreator;
-
- /**
- * Apply dirichlet boundary conditions
- * to the system matrix and vectors
- * as described in the general
- * documentation.
- */
- template <typename number>
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- SparseMatrix<number> &matrix,
- Vector<number> &solution,
- Vector<number> &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * Apply dirichlet boundary
- * conditions to the system
- * matrix and vectors as
- * described in the general
- * documentation. This function
- * works for block sparse
- * matrices and block vectors
- */
- template <typename number>
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- BlockSparseMatrix<number> &matrix,
- BlockVector<number> &solution,
- BlockVector<number> &right_hand_side,
- const bool eliminate_columns = true);
-
-#ifdef DEAL_II_USE_PETSC
- /**
- * Apply dirichlet boundary conditions to
- * the system matrix and vectors as
- * described in the general
- * documentation. This function works on
- * the classes that are used to wrap
- * PETSc objects.
- *
- * Note that this function is not very
- * efficient: it needs to alternatingly
- * read and write into the matrix, a
- * situation that PETSc does not handle
- * too well. In addition, we only get rid
- * of rows corresponding to boundary
- * nodes, but the corresponding case of
- * deleting the respective columns
- * (i.e. if @p eliminate_columns is @p
- * true) is not presently implemented,
- * and probably will never because it is
- * too expensive without direct access to
- * the PETSc data structures. (This leads
- * to the situation where the action
- * indicates by the default value of the
- * last argument is actually not
- * implemented; that argument has
- * <code>true</code> as its default value
- * to stay consistent with the other
- * functions of same name in this class.)
- * A third reason against this function
- * is that it doesn't handle the case
- * where the matrix is distributed across
- * an MPI system.
- *
- * This function is used in
- * step-17 and
- * step-18.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- PETScWrappers::SparseMatrix &matrix,
- PETScWrappers::Vector &solution,
- PETScWrappers::Vector &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * Same function, but for parallel PETSc
- * matrices.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- PETScWrappers::MPI::SparseMatrix &matrix,
- PETScWrappers::MPI::Vector &solution,
- PETScWrappers::MPI::Vector &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * Same function, but for
- * parallel PETSc matrices. Note
- * that this function only
- * operates on the local range of
- * the parallel matrix, i.e. it
- * only eliminates rows
- * corresponding to degrees of
- * freedom for which the row is
- * stored on the present
- * processor. All other boundary
- * nodes are ignored, and it
- * doesn't matter whether they
- * are present in the first
- * argument to this function or
- * not. A consequence of this,
- * however, is that this function
- * has to be called from all
- * processors that participate in
- * sharing the contents of the
- * given matrices and vectors. It
- * is also implied that the local
- * range for all objects passed
- * to this function is the same.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- PETScWrappers::MPI::SparseMatrix &matrix,
- PETScWrappers::Vector &solution,
- PETScWrappers::MPI::Vector &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * Same as above but for BlockSparseMatrix.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- PETScWrappers::MPI::BlockSparseMatrix &matrix,
- PETScWrappers::MPI::BlockVector &solution,
- PETScWrappers::MPI::BlockVector &right_hand_side,
- const bool eliminate_columns = true);
-
-#endif
-
-#ifdef DEAL_II_USE_TRILINOS
- /**
- * Apply dirichlet boundary
- * conditions to the system matrix
- * and vectors as described in the
- * general documentation. This
- * function works on the classes
- * that are used to wrap Trilinos
- * objects.
- *
- * Note that this function is not
- * very efficient: it needs to
- * alternatingly read and write
- * into the matrix, a situation
- * that Trilinos does not handle
- * too well. In addition, we only
- * get rid of rows corresponding to
- * boundary nodes, but the
- * corresponding case of deleting
- * the respective columns (i.e. if
- * @p eliminate_columns is @p true)
- * is not presently implemented,
- * and probably will never because
- * it is too expensive without
- * direct access to the Trilinos
- * data structures. (This leads to
- * the situation where the action
- * indicates by the default value
- * of the last argument is actually
- * not implemented; that argument
- * has <code>true</code> as its
- * default value to stay consistent
- * with the other functions of same
- * name in this class.) A third
- * reason against this function is
- * that it doesn't handle the case
- * where the matrix is distributed
- * across an MPI system.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- TrilinosWrappers::SparseMatrix &matrix,
- TrilinosWrappers::Vector &solution,
- TrilinosWrappers::Vector &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * This function does the same as
- * the one above, except now
- * working on block structures.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- TrilinosWrappers::BlockSparseMatrix &matrix,
- TrilinosWrappers::BlockVector &solution,
- TrilinosWrappers::BlockVector &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * Apply dirichlet boundary
- * conditions to the system matrix
- * and vectors as described in the
- * general documentation. This
- * function works on the classes
- * that are used to wrap Trilinos
- * objects.
- *
- * Note that this function is not
- * very efficient: it needs to
- * alternatingly read and write
- * into the matrix, a situation
- * that Trilinos does not handle
- * too well. In addition, we only
- * get rid of rows corresponding to
- * boundary nodes, but the
- * corresponding case of deleting
- * the respective columns (i.e. if
- * @p eliminate_columns is @p true)
- * is not presently implemented,
- * and probably will never because
- * it is too expensive without
- * direct access to the Trilinos
- * data structures. (This leads to
- * the situation where the action
- * indicates by the default value
- * of the last argument is actually
- * not implemented; that argument
- * has <code>true</code> as its
- * default value to stay consistent
- * with the other functions of same
- * name in this class.) This
- * function does work on MPI vector
- * types.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- TrilinosWrappers::SparseMatrix &matrix,
- TrilinosWrappers::MPI::Vector &solution,
- TrilinosWrappers::MPI::Vector &right_hand_side,
- const bool eliminate_columns = true);
-
- /**
- * This function does the same as
- * the one above, except now working
- * on block structures.
- */
- void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- TrilinosWrappers::BlockSparseMatrix &matrix,
- TrilinosWrappers::MPI::BlockVector &solution,
- TrilinosWrappers::MPI::BlockVector &right_hand_side,
- const bool eliminate_columns = true);
-#endif
-
- /**
- * Rather than applying boundary
- * values to the global matrix
- * and vector after creating the
- * global matrix, this function
- * does so during assembly, by
- * modifying the local matrix and
- * vector contributions. If you
- * call this function on all
- * local contributions, the
- * resulting matrix will have the
- * same entries, and the final
- * call to
- * apply_boundary_values() on the
- * global system will not be
- * necessary.
- *
- * Since this function does not
- * have to work on the
- * complicated data structures of
- * sparse matrices, it is
- * relatively cheap. It may
- * therefore be a win if you have
- * many fixed degrees of freedom
- * (e.g. boundary nodes), or if
- * access to the sparse matrix is
- * expensive (e.g. for block
- * sparse matrices, or for PETSc
- * or trilinos
- * matrices). However, it doesn't
- * work as expected if there are
- * also hanging nodes to be
- * considered. More caveats are
- * listed in the general
- * documentation of this class.
- */
- void
- local_apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- const std::vector<unsigned int> &local_dof_indices,
- FullMatrix<double> &local_matrix,
- Vector<double> &local_rhs,
- const bool eliminate_columns);
-
- /**
- * Exception
- */
- DeclException0 (ExcBlocksDontMatch);
-}
+//this file is deprecated, use matrix_tools.h instead
+#ifndef __deal2__matrices_h
+#define __deal2__matrices_h
-DEAL_II_NAMESPACE_CLOSE
+#include <deal.II/numerics/matrix_tools.h>
#endif
--- /dev/null
+//---------------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------------------------------------------------------
+#ifndef __deal2__matrix_tools_h
+#define __deal2__matrix_tools_h
+
+
+#include <deal.II/base/config.h>
+#include <deal.II/base/exceptions.h>
+#include <deal.II/base/thread_management.h>
+#include <deal.II/dofs/function_map.h>
+
+#include <map>
+
+DEAL_II_NAMESPACE_OPEN
+
+
+// forward declarations
+template <int dim> class Quadrature;
+
+template<typename number> class Vector;
+template<typename number> class FullMatrix;
+template<typename number> class SparseMatrix;
+
+template <typename number> class BlockSparseMatrix;
+template <typename Number> class BlockVector;
+
+template <int dim, int spacedim> class Mapping;
+template <int dim, int spacedim> class DoFHandler;
+template <int dim, int spacedim> class MGDoFHandler;
+template <int dim, int spacedim> class FEValues;
+
+namespace hp
+{
+ template <int> class QCollection;
+ template <int, int> class MappingCollection;
+ template <int, int> class DoFHandler;
+}
+
+
+#ifdef DEAL_II_USE_PETSC
+namespace PETScWrappers
+{
+ class SparseMatrix;
+ class Vector;
+ namespace MPI
+ {
+ class SparseMatrix;
+ class BlockSparseMatrix;
+ class Vector;
+ class BlockVector;
+ }
+}
+#endif
+
+#ifdef DEAL_II_USE_TRILINOS
+namespace TrilinosWrappers
+{
+ class SparseMatrix;
+ class Vector;
+ class BlockSparseMatrix;
+ class BlockVector;
+ namespace MPI
+ {
+ class Vector;
+ class BlockVector;
+ }
+}
+#endif
+
+
+/**
+ * This namespace provides functions that assemble certain standard matrices for a
+ * given triangulation, using a given finite element, a given mapping and a
+ * quadrature formula.
+ *
+ *
+ * <h3>Conventions for all functions</h3>
+ *
+ * There exist two versions of each function. One with a Mapping
+ * argument and one without. If a code uses a mapping different from
+ * MappingQ1 the functions <em>with</em> mapping argument should
+ * be used. Code that uses only MappingQ1 may also use the
+ * functions <em>without</em> Mapping argument. Each of these
+ * latter functions create a MappingQ1 object and just call the
+ * respective functions with that object as mapping argument.
+ *
+ * All functions take a sparse matrix object to hold the matrix to be
+ * created. The functions assume that the matrix is initialized with a
+ * sparsity pattern (SparsityPattern) corresponding to the given degree
+ * of freedom handler, i.e. the sparsity structure is already as needed.
+ * You can do this by calling the DoFTools::make_sparsity_pattern()
+ * function.
+ *
+ * Furthermore it is assumed that no relevant data is in the matrix. Some
+ * entries will be overwritten and some others will contain invalid data if
+ * the matrix wasn't empty before. Therefore you may want to clear the matrix
+ * before assemblage.
+ *
+ * All created matrices are `raw': they are not condensed,
+ * i.e. hanging nodes are not eliminated. The reason is that you may
+ * want to add several matrices and could then condense afterwards
+ * only once, instead of for every matrix. To actually do computations
+ * with these matrices, you have to condense the matrix using the
+ * ConstraintMatrix::condense function; you also have to
+ * condense the right hand side accordingly and distribute the
+ * solution afterwards.
+ *
+ * If you want to use boundary conditions with the matrices generated
+ * by the functions of this class, you have to use a function like
+ * <tt>ProblemBase<>::apply_dirichlet_bc</tt> to matrix and right hand
+ * side.
+ *
+ *
+ * <h3>Supported matrices</h3>
+ *
+ * At present there are functions to create the following matrices:
+ * <ul>
+ * <li> @p create_mass_matrix: create the matrix with entries
+ * $m_{ij} = \int_\Omega \phi_i(x) \phi_j(x) dx$ by numerical
+ * quadrature. Here, the $\phi_i$ are the basis functions of the
+ * finite element space given.
+ *
+ * A coefficient may be given to evaluate
+ * $m_{ij} = \int_\Omega a(x) \phi_i(x) \phi_j(x) dx$ instead.
+ *
+ * <li> @p create_laplace_matrix: create the matrix with entries
+ * $a_{ij} = \int_\Omega \nabla\phi_i(x) \nabla\phi_j(x) dx$ by
+ * numerical quadrature.
+ *
+ * Again, a coefficient may be given to evaluate
+ * $a_{ij} = \int_\Omega a(x) \nabla\phi_i(x) \nabla\phi_j(x) dx$ instead.
+ * </ul>
+ *
+ * Make sure that the order of the Quadrature formula given to these
+ * functions is sufficiently high to compute the matrices with the
+ * required accuracy. For the choice of this quadrature rule you need
+ * to take into account the polynomial degree of the FiniteElement
+ * basis functions, the roughness of the coefficient @p a, as well as
+ * the degree of the given @p Mapping (if any).
+ *
+ * Note, that for system elements the mass matrix and the laplace matrix is
+ * implemented such that each components couple only with itself, i.e. there
+ * is no coupling of shape functions belonging to different components. If the
+ * degrees of freedom have been sorted according to their vector component
+ * (e.g., using DoFRenumbering::component_wise()), then the resulting matrices
+ * will be block diagonal.
+ *
+ * If the finite element for which the mass matrix or the laplace
+ * matrix is to be built has more than one component, this function
+ * accepts a single coefficient as well as a vector valued coefficient
+ * function. For the latter case make sure that the number of
+ * components coincides with the number of components of the system
+ * finite element.
+ *
+ *
+ * <h3>Matrices on the boundary</h3>
+ *
+ * The create_boundary_mass_matrix() creates the matrix with entries $m_{ij} =
+ * \int_{\Gamma} \phi_i \phi_j dx$, where $\Gamma$ is the union of boundary
+ * parts with indicators contained in a FunctionMap passed to the function
+ * (i.e. if you want to set up the mass matrix for the parts of the boundary
+ * with indicators zero and 2, you pass the function a map of <tt>unsigned
+ * char</tt>s as parameter @p boundary_functions containing the keys zero and
+ * 2). The size of the matrix is equal to the number of degrees of freedom
+ * that have support on the boundary, i.e. it is <em>not</em> a matrix on all
+ * degrees of freedom, but only a subset. (The $\phi_i$ in the formula are
+ * this subsect of basis functions which have at least part of their support
+ * on $\Gamma$.) In order to determine which shape functions are to be
+ * considered, and in order to determine in which order, the function takes a
+ * @p dof_to_boundary_mapping; this object maps global DoF numbers to a
+ * numbering of the degrees of freedom located on the boundary, and can be
+ * obtained using the function DoFTools::map_dof_to_boundary_indices().
+ *
+ * In order to work, the function needs a matrix of the correct size, built on
+ * top of a corresponding sparsity pattern. Since we only work on a subset of
+ * the degrees of freedom, we can't use the matrices and sparsity patterns
+ * that are created for the entire set of degrees of freedom. Rather, you
+ * should use the DoFHandler::make_boundary_sparsity_pattern() function to
+ * create the correct sparsity pattern, and build a matrix on top of it.
+ *
+ * Note that at present there is no function that computes the mass matrix for
+ * <em>all</em> shape functions, though such a function would be trivial to
+ * implement.
+ *
+ *
+ * <h3>Right hand sides</h3>
+ *
+ * In many cases, you will not only want to build the matrix, but also
+ * a right hand side, which will give a vector with
+ * $f_i = \int_\Omega f(x) \phi_i(x) dx$. For this purpose, each function
+ * exists in two versions, one only building the matrix and one also
+ * building the right hand side vector. If you want to create a right
+ * hand side vector without creating a matrix, you can use the
+ * VectorTools::create_right_hand_side() function. The use of the
+ * latter may be useful if you want to create many right hand side
+ * vectors.
+ *
+ * @ingroup numerics
+ * @author Wolfgang Bangerth, 1998, Ralf Hartmann, 2001
+ */
+namespace MatrixCreator
+{
+ /**
+ * Assemble the mass matrix. If no
+ * coefficient is given, it is assumed
+ * to be unity.
+ *
+ * If the library is configured
+ * to use multithreading, this
+ * function works in parallel.
+ *
+ * See the general doc of this class
+ * for more information.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Calls the create_mass_matrix()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Assemble the mass matrix and a
+ * right hand side vector. If no
+ * coefficient is given, it is
+ * assumed to be unity.
+ *
+ * If the library is configured
+ * to use multithreading, this
+ * function works in parallel.
+ *
+ * See the general doc of this
+ * class for more information.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Calls the create_mass_matrix()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+ template <int dim, typename number, int spacedim>
+ void create_mass_matrix (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<number> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+
+ /**
+ * Assemble the mass matrix and a
+ * right hand side vector along
+ * the boundary.
+ *
+ * The matrix is assumed to
+ * already be initialized with a
+ * suiting sparsity pattern (the
+ * DoFHandler provides an
+ * appropriate function).
+ *
+ * If the library is configured
+ * to use multithreading, this
+ * function works in parallel.
+ *
+ * @arg @p weight: an optional
+ * weight for the computation of
+ * the mass matrix. If no weight
+ * is given, it is set to one.
+ *
+ * @arg @p component_mapping: if
+ * the components in @p
+ * boundary_functions and @p dof
+ * do not coincide, this vector
+ * allows them to be remapped. If
+ * the vector is not empty, it
+ * has to have one entry for each
+ * component in @p dof. This
+ * entry is the component number
+ * in @p boundary_functions that
+ * should be used for this
+ * component in @p dof. By
+ * default, no remapping is
+ * applied.
+ *
+ * @todo This function does not
+ * work for finite elements with
+ * cell-dependent shape functions.
+ */
+ template <int dim, int spacedim>
+
+ void create_boundary_mass_matrix (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim-1> &q,
+ SparseMatrix<double> &matrix,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ Vector<double> &rhs_vector,
+ std::vector<unsigned int>&dof_to_boundary_mapping,
+ const Function<spacedim> * const weight = 0,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+// * Same function, but for 1d.
+// */
+//
+// void create_boundary_mass_matrix (const Mapping<1,1> &mapping,
+// const DoFHandler<1,1> &dof,
+// const Quadrature<0> &q,
+// SparseMatrix<double> &matrix,
+// const FunctionMap<1>::type &boundary_functions,
+// Vector<double> &rhs_vector,
+// std::vector<unsigned int>&dof_to_boundary_mapping,
+// const Function<1> * const a = 0);
+// //codimension 1
+//
+// void create_boundary_mass_matrix (const Mapping<1,2> &mapping,
+// const DoFHandler<1,2> &dof,
+// const Quadrature<0> &q,
+// SparseMatrix<double> &matrix,
+// const FunctionMap<2>::type &boundary_functions,
+// Vector<double> &rhs_vector,
+// std::vector<unsigned int>&dof_to_boundary_mapping,
+// const Function<2> * const a = 0);
+
+
+
+ /**
+ * Calls the
+ * create_boundary_mass_matrix()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+
+ void create_boundary_mass_matrix (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim-1> &q,
+ SparseMatrix<double> &matrix,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ Vector<double> &rhs_vector,
+ std::vector<unsigned int>&dof_to_boundary_mapping,
+ const Function<spacedim> * const a = 0,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+ template <int dim, int spacedim>
+
+ void create_boundary_mass_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim-1> &q,
+ SparseMatrix<double> &matrix,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ Vector<double> &rhs_vector,
+ std::vector<unsigned int>&dof_to_boundary_mapping,
+ const Function<spacedim> * const a = 0,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+//
+// void create_boundary_mass_matrix (const hp::MappingCollection<1,1> &mapping,
+// const hp::DoFHandler<1,1> &dof,
+// const hp::QCollection<0> &q,
+// SparseMatrix<double> &matrix,
+// const FunctionMap<1>::type &boundary_functions,
+// Vector<double> &rhs_vector,
+// std::vector<unsigned int>&dof_to_boundary_mapping,
+// const Function<1> * const a = 0);
+
+ /**
+ * Same function as above, but for hp
+ * objects.
+ */
+ template <int dim, int spacedim>
+
+ void create_boundary_mass_matrix (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim-1> &q,
+ SparseMatrix<double> &matrix,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ Vector<double> &rhs_vector,
+ std::vector<unsigned int>&dof_to_boundary_mapping,
+ const Function<spacedim> * const a = 0,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+ /**
+ * Assemble the Laplace
+ * matrix. If no coefficient is
+ * given, it is assumed to be
+ * constant one.
+ *
+ * If the library is configured
+ * to use multithreading, this
+ * function works in parallel.
+ *
+ * See the general doc of this
+ * class for more information.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Calls the
+ * create_laplace_matrix()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Assemble the Laplace matrix
+ * and a right hand side
+ * vector. If no coefficient is
+ * given, it is assumed to be
+ * constant one.
+ *
+ * If the library is configured
+ * to use multithreading, this
+ * function works in parallel.
+ *
+ * See the general doc of this
+ * class for more information.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Calls the
+ * create_laplace_matrix()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Like the functions above, but for hp
+ * dof handlers, mappings, and quadrature
+ * collections.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Like the functions above, but for hp
+ * dof handlers, mappings, and quadrature
+ * collections.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Like the functions above, but for hp
+ * dof handlers, mappings, and quadrature
+ * collections.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Like the functions above, but for hp
+ * dof handlers, mappings, and quadrature
+ * collections.
+ */
+ template <int dim, int spacedim>
+ void create_laplace_matrix (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ SparseMatrix<double> &matrix,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const Function<spacedim> * const a = 0);
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcComponentMismatch);
+}
+
+
+
+/**
+ * Provide a collection of functions operating on matrices. These include
+ * the application of boundary conditions to a linear system of equations
+ * and others.
+ *
+ *
+ * <h3>Boundary conditions</h3>
+ *
+ * The apply_boundary_values() function inserts boundary conditions
+ * into a system of equations. To actually do this you have to
+ * specify a list of degree of freedom indices along with the values
+ * these degrees of freedom shall assume. To see how to get such a
+ * list, see the discussion of the
+ * VectorTools::interpolate_boundary_values function.
+ *
+ * There are two ways to incorporate fixed degrees of freedom such as boundary
+ * nodes into a linear system, as discussed below.
+ *
+ *
+ * <h3>Global elimination</h3>
+ *
+ * In the first method, we first assemble the global linear system without
+ * respect for fixed degrees of freedom, and in a second step eliminate them
+ * again from the linear system. The inclusion into the assembly process is as
+ * follows: when the matrix and vectors are set up, a list of nodes subject to
+ * dirichlet bc is made and matrix and vectors are modified accordingly. This
+ * is done by deleting all entries in the matrix in the line of this degree of
+ * freedom, setting the main diagonal entry to a suitable positive value and
+ * the right hand side element to a value so that the solution of the linear
+ * system will have the boundary value at this node. To decouple the remaining
+ * linear system of equations and to make the system symmetric again (at least
+ * if it was before), one Gauss elimination step is performed with this line,
+ * by adding this (now almost empty) line to all other lines which couple with
+ * the given degree of freedom and thus eliminating all coupling between this
+ * degree of freedom and others. Now the respective column also consists only
+ * of zeroes, apart from the main diagonal entry. Alternatively, the functions
+ * in this class take a boolean parameter that allows to omit this last step,
+ * if symmetry of the resulting linear system is not required. Note that
+ * usually even CG can cope with a non-symmetric linear system with this
+ * particular structure.
+ *
+ * Finding which rows contain an entry in the column for which we are
+ * presently performing a Gauss elimination step is either difficult
+ * or very simple, depending on the circumstances. If the sparsity
+ * pattern is symmetric (whether the matrix is symmetric is irrelevant
+ * here), then we can infer the rows which have a nonzero entry in the
+ * present column by looking at which columns in the present row are
+ * nonempty. In this case, we only need to look into a fixed number of
+ * rows and need not search all rows. On the other hand, if the
+ * sparsity pattern is nonsymmetric, then we need to use an iterative
+ * solver which can handle nonsymmetric matrices in any case, so there
+ * may be no need to do the Gauss elimination anyway. In fact, this is
+ * the way the function works: it takes a parameter
+ * (@p elininate_columns) that specifies whether the sparsity pattern
+ * is symmetric; if so, then the column is eliminated and the right
+ * hand side is also modified accordingly. If not, then only the row
+ * is deleted and the column is not touched at all, and all right hand
+ * side values apart from the one corresponding to the present row
+ * remain unchanged.
+ *
+ * If the sparsity pattern for your matrix is non-symmetric, you must
+ * set the value of this parameter to @p false in any case, since then
+ * we can't eliminate the column without searching all rows, which
+ * would be too expensive (if @p N be the number of rows, and @p m the
+ * number of nonzero elements per row, then eliminating one column is
+ * an <tt>O(N*log(m))</tt> operation, since searching in each row takes
+ * <tt>log(m)</tt> operations). If your sparsity pattern is symmetric, but
+ * your matrix is not, then you might specify @p false as well. If your
+ * sparsity pattern and matrix are both symmetric, you might want to
+ * specify @p true (the complexity of eliminating one row is then
+ * <tt>O(m*log(m))</tt>, since we only have to search @p m rows for the
+ * respective element of the column). Given the fact that @p m is
+ * roughly constant, irrespective of the discretization, and that the
+ * number of boundary nodes is <tt>sqrt(N)</tt> in 2d, the algorithm for
+ * symmetric sparsity patterns is <tt>O(sqrt(N)*m*log(m))</tt>, while it
+ * would be <tt>O(N*sqrt(N)*log(m))</tt> for the general case; the latter
+ * is too expensive to be performed.
+ *
+ * It seems as if we had to make clear not to overwrite the lines of
+ * other boundary nodes when doing the Gauss elimination
+ * step. However, since we reset the right hand side when passing such
+ * a node, it is not a problem to change the right hand side values of
+ * other boundary nodes not yet processed. It would be a problem to
+ * change those entries of nodes already processed, but since the
+ * matrix entry of the present column on the row of an already
+ * processed node is zero, the Gauss step does not change the right
+ * hand side. We need therefore not take special care of other
+ * boundary nodes.
+ *
+ * To make solving faster, we preset the solution vector with the right
+ * boundary values (as to why this is necessary, see the discussion below in
+ * the description of local elimination). It it not clear whether the deletion
+ * of coupling between the boundary degree of freedom and other dofs really
+ * forces the corresponding entry in the solution vector to have the right
+ * value when using iterative solvers, since their search directions may
+ * contain components in the direction of the boundary node. For this reason,
+ * we perform a very simple line balancing by not setting the main diagonal
+ * entry to unity, but rather to the value it had before deleting this line,
+ * or to the first nonzero main diagonal entry if it is zero for some reason.
+ * Of course we have to change the right hand side appropriately. This is not
+ * a very good strategy, but it at least should give the main diagonal entry a
+ * value in the right order of dimension, which makes the solvution process a
+ * bit more stable. A refined algorithm would set the entry to the mean of the
+ * other diagonal entries, but this seems to be too expensive.
+ *
+ * In some cases, it might be interesting to solve several times with
+ * the same matrix, but for different right hand sides or boundary
+ * values. However, since the modification for boundary values of the
+ * right hand side vector depends on the original matrix, this is not
+ * possible without storing the original matrix somewhere and applying
+ * the @p apply_boundary_conditions function to a copy of it each
+ * time we want to solve. In that case, you can use the
+ * FilteredMatrix class in the @p LAC sublibrary. There you can
+ * also find a formal (mathematical) description of the process of
+ * modifying the matrix and right hand side vectors for boundary
+ * values.
+ *
+ *
+ * <h3>Local elimination</h3>
+ *
+ * The second way of handling boundary values is to modify the local
+ * matrix and vector contributions appropriately before transferring
+ * them into the global sparse matrix and vector. This is what
+ * local_apply_boundary_values() does. The advantage is that we save
+ * the call to the apply_boundary_values function (which is expensive
+ * because it has to work on sparse data structures). On the other
+ * hand, the local_apply_boundary_values() function is called many
+ * times, even if we only have a very small number of fixed boundary
+ * nodes, and the main drawback is that this function doesn't work as
+ * expected if there are hanging nodes that also need to be
+ * treated. The reason that this function doesn't work is that it is
+ * meant to be run before distribution into the global matrix,
+ * i.e. before hanging nodes are distributed; since hanging nodes can
+ * be constrained to a boundary node, the treatment of hanging nodes
+ * can add entries again to rows and columns corresponding to boundary
+ * values and that we have already vacated in the local elimination
+ * step. To make things worse, in 3d constrained nodes can even lie on
+ * the boundary. Thus, it is imperative that boundary node elimination
+ * happens @em after hanging node elimination, but this can't be
+ * achieved with local elimination of boundary nodes unless there are
+ * no hanging node constraints at all.
+ *
+ * Local elimination has one additional drawback: we don't have access
+ * to the solution vector, only to the local contributions to the
+ * matrix and right hand side. The problem with this is subtle, but
+ * can lead to very hard to find difficulties: when we eliminate a
+ * degree of freedom, we delete the row and column of this unknown,
+ * and set the diagonal entry to some positive value. To make the
+ * problem more or less well-conditioned, we set this diagonal entry
+ * to the absolute value of its prior value if that was non-zero, or
+ * to the average magnitude of all other nonzero diagonal
+ * elements. Then we set the right hand side value such that the
+ * resulting solution entry has the right value as given by the
+ * boundary values. Since we add these contributions up over all local
+ * contributions, the diagonal entry and the respective value in the
+ * right hand side are added up correspondingly, so that the entry in
+ * the solution of the linear system is still valid.
+ *
+ * A problem arises, however, if the diagonal entries so chosen are not
+ * appropriate for the linear system. Consider, for example, a mixed Laplace
+ * problem with matrix <tt>[[A B][C^T 0]]</tt>, where we only specify boundary
+ * values for the second component of the solution. In the mixed formulation,
+ * the stress-strain tensor only appears in either the matrix @p B or @p C, so
+ * one of them may be significantly larger or smaller than the other one. Now,
+ * if we eliminate boundary values, we delete some rows and columns, but we
+ * also introduce a few entries on the diagonal of the lower right block, so
+ * that we get the system <tt>[[A' B'][C'^T X]]</tt>. The diagonal entries in
+ * the matrix @p X will be of the same order of magnitude as those in @p
+ * A. Now, if we solve this system in the Schur complement formulation, we
+ * have to invert the matrix <tt>X-C'^TA'^{-1}B'</tt>. Deleting rows and
+ * columns above makes sure that boundary nodes indeed have empty rows and
+ * columns in the Schur complement as well, except for the entries in @p
+ * X. However, the entries in @p X may be of significantly different orders of
+ * magnitude than those in <tt>C'^TA'^{-1}B'</tt>! If this is the case, we may
+ * run into trouble with iterative solvers. For example, assume that we start
+ * with zero entries in the solution vector and that the entries in @p X are
+ * several orders of magnitude too small; in this case, iterative solvers will
+ * compute the residual vector in each step and form correction vectors, but
+ * since the entries in @p X are so small, the residual contributions for
+ * boundary nodes are really small, despite the fact that the boundary nodes
+ * are still at values close to zero and not in accordance with the prescribed
+ * boundary values. Since the residual is so small, the corrections the
+ * iterative solver computes are very small, and in the end the solver will
+ * indicate convergence to a small total residual with the boundary values
+ * still being significantly wrong.
+ *
+ * We avoid this problem in the global elimination process described above by
+ * 'priming' the solution vector with the correct values for boundary
+ * nodes. However, we can't do this for the local elimination
+ * process. Therefore, if you experience a problem like the one above, you
+ * need to either increase the diagonal entries in @p X to a size that matches
+ * those in the other part of the Schur complement, or, simpler, prime the
+ * solution vector before you start the solver.
+ *
+ * In conclusion, local elimination of boundary nodes only works if
+ * there are no hanging nodes and even then doesn't always work fully
+ * satisfactorily.
+ *
+ * @ingroup numerics
+ * @author Wolfgang Bangerth, 1998, 2000, 2004, 2005
+ */
+namespace MatrixTools
+{
+ /**
+ * Import namespace MatrixCreator for
+ * backward compatibility with older
+ * versions of deal.II in which these
+ * namespaces were classes and class
+ * MatrixTools was publicly derived from
+ * class MatrixCreator.
+ */
+ using namespace MatrixCreator;
+
+ /**
+ * Apply dirichlet boundary conditions
+ * to the system matrix and vectors
+ * as described in the general
+ * documentation.
+ */
+ template <typename number>
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ SparseMatrix<number> &matrix,
+ Vector<number> &solution,
+ Vector<number> &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * Apply dirichlet boundary
+ * conditions to the system
+ * matrix and vectors as
+ * described in the general
+ * documentation. This function
+ * works for block sparse
+ * matrices and block vectors
+ */
+ template <typename number>
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ BlockSparseMatrix<number> &matrix,
+ BlockVector<number> &solution,
+ BlockVector<number> &right_hand_side,
+ const bool eliminate_columns = true);
+
+#ifdef DEAL_II_USE_PETSC
+ /**
+ * Apply dirichlet boundary conditions to
+ * the system matrix and vectors as
+ * described in the general
+ * documentation. This function works on
+ * the classes that are used to wrap
+ * PETSc objects.
+ *
+ * Note that this function is not very
+ * efficient: it needs to alternatingly
+ * read and write into the matrix, a
+ * situation that PETSc does not handle
+ * too well. In addition, we only get rid
+ * of rows corresponding to boundary
+ * nodes, but the corresponding case of
+ * deleting the respective columns
+ * (i.e. if @p eliminate_columns is @p
+ * true) is not presently implemented,
+ * and probably will never because it is
+ * too expensive without direct access to
+ * the PETSc data structures. (This leads
+ * to the situation where the action
+ * indicates by the default value of the
+ * last argument is actually not
+ * implemented; that argument has
+ * <code>true</code> as its default value
+ * to stay consistent with the other
+ * functions of same name in this class.)
+ * A third reason against this function
+ * is that it doesn't handle the case
+ * where the matrix is distributed across
+ * an MPI system.
+ *
+ * This function is used in
+ * step-17 and
+ * step-18.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ PETScWrappers::SparseMatrix &matrix,
+ PETScWrappers::Vector &solution,
+ PETScWrappers::Vector &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * Same function, but for parallel PETSc
+ * matrices.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ PETScWrappers::MPI::SparseMatrix &matrix,
+ PETScWrappers::MPI::Vector &solution,
+ PETScWrappers::MPI::Vector &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * Same function, but for
+ * parallel PETSc matrices. Note
+ * that this function only
+ * operates on the local range of
+ * the parallel matrix, i.e. it
+ * only eliminates rows
+ * corresponding to degrees of
+ * freedom for which the row is
+ * stored on the present
+ * processor. All other boundary
+ * nodes are ignored, and it
+ * doesn't matter whether they
+ * are present in the first
+ * argument to this function or
+ * not. A consequence of this,
+ * however, is that this function
+ * has to be called from all
+ * processors that participate in
+ * sharing the contents of the
+ * given matrices and vectors. It
+ * is also implied that the local
+ * range for all objects passed
+ * to this function is the same.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ PETScWrappers::MPI::SparseMatrix &matrix,
+ PETScWrappers::Vector &solution,
+ PETScWrappers::MPI::Vector &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * Same as above but for BlockSparseMatrix.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ PETScWrappers::MPI::BlockSparseMatrix &matrix,
+ PETScWrappers::MPI::BlockVector &solution,
+ PETScWrappers::MPI::BlockVector &right_hand_side,
+ const bool eliminate_columns = true);
+
+#endif
+
+#ifdef DEAL_II_USE_TRILINOS
+ /**
+ * Apply dirichlet boundary
+ * conditions to the system matrix
+ * and vectors as described in the
+ * general documentation. This
+ * function works on the classes
+ * that are used to wrap Trilinos
+ * objects.
+ *
+ * Note that this function is not
+ * very efficient: it needs to
+ * alternatingly read and write
+ * into the matrix, a situation
+ * that Trilinos does not handle
+ * too well. In addition, we only
+ * get rid of rows corresponding to
+ * boundary nodes, but the
+ * corresponding case of deleting
+ * the respective columns (i.e. if
+ * @p eliminate_columns is @p true)
+ * is not presently implemented,
+ * and probably will never because
+ * it is too expensive without
+ * direct access to the Trilinos
+ * data structures. (This leads to
+ * the situation where the action
+ * indicates by the default value
+ * of the last argument is actually
+ * not implemented; that argument
+ * has <code>true</code> as its
+ * default value to stay consistent
+ * with the other functions of same
+ * name in this class.) A third
+ * reason against this function is
+ * that it doesn't handle the case
+ * where the matrix is distributed
+ * across an MPI system.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ TrilinosWrappers::SparseMatrix &matrix,
+ TrilinosWrappers::Vector &solution,
+ TrilinosWrappers::Vector &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * This function does the same as
+ * the one above, except now
+ * working on block structures.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ TrilinosWrappers::BlockSparseMatrix &matrix,
+ TrilinosWrappers::BlockVector &solution,
+ TrilinosWrappers::BlockVector &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * Apply dirichlet boundary
+ * conditions to the system matrix
+ * and vectors as described in the
+ * general documentation. This
+ * function works on the classes
+ * that are used to wrap Trilinos
+ * objects.
+ *
+ * Note that this function is not
+ * very efficient: it needs to
+ * alternatingly read and write
+ * into the matrix, a situation
+ * that Trilinos does not handle
+ * too well. In addition, we only
+ * get rid of rows corresponding to
+ * boundary nodes, but the
+ * corresponding case of deleting
+ * the respective columns (i.e. if
+ * @p eliminate_columns is @p true)
+ * is not presently implemented,
+ * and probably will never because
+ * it is too expensive without
+ * direct access to the Trilinos
+ * data structures. (This leads to
+ * the situation where the action
+ * indicates by the default value
+ * of the last argument is actually
+ * not implemented; that argument
+ * has <code>true</code> as its
+ * default value to stay consistent
+ * with the other functions of same
+ * name in this class.) This
+ * function does work on MPI vector
+ * types.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ TrilinosWrappers::SparseMatrix &matrix,
+ TrilinosWrappers::MPI::Vector &solution,
+ TrilinosWrappers::MPI::Vector &right_hand_side,
+ const bool eliminate_columns = true);
+
+ /**
+ * This function does the same as
+ * the one above, except now working
+ * on block structures.
+ */
+ void
+ apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ TrilinosWrappers::BlockSparseMatrix &matrix,
+ TrilinosWrappers::MPI::BlockVector &solution,
+ TrilinosWrappers::MPI::BlockVector &right_hand_side,
+ const bool eliminate_columns = true);
+#endif
+
+ /**
+ * Rather than applying boundary
+ * values to the global matrix
+ * and vector after creating the
+ * global matrix, this function
+ * does so during assembly, by
+ * modifying the local matrix and
+ * vector contributions. If you
+ * call this function on all
+ * local contributions, the
+ * resulting matrix will have the
+ * same entries, and the final
+ * call to
+ * apply_boundary_values() on the
+ * global system will not be
+ * necessary.
+ *
+ * Since this function does not
+ * have to work on the
+ * complicated data structures of
+ * sparse matrices, it is
+ * relatively cheap. It may
+ * therefore be a win if you have
+ * many fixed degrees of freedom
+ * (e.g. boundary nodes), or if
+ * access to the sparse matrix is
+ * expensive (e.g. for block
+ * sparse matrices, or for PETSc
+ * or trilinos
+ * matrices). However, it doesn't
+ * work as expected if there are
+ * also hanging nodes to be
+ * considered. More caveats are
+ * listed in the general
+ * documentation of this class.
+ */
+ void
+ local_apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ const std::vector<unsigned int> &local_dof_indices,
+ FullMatrix<double> &local_matrix,
+ Vector<double> &local_rhs,
+ const bool eliminate_columns);
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcBlocksDontMatch);
+}
+
+
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
* TimeDependent::TimeSteppingData (0,1),
* TimeDependent::forward);
* @endverbatim
- * TimeStepBase_Wave()@p ::refine_grid is a function taking an argument, unlike
+ * TimeStepBase_Wave::refine_grid is a function taking an argument, unlike
* all the other functions used above within the loops. However, in this special
* case the parameter was the same for all timesteps and known before the loop
* was started, so we fixed it and made a function object which to the outside
--- /dev/null
+//---------------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------------------------------------------------------
+#ifndef __deal2__vector_tools_h
+#define __deal2__vector_tools_h
+
+
+#include <deal.II/base/config.h>
+#include <deal.II/base/exceptions.h>
+#include <deal.II/base/quadrature_lib.h>
+#include <deal.II/base/point.h>
+#include <deal.II/dofs/function_map.h>
+#include <deal.II/fe/mapping_q.h>
+#include <deal.II/hp/mapping_collection.h>
+
+#include <map>
+#include <vector>
+#include <set>
+
+DEAL_II_NAMESPACE_OPEN
+
+template <int dim> class Function;
+template <int dim> struct FunctionMap;
+template <int dim> class Quadrature;
+template <int dim> class QGauss;
+
+template <typename number> class Vector;
+template <typename number> class FullMatrix;
+template <int dim, int spacedim> class Mapping;
+template <int dim, int spacedim> class DoFHandler;
+template <typename gridtype> class InterGridMap;
+namespace hp
+{
+ template <int dim, int spacedim> class DoFHandler;
+ template <int dim, int spacedim> class MappingCollection;
+ template <int dim> class QCollection;
+}
+class ConstraintMatrix;
+
+
+//TODO: Move documentation of functions to the functions!
+
+/**
+ * Provide a namespace which offers some operations on vectors. Among
+ * these are assembling of standard vectors, integration of the
+ * difference of a finite element solution and a continuous function,
+ * interpolations and projections of continuous functions to the
+ * finite element space and other operations.
+ *
+ * @note There exist two versions of almost each function. One with a
+ * Mapping argument and one without. If a code uses a mapping
+ * different from MappingQ1 the functions <b>with</b> mapping argument
+ * should be used. Code that uses only MappingQ1 may also use the
+ * functions without Mapping argument. Each of these latter functions
+ * create a MappingQ1 object and just call the respective functions
+ * with that object as mapping argument. The functions without Mapping
+ * argument still exist to ensure backward compatibility. Nevertheless
+ * it is advised to change the user's codes to store a specific
+ * Mapping object and to use the functions that take this Mapping
+ * object as argument. This gives the possibility to easily extend the
+ * user codes to work also on mappings of higher degree, this just by
+ * exchanging MappingQ1 by, for example, a MappingQ or another Mapping
+ * object of interest.
+ *
+ * <h3>Description of operations</h3>
+ *
+ * This collection of methods offers the following operations:
+ * <ul>
+ * <li> Interpolation: assign each degree of freedom in the vector to be
+ * the value of the function given as argument. This is identical to
+ * saying that the resulting finite element function (which is
+ * isomorphic to the output vector) has exact function values in all
+ * support points of trial functions. The support point of a trial
+ * function is the point where its value equals one, e.g. for linear
+ * trial functions the support points are four corners of an
+ * element. This function therefore relies on the assumption that a
+ * finite element is used for which the degrees of freedom are
+ * function values (Lagrange elements) rather than gradients, normal
+ * derivatives, second derivatives, etc (Hermite elements, quintic
+ * Argyris element, etc.).
+ *
+ * It seems inevitable that some values of the vector to be created are set
+ * twice or even more than that. The reason is that we have to loop over
+ * all cells and get the function values for each of the trial functions
+ * located thereon. This applies also to the functions located on faces and
+ * corners which we thus visit more than once. While setting the value
+ * in the vector is not an expensive operation, the evaluation of the
+ * given function may be, taking into account that a virtual function has
+ * to be called.
+ *
+ * <li> Projection: compute the <i>L</i><sup>2</sup>-projection of the
+ * given function onto the finite element space, i.e. if <i>f</i> is
+ * the function to be projected, compute <i>f<sub>h</sub></i> in
+ * <i>V<sub>h</sub></i> such that
+ * (<i>f<sub>h</sub></i>,<i>v<sub>h</sub></i>)=(<i>f</i>,<i>v<sub>h</sub></i>)
+ * for all discrete test functions <i>v<sub>h</sub></i>. This is done
+ * through the solution of the linear system of equations <i> M v =
+ * f</i> where <i>M</i> is the mass matrix $m_{ij} = \int_\Omega
+ * \phi_i(x) \phi_j(x) dx$ and $f_i = \int_\Omega f(x) \phi_i(x)
+ * dx$. The solution vector $v$ then is the nodal representation of
+ * the projection <i>f<sub>h</sub></i>. The project() functions are
+ * used in the step-21 and step-23
+ * tutorial programs.
+ *
+ * In order to get proper results, it be may necessary to treat
+ * boundary conditions right. Below are listed some cases where this
+ * may be needed. If needed, this is done by <i>L</i><sup>2</sup>-projection of
+ * the trace of the given function onto the finite element space
+ * restricted to the boundary of the domain, then taking this
+ * information and using it to eliminate the boundary nodes from the
+ * mass matrix of the whole domain, using the
+ * MatrixTools::apply_boundary_values() function. The projection of
+ * the trace of the function to the boundary is done with the
+ * VectorTools::project_boundary_values() (see below) function,
+ * which is called with a map of boundary functions FunctioMap in
+ * which all boundary indicators from zero to numbers::internal_face_boundary_id-1
+ * (numbers::internal_face_boundary_id is used for other purposes,
+ * see the Triangulation class documentation) point
+ * to the function to be projected. The projection to the boundary
+ * takes place using a second quadrature formula on the boundary
+ * given to the project() function. The first quadrature formula is
+ * used to compute the right hand side and for numerical quadrature
+ * of the mass matrix.
+ *
+ * The projection of the boundary values first, then eliminating
+ * them from the global system of equations is not needed
+ * usually. It may be necessary if you want to enforce special
+ * restrictions on the boundary values of the projected function,
+ * for example in time dependent problems: you may want to project
+ * the initial values but need consistency with the boundary values
+ * for later times. Since the latter are projected onto the boundary
+ * in each time step, it is necessary that we also project the
+ * boundary values of the initial values, before projecting them to
+ * the whole domain.
+ *
+ * Obviously, the results of the two schemes for projection are
+ * different. Usually, when projecting to the boundary first, the
+ * <i>L</i><sup>2</sup>-norm of the difference between original
+ * function and projection over the whole domain will be larger
+ * (factors of five have been observed) while the
+ * <i>L</i><sup>2</sup>-norm of the error integrated over the
+ * boundary should of course be less. The reverse should also hold
+ * if no projection to the boundary is performed.
+ *
+ * The selection whether the projection to the boundary first is
+ * needed is done with the <tt>project_to_boundary_first</tt> flag
+ * passed to the function. If @p false is given, the additional
+ * quadrature formula for faces is ignored.
+ *
+ * You should be aware of the fact that if no projection to the boundary
+ * is requested, a function with zero boundary values may not have zero
+ * boundary values after projection. There is a flag for this especially
+ * important case, which tells the function to enforce zero boundary values
+ * on the respective boundary parts. Since enforced zero boundary values
+ * could also have been reached through projection, but are more economically
+ * obtain using other methods, the @p project_to_boundary_first flag is
+ * ignored if the @p enforce_zero_boundary flag is set.
+ *
+ * The solution of the linear system is presently done using a simple CG
+ * method without preconditioning and without multigrid. This is clearly not
+ * too efficient, but sufficient in many cases and simple to implement. This
+ * detail may change in the future.
+ *
+ * <li> Creation of right hand side vectors:
+ * The create_right_hand_side() function computes the vector
+ * $f_i = \int_\Omega f(x) \phi_i(x) dx$. This is the same as what the
+ * <tt>MatrixCreator::create_*</tt> functions which take a right hand side do,
+ * but without assembling a matrix.
+ *
+ * <li> Creation of right hand side vectors for point sources:
+ * The create_point_source_vector() function computes the vector
+ * $f_i = \int_\Omega \delta_0(x-x_0) \phi_i(x) dx$.
+ *
+ * <li> Creation of boundary right hand side vectors: The
+ * create_boundary_right_hand_side() function computes the vector
+ * $f_i = \int_{\partial\Omega} g(x) \phi_i(x) dx$. This is the
+ * right hand side contribution of boundary forces when having
+ * inhomogeneous Neumann boundary values in Laplace's equation or
+ * other second order operators. This function also takes an
+ * optional argument denoting over which parts of the boundary the
+ * integration shall extend. If the default argument is used, it is applied
+ * to all boundaries.
+ *
+ * <li> Interpolation of boundary values:
+ * The MatrixTools::apply_boundary_values() function takes a list
+ * of boundary nodes and their values. You can get such a list by interpolation
+ * of a boundary function using the interpolate_boundary_values() function.
+ * To use it, you have to
+ * specify a list of pairs of boundary indicators (of type <tt>types::boundary_id</tt>;
+ * see the section in the documentation of the Triangulation class for more
+ * details) and the according functions denoting the dirichlet boundary values
+ * of the nodes on boundary faces with this boundary indicator.
+ *
+ * Usually, all other boundary conditions, such as inhomogeneous Neumann values
+ * or mixed boundary conditions are handled in the weak formulation. No attempt
+ * is made to include these into the process of matrix and vector assembly therefore.
+ *
+ * Within this function, boundary values are interpolated, i.e. a node is given
+ * the point value of the boundary function. In some cases, it may be necessary
+ * to use the L2-projection of the boundary function or any other method. For
+ * this purpose we refer to the project_boundary_values()
+ * function below.
+ *
+ * You should be aware that the boundary function may be evaluated at nodes
+ * on the interior of faces. These, however, need not be on the true
+ * boundary, but rather are on the approximation of the boundary represented
+ * by the mapping of the unit cell to the real cell. Since this mapping will
+ * in most cases not be the exact one at the face, the boundary function is
+ * evaluated at points which are not on the boundary and you should make
+ * sure that the returned values are reasonable in some sense anyway.
+ *
+ * In 1d the situation is a bit different since there faces (i.e. vertices) have
+ * no boundary indicator. It is assumed that if the boundary indicator zero
+ * is given in the list of boundary functions, the left boundary point is to be
+ * interpolated while the right boundary point is associated with the boundary
+ * index 1 in the map. The respective boundary functions are then evaluated at
+ * the place of the respective boundary point.
+ *
+ * <li> Projection of boundary values:
+ * The project_boundary_values() function acts similar to the
+ * interpolate_boundary_values() function, apart from the fact that it does
+ * not get the nodal values of boundary nodes by interpolation but rather
+ * through the <i>L</i><sup>2</sup>-projection of the trace of the function to the boundary.
+ *
+ * The projection takes place on all boundary parts with boundary
+ * indicators listed in the map (FunctioMap::FunctionMap)
+ * of boundary functions. These boundary parts may or may not be
+ * continuous. For these boundary parts, the mass matrix is
+ * assembled using the
+ * MatrixTools::create_boundary_mass_matrix() function, as
+ * well as the appropriate right hand side. Then the resulting
+ * system of equations is solved using a simple CG method (without
+ * preconditioning), which is in most cases sufficient for the
+ * present purpose.
+ *
+ * <li> Computing errors:
+ * The function integrate_difference() performs the calculation of
+ * the error between a given (continuous) reference function and the
+ * finite element solution in different norms. The integration is
+ * performed using a given quadrature formula and assumes that the
+ * given finite element objects equals that used for the computation
+ * of the solution.
+ *
+ * The result is stored in a vector (named @p difference), where each entry
+ * equals the given norm of the difference on a cell. The order of entries
+ * is the same as a @p cell_iterator takes when started with @p begin_active and
+ * promoted with the <tt>++</tt> operator.
+ *
+ * This data, one number per active cell, can be used to generate
+ * graphical output by directly passing it to the DataOut class
+ * through the DataOut::add_data_vector function. Alternatively, it
+ * can be interpolated to the nodal points of a finite element field
+ * using the DoFTools::distribute_cell_to_dof_vector function.
+ *
+ * Presently, there is the possibility to compute the following values from the
+ * difference, on each cell: @p mean, @p L1_norm, @p L2_norm, @p Linfty_norm,
+ * @p H1_seminorm and @p H1_norm, see VectorTools::NormType.
+ * For the mean difference value, the reference function minus the numerical
+ * solution is computed, not the other way round.
+ *
+ * The infinity norm of the difference on a given cell returns the maximum
+ * absolute value of the difference at the quadrature points given by the
+ * quadrature formula parameter. This will in some cases not be too good
+ * an approximation, since for example the Gauss quadrature formulae do
+ * not evaluate the difference at the end or corner points of the cells.
+ * You may want to choose a quadrature formula with more quadrature points
+ * or one with another distribution of the quadrature points in this case.
+ * You should also take into account the superconvergence properties of finite
+ * elements in some points: for example in 1D, the standard finite element
+ * method is a collocation method and should return the exact value at nodal
+ * points. Therefore, the trapezoidal rule should always return a vanishing
+ * L-infinity error. Conversely, in 2D the maximum L-infinity error should
+ * be located at the vertices or at the center of the cell, which would make
+ * it plausible to use the Simpson quadrature rule. On the other hand, there
+ * may be superconvergence at Gauss integration points. These examples are not
+ * intended as a rule of thumb, rather they are thought to illustrate that the
+ * use of the wrong quadrature formula may show a significantly wrong result
+ * and care should be taken to chose the right formula.
+ *
+ * The <i>H</i><sup>1</sup> seminorm is the <i>L</i><sup>2</sup>
+ * norm of the gradient of the difference. The square of the full
+ * <i>H</i><sup>1</sup> norm is the sum of the square of seminorm
+ * and the square of the <i>L</i><sup>2</sup> norm.
+ *
+ * To get the global <i>L<sup>1</sup></i> error, you have to sum up the
+ * entries in @p difference, e.g. using
+ * Vector::l1_norm() function. For the global <i>L</i><sup>2</sup>
+ * difference, you have to sum up the squares of the entries and
+ * take the root of the sum, e.g. using
+ * Vector::l2_norm(). These two operations
+ * represent the <i>l</i><sub>1</sub> and <i>l</i><sub>2</sub> norms of the vectors, but you need
+ * not take the absolute value of each entry, since the cellwise
+ * norms are already positive.
+ *
+ * To get the global mean difference, simply sum up the elements as above.
+ * To get the $L_\infty$ norm, take the maximum of the vector elements, e.g.
+ * using the Vector::linfty_norm() function.
+ *
+ * For the global <i>H</i><sup>1</sup> norm and seminorm, the same rule applies as for the
+ * <i>L</i><sup>2</sup> norm: compute the <i>l</i><sub>2</sub> norm
+ * of the cell error vector.
+ *
+ * Note that, in the codimension one case, if you ask for a norm
+ * that requires the computation of a gradient, then the provided
+ * function is automatically projected along the curve, and the
+ * difference is only computed on the tangential part of the
+ * gradient, since no information is available on the normal
+ * component of the gradient anyway.
+ * </ul>
+ *
+ * All functions use the finite element given to the DoFHandler object the last
+ * time that the degrees of freedom were distributed over the triangulation. Also,
+ * if access to an object describing the exact form of the boundary is needed, the
+ * pointer stored within the triangulation object is accessed.
+ *
+ * @note Instantiations for this template are provided for some vector types,
+ * in particular <code>Vector<float>, Vector<double>,
+ * BlockVector<float>, BlockVector<double></code>; others can be
+ * generated in application code (see the section on @ref Instantiations in
+ * the manual).
+ *
+ * @ingroup numerics
+ * @author Wolfgang Bangerth, Ralf Hartmann, Guido Kanschat, 1998, 1999, 2000, 2001
+ */
+namespace VectorTools
+{
+ /**
+ * Denote which norm/integral is
+ * to be computed by the
+ * integrate_difference()
+ * function of this class. The
+ * following possibilities are
+ * implemented:
+ */
+ enum NormType
+ {
+ /**
+ * The function or
+ * difference of functions
+ * is integrated on each
+ * cell.
+ */
+ mean,
+ /**
+ * The absolute value of
+ * the function is
+ * integrated.
+ */
+ L1_norm,
+ /**
+ * The square of the
+ * function is integrated
+ * and the the square root
+ * of the result is
+ * computed on each cell.
+ */
+ L2_norm,
+ /**
+ * The absolute value to
+ * the <i>p</i>th power is
+ * integrated and the pth
+ * root is computed on each
+ * cell. The exponent
+ * <i>p</i> is the last
+ * parameter of the
+ * function.
+ */
+ Lp_norm,
+ /**
+ * The maximum absolute
+ * value of the function.
+ */
+ Linfty_norm,
+ /**
+ * #L2_norm of the gradient.
+ */
+ H1_seminorm,
+ /**
+ * The square of this norm
+ * is the square of the
+ * #L2_norm plus the square
+ * of the #H1_seminorm.
+ */
+ H1_norm,
+ /**
+ * #Lp_norm of the gradient.
+ */
+ W1p_seminorm,
+ /**
+ * same as #H1_norm for
+ * <i>L<sup>p</sup></i>.
+ */
+ W1p_norm,
+ /**
+ * #Linfty_norm of the gradient.
+ */
+ W1infty_seminorm,
+ /**
+ * same as #H1_norm for
+ * <i>L<sup>infty</sup></i>.
+ */
+ W1infty_norm
+
+ };
+/**
+ * @name Interpolation and projection
+ */
+ //@{
+ /**
+ * Compute the interpolation of
+ * @p function at the support
+ * points to the finite element
+ * space described by the Triangulation
+ * and FiniteElement object with which
+ * the given DoFHandler argument is
+ * initialized. It is assumed that the
+ * number of components of
+ * @p function matches that of
+ * the finite element used by
+ * @p dof.
+ *
+ * Note that you may have to call
+ * <tt>hanging_nodes.distribute(vec)</tt>
+ * with the hanging nodes from
+ * space @p dof afterwards, to
+ * make the result continuous
+ * again.
+ *
+ * The template argument <code>DH</code>
+ * may either be of type DoFHandler or
+ * hp::DoFHandler.
+ *
+ * See the general documentation
+ * of this class for further
+ * information.
+ *
+ * @todo The @p mapping argument should be
+ * replaced by a hp::MappingCollection in
+ * case of a hp::DoFHandler.
+ */
+ template <class VECTOR, class DH>
+ void interpolate (const Mapping<DH::dimension,DH::space_dimension> &mapping,
+ const DH &dof,
+ const Function<DH::space_dimension> &function,
+ VECTOR &vec);
+
+ /**
+ * Calls the @p interpolate()
+ * function above with
+ * <tt>mapping=MappingQ1@<dim>@()</tt>.
+ */
+ template <class VECTOR, class DH>
+ void interpolate (const DH &dof,
+ const Function<DH::space_dimension> &function,
+ VECTOR &vec);
+
+ /**
+ * Interpolate different finite
+ * element spaces. The
+ * interpolation of vector
+ * @p data_1 is executed from the
+ * FE space represented by
+ * @p dof_1 to the vector @p data_2
+ * on FE space @p dof_2. The
+ * interpolation on each cell is
+ * represented by the matrix
+ * @p transfer. Curved boundaries
+ * are neglected so far.
+ *
+ * Note that you may have to call
+ * <tt>hanging_nodes.distribute(data_2)</tt>
+ * with the hanging nodes from
+ * space @p dof_2 afterwards, to
+ * make the result continuous
+ * again.
+ *
+ * @note Instantiations for this template
+ * are provided for some vector types
+ * (see the general documentation of the
+ * class), but only the same vector for
+ * InVector and OutVector. Other
+ * combinations must be instantiated by
+ * hand.
+ */
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void interpolate (const DoFHandler<dim,spacedim> &dof_1,
+ const DoFHandler<dim,spacedim> &dof_2,
+ const FullMatrix<double> &transfer,
+ const InVector &data_1,
+ OutVector &data_2);
+
+ /**
+ * Gives the interpolation of a
+ * @p dof1-function @p u1 to a
+ * @p dof2-function @p u2, where @p
+ * dof1 and @p dof2 represent
+ * different triangulations with a
+ * common coarse grid.
+ *
+ * dof1 and dof2 need to have the
+ * same finite element
+ * discretization.
+ *
+ * Note that for continuous
+ * elements on grids with hanging
+ * nodes (i.e. locally refined
+ * grids) this function does not
+ * give the expected output.
+ * Indeed, the resulting output
+ * vector does not necessarily
+ * respect continuity
+ * requirements at hanging nodes,
+ * due to local cellwise
+ * interpolation.
+ *
+ * For this case (continuous
+ * elements on grids with hanging
+ * nodes), please use the
+ * interpolate_to_different_mesh
+ * function with an additional
+ * ConstraintMatrix argument,
+ * see below, or make the field
+ * conforming yourself by calling the
+ * @p ConstraintsMatrix::distribute
+ * function of your hanging node
+ * constraints object.
+ */
+ template <int dim, int spacedim,
+ template <int,int> class DH,
+ class VECTOR>
+ void
+ interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
+ const VECTOR &u1,
+ const DH<dim, spacedim> &dof2,
+ VECTOR &u2);
+
+ /**
+ * Gives the interpolation of a
+ * @p dof1-function @p u1 to a
+ * @p dof2-function @p u2, where @p
+ * dof1 and @p dof2 represent
+ * different triangulations with a
+ * common coarse grid.
+ *
+ * dof1 and dof2 need to have the
+ * same finite element
+ * discretization.
+ *
+ * @p constraints is a hanging node
+ * constraints object corresponding
+ * to @p dof2. This object is
+ * particularly important when
+ * interpolating onto continuous
+ * elements on grids with hanging
+ * nodes (locally refined grids):
+ * Without it - due to cellwise
+ * interpolation - the resulting
+ * output vector does not necessarily
+ * respect continuity requirements
+ * at hanging nodes.
+ */
+ template <int dim, int spacedim,
+ template <int,int> class DH,
+ class VECTOR>
+ void
+ interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
+ const VECTOR &u1,
+ const DH<dim, spacedim> &dof2,
+ const ConstraintMatrix &constraints,
+ VECTOR &u2);
+
+
+ /**
+ * The same function as above, but
+ * takes an InterGridMap object
+ * directly as a parameter. Useful
+ * for interpolating several vectors
+ * at the same time.
+ *
+ * @p intergridmap
+ * has to be initialized via
+ * InterGridMap::make_mapping pointing
+ * from a source DoFHandler to a
+ * destination DoFHandler.
+ */
+ template <int dim, int spacedim,
+ template <int,int> class DH,
+ class VECTOR>
+ void
+ interpolate_to_different_mesh (const InterGridMap<DH<dim, spacedim> > &intergridmap,
+ const VECTOR &u1,
+ const ConstraintMatrix &constraints,
+ VECTOR &u2);
+
+ /**
+ * Compute the projection of
+ * @p function to the finite element space.
+ *
+ * By default, projection to the boundary
+ * and enforcement of zero boundary values
+ * are disabled. The ordering of arguments
+ * to this function is such that you need
+ * not give a second quadrature formula if
+ * you don't want to project to the
+ * boundary first, but that you must if you
+ * want to do so.
+ *
+ * This function needs the mass
+ * matrix of the finite element
+ * space on the present grid. To
+ * this end, the mass matrix is
+ * assembled exactly using
+ * MatrixTools::create_mass_matrix. This
+ * function performs numerical
+ * quadrature using the given
+ * quadrature rule; you should
+ * therefore make sure that the
+ * given quadrature formula is
+ * also sufficient for the
+ * integration of the mass
+ * matrix.
+ *
+ * See the general documentation of this
+ * class for further information.
+ *
+ * In 1d, the default value of
+ * the boundary quadrature
+ * formula is an invalid object
+ * since integration on the
+ * boundary doesn't happen in
+ * 1d.
+ */
+ template <int dim, class VECTOR, int spacedim>
+ void project (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const ConstraintMatrix &constraints,
+ const Quadrature<dim> &quadrature,
+ const Function<spacedim> &function,
+ VECTOR &vec,
+ const bool enforce_zero_boundary = false,
+ const Quadrature<dim-1> &q_boundary = (dim > 1 ?
+ QGauss<dim-1>(2) :
+ Quadrature<dim-1>(0)),
+ const bool project_to_boundary_first = false);
+
+ /**
+ * Calls the project()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, class VECTOR, int spacedim>
+ void project (const DoFHandler<dim,spacedim> &dof,
+ const ConstraintMatrix &constraints,
+ const Quadrature<dim> &quadrature,
+ const Function<spacedim> &function,
+ VECTOR &vec,
+ const bool enforce_zero_boundary = false,
+ const Quadrature<dim-1> &q_boundary = (dim > 1 ?
+ QGauss<dim-1>(2) :
+ Quadrature<dim-1>(0)),
+ const bool project_to_boundary_first = false);
+
+ /**
+ * Prepare Dirichlet boundary
+ * conditions. Make up the list
+ * of degrees of freedom subject
+ * to Dirichlet boundary
+ * conditions and the values to
+ * be assigned to them, by
+ * interpolation around the
+ * boundary. If the
+ * @p boundary_values contained
+ * values before, the new ones
+ * are added, or the old ones
+ * overwritten if a node of the
+ * boundary part to be used
+ * was already in the
+ * map of boundary values.
+ *
+ * The parameter
+ * @p function_map argument
+ * provides a list of boundary
+ * indicators to be handled by
+ * this function and corresponding
+ * boundary value functions. The
+ * keys of this map
+ * correspond to the number
+ * @p boundary_indicator of the
+ * face. numbers::internal_face_boundary_id
+ * is an illegal value for this key since
+ * it is reserved for interior faces.
+ *
+ * The flags in the last
+ * parameter, @p component_mask
+ * denote which components of the
+ * finite element space shall be
+ * interpolated. If it is left as
+ * specified by the default value
+ * (i.e. an empty array), all
+ * components are
+ * interpolated. If it is
+ * different from the default
+ * value, it is assumed that the
+ * number of entries equals the
+ * number of components in the
+ * boundary functions and the
+ * finite element, and those
+ * components in the given
+ * boundary function will be used
+ * for which the respective flag
+ * was set in the component mask.
+ * See also @ref GlossComponentMask.
+ *
+ * It is assumed that the number
+ * of components of the function
+ * in @p boundary_function matches that
+ * of the finite element used by
+ * @p dof.
+ *
+ * If the finite element used has
+ * shape functions that are
+ * non-zero in more than one
+ * component (in deal.II speak:
+ * they are non-primitive), then
+ * these components can presently
+ * not be used for interpolating
+ * boundary values. Thus, the
+ * elements in the component mask
+ * corresponding to the
+ * components of these
+ * non-primitive shape functions
+ * must be @p false.
+ *
+ * See the general doc for more
+ * information.
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
+ const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+ /**
+ * @deprecated This function exists mainly
+ * for backward compatibility.
+ *
+ * Same function as above, but
+ * taking only one pair of
+ * boundary indicator and
+ * corresponding boundary
+ * function. Calls the other
+ * function with remapped
+ * arguments.
+ *
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
+ const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+ /**
+ * Calls the other
+ * interpolate_boundary_values()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+
+ /**
+ * Calls the other
+ * interpolate_boundary_values()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+
+ /**
+ * Insert the (algebraic) constraints due
+ * to Dirichlet boundary conditions into
+ * a ConstraintMatrix @p
+ * constraints. This function identifies
+ * the degrees of freedom subject to
+ * Dirichlet boundary conditions, adds
+ * them to the list of constrained DoFs
+ * in @p constraints and sets the
+ * respective inhomogeneity to the value
+ * interpolated around the boundary. If
+ * this routine encounters a DoF that
+ * already is constrained (for instance
+ * by a hanging node constraint, see
+ * below, or any other type of
+ * constraint, e.g. from periodic
+ * boundary conditions), the old setting
+ * of the constraint (dofs the entry is
+ * constrained to, inhomogeneities) is
+ * kept and nothing happens.
+ *
+ * @note When combining adaptively
+ * refined meshes with hanging node
+ * constraints and boundary conditions
+ * like from the current function within
+ * one ConstraintMatrix object, the
+ * hanging node constraints should always
+ * be set first, and then the boundary
+ * conditions since boundary conditions
+ * are not set in the second operation on
+ * degrees of freedom that are already
+ * constrained. This makes sure that the
+ * discretization remains conforming as
+ * is needed. See the discussion on
+ * conflicting constraints in the module
+ * on @ref constraints .
+ *
+ * The parameter @p boundary_component
+ * corresponds to the number @p
+ * boundary_indicator of the face.
+ * numbers::internal_face_boundary_id
+ * is an illegal value, since it is
+ * reserved for interior faces.
+ *
+ * The flags in the last parameter, @p
+ * component_mask (see @ref GlossComponentMask)
+ * denote which
+ * components of the finite element
+ * space shall be interpolated. If it
+ * is left as specified by the default
+ * value (i.e. an empty array), all
+ * components are interpolated. If it
+ * is different from the default value,
+ * it is assumed that the number of
+ * entries equals the number of
+ * components in the boundary functions
+ * and the finite element, and those
+ * components in the given boundary
+ * function will be used for which the
+ * respective flag was set in the
+ * component mask.
+ *
+ * It is assumed that the number of
+ * components of the function in @p
+ * boundary_function matches that of
+ * the finite element used by @p dof.
+ *
+ * If the finite element used has shape
+ * functions that are non-zero in more
+ * than one component (in deal.II
+ * speak: they are non-primitive), then
+ * these components can presently not
+ * be used for interpolating boundary
+ * values. Thus, the elements in the
+ * component mask corresponding to the
+ * components of these non-primitive
+ * shape functions must be @p false.
+ *
+ * See the general doc for more
+ * information.
+ *
+ * @ingroup constraints
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
+ const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+ /**
+ * @deprecated This function exists
+ * only for backward compatibility.
+ *
+ * Same function as above, but taking
+ * only one pair of boundary indicator
+ * and corresponding boundary
+ * function. Calls the other function
+ * with remapped arguments.
+ *
+ * @ingroup constraints
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
+ const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+ /**
+ * Calls the other
+ * interpolate_boundary_values()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ *
+ * @ingroup constraints
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+
+ /**
+ * Calls the other
+ * interpolate_boundary_values()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ *
+ * @ingroup constraints
+ */
+ template <class DH>
+ void
+ interpolate_boundary_values (const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask = std::vector<bool>());
+
+
+ /**
+ * Project a function to the boundary
+ * of the domain, using the given
+ * quadrature formula for the faces. If
+ * the @p boundary_values contained
+ * values before, the new ones are
+ * added, or the old one overwritten if
+ * a node of the boundary part to be
+ * projected on already was in the
+ * variable.
+ *
+ * If @p component_mapping is empty, it
+ * is assumed that the number of
+ * components of @p boundary_function
+ * matches that of the finite element
+ * used by @p dof.
+ *
+ * In 1d, projection equals
+ * interpolation. Therefore,
+ * interpolate_boundary_values is
+ * called.
+ *
+ * @arg @p boundary_values: the result
+ * of this function, a map containing
+ * all indices of degrees of freedom at
+ * the boundary (as covered by the
+ * boundary parts in @p
+ * boundary_functions) and the computed
+ * dof value for this degree of
+ * freedom.
+ *
+ * @arg @p component_mapping: if the
+ * components in @p boundary_functions
+ * and @p dof do not coincide, this
+ * vector allows them to be
+ * remapped. If the vector is not
+ * empty, it has to have one entry for
+ * each component in @p dof. This entry
+ * is the component number in @p
+ * boundary_functions that should be
+ * used for this component in @p
+ * dof. By default, no remapping is
+ * applied.
+ */
+ template <int dim, int spacedim>
+ void project_boundary_values (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ const Quadrature<dim-1> &q,
+ std::map<unsigned int,double> &boundary_values,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+ /**
+ * Calls the project_boundary_values()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void project_boundary_values (const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_function,
+ const Quadrature<dim-1> &q,
+ std::map<unsigned int,double> &boundary_values,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+ /**
+ * Project a function to the boundary of
+ * the domain, using the given quadrature
+ * formula for the faces. This function
+ * identifies the degrees of freedom
+ * subject to Dirichlet boundary
+ * conditions, adds them to the list of
+ * constrained DoFs in @p constraints and
+ * sets the respective inhomogeneity to
+ * the value resulting from the
+ * projection operation. If this routine
+ * encounters a DoF that already is
+ * constrained (for instance by a hanging
+ * node constraint, see below, or any
+ * other type of constraint, e.g. from
+ * periodic boundary conditions), the old
+ * setting of the constraint (dofs the
+ * entry is constrained to,
+ * inhomogeneities) is kept and nothing
+ * happens.
+ *
+ * @note When combining adaptively
+ * refined meshes with hanging node
+ * constraints and boundary conditions
+ * like from the current function within
+ * one ConstraintMatrix object, the
+ * hanging node constraints should always
+ * be set first, and then the boundary
+ * conditions since boundary conditions
+ * are not set in the second operation on
+ * degrees of freedom that are already
+ * constrained. This makes sure that the
+ * discretization remains conforming as
+ * is needed. See the discussion on
+ * conflicting constraints in the module
+ * on @ref constraints .
+ *
+ * If @p component_mapping is empty, it
+ * is assumed that the number of
+ * components of @p boundary_function
+ * matches that of the finite element
+ * used by @p dof.
+ *
+ * In 1d, projection equals
+ * interpolation. Therefore,
+ * interpolate_boundary_values is
+ * called.
+ *
+ * @arg @p component_mapping: if the
+ * components in @p boundary_functions
+ * and @p dof do not coincide, this
+ * vector allows them to be
+ * remapped. If the vector is not
+ * empty, it has to have one entry for
+ * each component in @p dof. This entry
+ * is the component number in @p
+ * boundary_functions that should be
+ * used for this component in @p
+ * dof. By default, no remapping is
+ * applied.
+ *
+ * @ingroup constraints
+ */
+ template <int dim, int spacedim>
+ void project_boundary_values (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ const Quadrature<dim-1> &q,
+ ConstraintMatrix &constraints,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+ /**
+ * Calls the project_boundary_values()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ *
+ * @ingroup constraints
+ */
+ template <int dim, int spacedim>
+ void project_boundary_values (const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_function,
+ const Quadrature<dim-1> &q,
+ ConstraintMatrix &constraints,
+ std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
+
+
+ /**
+ * Compute constraints that correspond to
+ * boundary conditions of the form
+ * $\vec{n}\times\vec{u}=\vec{n}\times\vec{f}$,
+ * i.e. the tangential components of $u$
+ * and $f$ shall coincide.
+ *
+ * If the ConstraintMatrix @p constraints
+ * contained values or other
+ * constraints before, the new ones are
+ * added or the old ones overwritten,
+ * if a node of the boundary part to be
+ * used was already in the list of
+ * constraints. This is handled by
+ * using inhomogeneous constraints. Please
+ * note that when combining adaptive meshes
+ * and this kind of constraints, the
+ * Dirichlet conditions should be set
+ * first, and then completed by hanging
+ * node constraints, in order to make sure
+ * that the discretization remains
+ * consistent. See the discussion on
+ * conflicting constraints in the
+ * module on @ref constraints .
+ *
+ * This function is explecitly written to
+ * use with the FE_Nedelec elements. Thus
+ * it throws an exception, if it is
+ * called with other finite elements.
+ *
+ * The second argument of this function
+ * denotes the first vector component in
+ * the finite element that corresponds to
+ * the vector function that you want to
+ * constrain. For example, if we want to
+ * solve Maxwell's equations in 3d and the
+ * finite element has components
+ * $(E_x,E_y,E_z,B_x,B_y,B_z)$ and we want
+ * the boundary conditions
+ * $\vec{n}\times\vec{B}=\vec{n}\times\vec{f}$,
+ * then @p first_vector_component would
+ * be 3. Vectors are implicitly assumed to
+ * have exactly <code>dim</code> components
+ * that are ordered in the same way as we
+ * usually order the coordinate directions,
+ * i.e. $x$-, $y$-, and finally
+ * $z$-component.
+ *
+ * The parameter @p boundary_component
+ * corresponds to the number
+ * @p boundary_indicator of the face.
+ * numbers::internal_face_boundary_id
+ * is an illegal value, since it is
+ * reserved for interior faces.
+ *
+ * The last argument is denoted to compute
+ * the normal vector $\vec{n}$ at the
+ * boundary points.
+ *
+ * <h4>Computing constraints</h4>
+ *
+ * To compute the constraints we use
+ * projection-based interpolation as proposed
+ * in Solin, Segeth and Dolezel
+ * (Higher order finite elements, Chapman&Hall,
+ * 2004) on every face located at the
+ * boundary.
+ *
+ * First one projects $\vec{f}$ on the
+ * lowest-order edge shape functions. Then the
+ * remaining part $(I-P_0)\vec{f}$ of the
+ * function is projected on the remaining
+ * higher-order edge shape functions. In the
+ * last step we project $(I-P_0-P_e)\vec{f}$
+ * on the bubble shape functions defined on
+ * the face.
+ *
+ * @ingroup constraints
+ */
+ template <int dim>
+ void project_boundary_values_curl_conforming (const DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const Mapping<dim>& mapping = StaticMappingQ1<dim>::mapping);
+
+ /**
+ * Same as above for the hp-namespace.
+ *
+ * @ingroup constraints
+ */
+ template <int dim>
+ void project_boundary_values_curl_conforming (const hp::DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const hp::MappingCollection<dim, dim>& mapping_collection = hp::StaticMappingQ1<dim>::mapping_collection);
+
+
+ /**
+ * Compute constraints that correspond to
+ * boundary conditions of the form
+ * $\vec{n}^T\vec{u}=\vec{n}^T\vec{f}$,
+ * i.e. the normal components of $u$
+ * and $f$ shall coincide.
+ *
+ * If the ConstraintMatrix @p constraints
+ * contained values or other
+ * constraints before, the new ones are
+ * added or the old ones overwritten,
+ * if a node of the boundary part to be
+ * used was already in the list of
+ * constraints. This is handled by
+ * using inhomogeneous constraints. Please
+ * note that when combining adaptive meshes
+ * and this kind of constraints, the
+ * Dirichlet conditions should be set
+ * first, and then completed by hanging
+ * node constraints, in order to make sure
+ * that the discretization remains
+ * consistent. See the discussion on
+ * conflicting constraints in the
+ * module on @ref constraints .
+ *
+ * This function is explecitly written to
+ * use with the FE_RaviartThomas elements.
+ * Thus it throws an exception, if it is
+ * called with other finite elements.
+ *
+ * The second argument of this function
+ * denotes the first vector component in
+ * the finite element that corresponds to
+ * the vector function that you want to
+ * constrain. Vectors are implicitly
+ * assumed to have exactly
+ * <code>dim</code> components that are
+ * ordered in the same way as we
+ * usually order the coordinate directions,
+ * i.e. $x$-, $y$-, and finally
+ * $z$-component.
+ *
+ * The parameter @p boundary_component
+ * corresponds to the number
+ * @p boundary_indicator of the face.
+ * numbers::internal_face_boundary_id
+ * is an illegal value, since it is
+ * reserved for interior faces.
+ *
+ * The last argument is denoted to compute
+ * the normal vector $\vec{n}$ at the
+ * boundary points.
+ *
+ * <h4>Computing constraints</h4>
+ *
+ * To compute the constraints we use
+ * interpolation operator proposed
+ * in Brezzi, Fortin (Mixed and Hybrid
+ * (Finite Element Methods, Springer,
+ * 1991) on every face located at the
+ * boundary.
+ *
+ * @ingroup constraints
+ */
+ template<int dim>
+ void project_boundary_values_div_conforming (const DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const Mapping<dim>& mapping = StaticMappingQ1<dim>::mapping);
+
+ /**
+ * Same as above for the hp-namespace.
+ *
+ * @ingroup constraints
+ */
+ template<int dim>
+ void project_boundary_values_div_conforming (const hp::DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const hp::MappingCollection<dim, dim>& mapping_collection = hp::StaticMappingQ1<dim>::mapping_collection);
+
+
+ /**
+ * Compute the constraints that
+ * correspond to boundary conditions of
+ * the form $\vec n \cdot \vec u=0$,
+ * i.e. no normal flux if $\vec u$ is a
+ * vector-valued quantity. These
+ * conditions have exactly the form
+ * handled by the ConstraintMatrix class,
+ * so instead of creating a map between
+ * boundary degrees of freedom and
+ * corresponding value, we here create a
+ * list of constraints that are written
+ * into a ConstraintMatrix. This object
+ * may already have some content, for
+ * example from hanging node constraints,
+ * that remains untouched. These
+ * constraints have to be applied to the
+ * linear system like any other such
+ * constraints, i.e. you have to condense
+ * the linear system with the constraints
+ * before solving, and you have to
+ * distribute the solution vector
+ * afterwards.
+ *
+ * The use of this function is
+ * explained in more detail in
+ * step-31. It
+ * doesn't make much sense in 1d,
+ * so the function throws an
+ * exception in that case.
+ *
+ * The second argument of this
+ * function denotes the first
+ * vector component in the finite
+ * element that corresponds to
+ * the vector function that you
+ * want to constrain. For
+ * example, if we were solving a
+ * Stokes equation in 2d and the
+ * finite element had components
+ * $(u,v,p)$, then @p
+ * first_vector_component would
+ * be zero. On the other hand, if
+ * we solved the Maxwell
+ * equations in 3d and the finite
+ * element has components
+ * $(E_x,E_y,E_z,B_x,B_y,B_z)$
+ * and we want the boundary
+ * condition $\vec n\cdot \vec
+ * B=0$, then @p
+ * first_vector_component would
+ * be 3. Vectors are implicitly
+ * assumed to have exactly
+ * <code>dim</code> components
+ * that are ordered in the same
+ * way as we usually order the
+ * coordinate directions,
+ * i.e. $x$-, $y$-, and finally
+ * $z$-component. The function
+ * assumes, but can't check, that
+ * the vector components in the
+ * range
+ * <code>[first_vector_component,first_vector_component+dim)</code>
+ * come from the same base finite
+ * element. For example, in the
+ * Stokes example above, it would
+ * not make sense to use a
+ * <code>FESystem@<dim@>(FE_Q@<dim@>(2),
+ * 1, FE_Q@<dim@>(1), dim)</code>
+ * (note that the first velocity
+ * vector component is a $Q_2$
+ * element, whereas all the other
+ * ones are $Q_1$ elements) as
+ * there would be points on the
+ * boundary where the
+ * $x$-velocity is defined but no
+ * corresponding $y$- or
+ * $z$-velocities.
+ *
+ * The third argument denotes the set of
+ * boundary indicators on which the
+ * boundary condition is to be
+ * enforced. Note that, as explained
+ * below, this is one of the few
+ * functions where it makes a difference
+ * where we call the function multiple
+ * times with only one boundary
+ * indicator, or whether we call the
+ * function onces with the whole set of
+ * boundary indicators at once.
+ *
+ * The mapping argument is used to
+ * compute the boundary points where the function
+ * needs to request the normal vector $\vec n$
+ * from the boundary description.
+ *
+ * @note When combining adaptively
+ * refined meshes with hanging node
+ * constraints and boundary conditions
+ * like from the current function within
+ * one ConstraintMatrix object, the
+ * hanging node constraints should always
+ * be set first, and then the boundary
+ * conditions since boundary conditions
+ * are not set in the second operation on
+ * degrees of freedom that are already
+ * constrained. This makes sure that the
+ * discretization remains conforming as
+ * is needed. See the discussion on
+ * conflicting constraints in the module
+ * on @ref constraints .
+ *
+ *
+ * <h4>Computing constraints in 2d</h4>
+ *
+ * Computing these constraints requires
+ * some smarts. The main question
+ * revolves around the question what the
+ * normal vector is. Consider the
+ * following situation:
+ * <p ALIGN="center">
+ * @image html no_normal_flux_1.png
+ * </p>
+ *
+ * Here, we have two cells that use a
+ * bilinear mapping
+ * (i.e. MappingQ1). Consequently, for
+ * each of the cells, the normal vector
+ * is perpendicular to the straight
+ * edge. If the two edges at the top and
+ * right are meant to approximate a
+ * curved boundary (as indicated by the
+ * dashed line), then neither of the two
+ * computed normal vectors are equal to
+ * the exact normal vector (though they
+ * approximate it as the mesh is refined
+ * further). What is worse, if we
+ * constrain $\vec n \cdot \vec u=0$ at
+ * the common vertex with the normal
+ * vector from both cells, then we
+ * constrain the vector $\vec u$ with
+ * respect to two linearly independent
+ * vectors; consequently, the constraint
+ * would be $\vec u=0$ at this point
+ * (i.e. <i>all</i> components of the
+ * vector), which is not what we wanted.
+ *
+ * To deal with this situation, the
+ * algorithm works in the following way:
+ * at each point where we want to
+ * constrain $\vec u$, we first collect
+ * all normal vectors that adjacent cells
+ * might compute at this point. We then
+ * do not constrain $\vec n \cdot \vec
+ * u=0$ for <i>each</i> of these normal
+ * vectors but only for the
+ * <i>average</i> of the normal
+ * vectors. In the example above, we
+ * therefore record only a single
+ * constraint $\vec n \cdot \vec {\bar
+ * u}=0$, where $\vec {\bar u}$ is the
+ * average of the two indicated normal
+ * vectors.
+ *
+ * Unfortunately, this is not quite
+ * enough. Consider the situation here:
+ *
+ * <p ALIGN="center">
+ * @image html no_normal_flux_2.png
+ * </p>
+ *
+ * If again the top and right edges
+ * approximate a curved boundary, and the
+ * left boundary a separate boundary (for
+ * example straight) so that the exact
+ * boundary has indeed a corner at the
+ * top left vertex, then the above
+ * construction would not work: here, we
+ * indeed want the constraint that $\vec
+ * u$ at this point (because the normal
+ * velocities with respect to both the
+ * left normal as well as the top normal
+ * vector should be zero), not that the
+ * velocity in the direction of the
+ * average normal vector is zero.
+ *
+ * Consequently, we use the following
+ * heuristic to determine whether all
+ * normal vectors computed at one point
+ * are to be averaged: if two normal
+ * vectors for the same point are
+ * computed on <i>different</i> cells,
+ * then they are to be averaged. This
+ * covers the first example above. If
+ * they are computed from the same cell,
+ * then the fact that they are different
+ * is considered indication that they
+ * come from different parts of the
+ * boundary that might be joined by a
+ * real corner, and must not be averaged.
+ *
+ * There is one problem with this
+ * scheme. If, for example, the same
+ * domain we have considered above, is
+ * discretized with the following mesh,
+ * then we get into trouble:
+ *
+ * <p ALIGN="center">
+ * @image html no_normal_flux_2.png
+ * </p>
+ *
+ * Here, the algorithm assumes that the
+ * boundary does not have a corner at the
+ * point where faces $F1$ and $F2$ join
+ * because at that point there are two
+ * different normal vectors computed from
+ * different cells. If you intend for
+ * there to be a corner of the exact
+ * boundary at this point, the only way
+ * to deal with this is to assign the two
+ * parts of the boundary different
+ * boundary indicators and call this
+ * function twice, once for each boundary
+ * indicators; doing so will yield only
+ * one normal vector at this point per
+ * invocation (because we consider only
+ * one boundary part at a time), with the
+ * result that the normal vectors will
+ * not be averaged.
+ *
+ *
+ * <h4>Computing constraints in 3d</h4>
+ *
+ * The situation is more
+ * complicated in 3d. Consider
+ * the following case where we
+ * want to compute the
+ * constraints at the marked
+ * vertex:
+ *
+ * <p ALIGN="center">
+ * @image html no_normal_flux_4.png
+ * </p>
+ *
+ * Here, we get four different
+ * normal vectors, one from each
+ * of the four faces that meet at
+ * the vertex. Even though they
+ * may form a complete set of
+ * vectors, it is not our intent
+ * to constrain all components of
+ * the vector field at this
+ * point. Rather, we would like
+ * to still allow tangential
+ * flow, where the term
+ * "tangential" has to be
+ * suitably defined.
+ *
+ * In a case like this, the
+ * algorithm proceeds as follows:
+ * for each cell that has
+ * computed two tangential
+ * vectors at this point, we
+ * compute the unconstrained
+ * direction as the outer product
+ * of the two tangential vectors
+ * (if necessary multiplied by
+ * minus one). We then average
+ * these tangential
+ * vectors. Finally, we compute
+ * constraints for the two
+ * directions perpendicular to
+ * this averaged tangential
+ * direction.
+ *
+ * There are cases where one cell
+ * contributes two tangential
+ * directions and another one
+ * only one; for example, this
+ * would happen if both top and
+ * front faces of the left cell
+ * belong to the boundary
+ * selected whereas only the top
+ * face of the right cell belongs
+ * to it. This case is not
+ * currently implemented.
+ *
+ *
+ * <h4>Results</h4>
+ *
+ * Because it makes for good
+ * pictures, here are two images
+ * of vector fields on a circle
+ * and on a sphere to which the
+ * constraints computed by this
+ * function have been applied:
+ *
+ * <p ALIGN="center">
+ * @image html no_normal_flux_5.png
+ * @image html no_normal_flux_6.png
+ * </p>
+ *
+ * The vectors fields are not
+ * physically reasonable but the
+ * tangentiality constraint is
+ * clearly enforced. The fact
+ * that the vector fields are
+ * zero at some points on the
+ * boundary is an artifact of the
+ * way it is created, it is not
+ * constrained to be zero at
+ * these points.
+ *
+ * @ingroup constraints
+ */
+ template <int dim, template <int, int> class DH, int spacedim>
+
+ void
+ compute_no_normal_flux_constraints (const DH<dim,spacedim> &dof_handler,
+ const unsigned int first_vector_component,
+ const std::set<types::boundary_id> &boundary_ids,
+ ConstraintMatrix &constraints,
+ const Mapping<dim, spacedim> &mapping = StaticMappingQ1<dim>::mapping);
+
+
+ //@}
+ /**
+ * @name Assembling of right hand sides
+ */
+ //@{
+
+ /**
+ * Create a right hand side
+ * vector. Prior content of the
+ * given @p rhs_vector vector is
+ * deleted.
+ *
+ * See the general documentation of this
+ * class for further information.
+ */
+ template <int dim, int spacedim>
+ void create_right_hand_side (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Calls the create_right_hand_side()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void create_right_hand_side (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Like the previous set of functions,
+ * but for hp objects.
+ */
+ template <int dim, int spacedim>
+ void create_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Like the previous set of functions,
+ * but for hp objects.
+ */
+ template <int dim, int spacedim>
+ void create_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Create a right hand side
+ * vector for a point source at point @p p.
+ * Prior content of the
+ * given @p rhs_vector vector is
+ * deleted.
+ *
+ * See the general documentation of this
+ * class for further information.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const Mapping<dim,spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Calls the create_point_source_vector()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Like the previous set of functions,
+ * but for hp objects.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Like the previous set of functions,
+ * but for hp objects. The function uses
+ * the default Q1 mapping object. Note
+ * that if your hp::DoFHandler uses any
+ * active fe index other than zero, then
+ * you need to call the function above
+ * that provides a mapping object for
+ * each active fe index.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const hp::DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Create a right hand side
+ * vector for a point source at point @p p
+ * for vector-valued finite elements.
+ * Prior content of the
+ * given @p rhs_vector vector is
+ * deleted.
+ *
+ * See the general documentation of this
+ * class for further information.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const Mapping<dim,spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Calls the create_point_source_vector()
+ * function for vector-valued finite elements,
+ * see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Like the previous set of functions,
+ * but for hp objects.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Like the previous set of functions,
+ * but for hp objects. The function uses
+ * the default Q1 mapping object. Note
+ * that if your hp::DoFHandler uses any
+ * active fe index other than zero, then
+ * you need to call the function above
+ * that provides a mapping object for
+ * each active fe index.
+ */
+ template <int dim, int spacedim>
+ void create_point_source_vector(const hp::DoFHandler<dim,spacedim> &dof,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector);
+
+ /**
+ * Create a right hand side
+ * vector from boundary
+ * forces. Prior content of the
+ * given @p rhs_vector vector is
+ * deleted.
+ *
+ * See the general documentation of this
+ * class for further information.
+ */
+ template <int dim, int spacedim>
+ void create_boundary_right_hand_side (const Mapping<dim,spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim-1> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
+
+ /**
+ * Calls the
+ * create_boundary_right_hand_side()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, int spacedim>
+ void create_boundary_right_hand_side (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim-1> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
+
+ /**
+ * Same as the set of functions above,
+ * but for hp objects.
+ */
+ template <int dim, int spacedim>
+ void create_boundary_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim-1> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
+
+ /**
+ * Calls the
+ * create_boundary_right_hand_side()
+ * function, see above, with a
+ * single Q1 mapping as
+ * collection. This function
+ * therefore will only work if
+ * the only active fe index in
+ * use is zero.
+ */
+ template <int dim, int spacedim>
+ void create_boundary_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof,
+ const hp::QCollection<dim-1> &q,
+ const Function<spacedim> &rhs,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators = std::set<types::boundary_id>());
+
+ //@}
+ /**
+ * @name Evaluation of functions
+ * and errors
+ */
+ //@{
+
+ /**
+ * Compute the error of the
+ * finite element solution.
+ * Integrate the difference
+ * between a reference function
+ * which is given as a continuous
+ * function object, and a finite
+ * element function.
+ *
+ * The value of @p exponent is
+ * used for computing $L^p$-norms
+ * and $W^{1,p}$-norms.
+ *
+ * The additional argument @p
+ * weight allows to evaluate
+ * weighted norms. The weight
+ * function may be scalar,
+ * establishing a weight in the
+ * domain for all components
+ * equally. This may be used, for
+ * instance, to only integrates
+ * over parts of the domain.
+ *
+ * The weight function may also
+ * be vector-valued, with as many
+ * components as the finite
+ * element function: Then,
+ * different components get
+ * different weights. A typical
+ * application is when the error
+ * with respect to only one or a
+ * subset of the solution
+ * variables is to be computed,
+ * in which the other components
+ * would have weight values equal
+ * to zero. The
+ * ComponentSelectFunction class
+ * is particularly useful for
+ * this purpose.
+ *
+ * The weight function is
+ * expected to be positive, but
+ * negative values are not
+ * filtered. By default, no
+ * weighting function is given,
+ * i.e. weight=1 in the whole
+ * domain for all vector
+ * components uniformly. Note that
+ * one often wants to compute the
+ * error in only one component of
+ * a solution vector (e.g. for the
+ * pressure in the Stokes system,
+ * when the solution vector also
+ * contains the velocity components).
+ * In these cases, the weight should
+ * be a <i>mask</i>, i.e., be a
+ * vector function for which individual
+ * components are either zero or one.
+ * This can easily be achieved using
+ * the ComponentSelectFunction
+ * class.
+ *
+ * It is assumed that the number
+ * of components of the function
+ * @p exact_solution matches that
+ * of the finite element used by
+ * @p dof.
+ *
+ * See the general documentation of this
+ * class for more information.
+ *
+ * @note Instantiations for this template
+ * are provided for some vector types
+ * (see the general documentation of the
+ * class), but only for InVectors as in
+ * the documentation of the class,
+ * OutVector only Vector<double> and
+ * Vector<float>.
+ */
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void integrate_difference (const Mapping<dim,spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const Quadrature<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight = 0,
+ const double exponent = 2.);
+
+ /**
+ * Calls the integrate_difference()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void integrate_difference (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const Quadrature<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight = 0,
+ const double exponent = 2.);
+
+ /**
+ * Same as above for hp.
+ */
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void integrate_difference (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const hp::QCollection<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight = 0,
+ const double exponent = 2.);
+
+ /**
+ * Calls the integrate_difference()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void integrate_difference (const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const hp::QCollection<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight = 0,
+ const double exponent = 2.);
+
+ /**
+ * Point error evaluation. Find
+ * the first cell containing the
+ * given point and compute the
+ * difference of a (possibly
+ * vector-valued) finite element
+ * function and a continuous
+ * function (with as many vector
+ * components as the finite
+ * element) at this point.
+ *
+ * This is a wrapper function
+ * using a Q1-mapping for cell
+ * boundaries to call the other
+ * point_difference() function.
+ */
+ template <int dim, class InVector, int spacedim>
+ void point_difference (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ Vector<double> &difference,
+ const Point<spacedim> &point);
+
+ /**
+ * Point error evaluation. Find
+ * the first cell containing the
+ * given point and compute the
+ * difference of a (possibly
+ * vector-valued) finite element
+ * function and a continuous
+ * function (with as many vector
+ * components as the finite
+ * element) at this point.
+ *
+ * Compared with the other
+ * function of the same name,
+ * this function uses an
+ * arbitrary mapping to evaluate
+ * the difference.
+ */
+ template <int dim, class InVector, int spacedim>
+ void point_difference (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ Vector<double> &difference,
+ const Point<spacedim> &point);
+
+ /**
+ * Evaluate a possibly
+ * vector-valued finite element
+ * function defined by the given
+ * DoFHandler and nodal vector at
+ * the given point, and return
+ * the (vector) value of this
+ * function through the last
+ * argument.
+ *
+ * This is a wrapper function
+ * using a Q1-mapping for cell
+ * boundaries to call the other
+ * point_difference() function.
+ */
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value);
+
+ /**
+ * Same as above for hp.
+ */
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value);
+
+ /**
+ * Evaluate a scalar finite
+ * element function defined by
+ * the given DoFHandler and nodal
+ * vector at the given point, and
+ * return the value of this
+ * function.
+ *
+ * Compared with the other
+ * function of the same name,
+ * this is a wrapper function using
+ * a Q1-mapping for cells.
+ *
+ * This function is used in the
+ * "Possibilities for extensions" part of
+ * the results section of @ref step_3
+ * "step-3".
+ */
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point);
+
+ /**
+ * Same as above for hp.
+ */
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point);
+
+ /**
+ * Evaluate a possibly
+ * vector-valued finite element
+ * function defined by the given
+ * DoFHandler and nodal vector at
+ * the given point, and return
+ * the (vector) value of this
+ * function through the last
+ * argument.
+ *
+ * Compared with the other
+ * function of the same name,
+ * this function uses an arbitrary
+ * mapping to evaluate the difference.
+ */
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value);
+
+ /**
+ * Same as above for hp.
+ */
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const hp::MappingCollection<dim, spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value);
+
+ /**
+ * Evaluate a scalar finite
+ * element function defined by
+ * the given DoFHandler and nodal
+ * vector at the given point, and
+ * return the value of this
+ * function.
+ *
+ * Compared with the other
+ * function of the same name,
+ * this function uses an arbitrary
+ * mapping to evaluate the difference.
+ */
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const Mapping<dim,spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point);
+
+ /**
+ * Same as above for hp.
+ */
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point);
+
+ //@}
+ /**
+ * Mean value operations
+ */
+ //@{
+
+ /**
+ * Subtract the (algebraic) mean value
+ * from a vector. This function is most
+ * frequently used as a mean-value filter
+ * for Stokes: The pressure in Stokes'
+ * equations with only Dirichlet
+ * boundaries for the velocities is only
+ * determined up to a constant. This
+ * function allows to subtract the mean
+ * value of the pressure. It is usually
+ * called in a preconditioner and
+ * generates updates with mean value
+ * zero. The mean value is computed as
+ * the mean value of the degrees of
+ * freedom values as given by the input
+ * vector; they are not weighted by the
+ * area of cells, i.e. the mean is
+ * computed as $\sum_i v_i$, rather than
+ * as $\int_\Omega v(x) = \int_\Omega
+ * \sum_i v_i \phi_i(x)$. The latter can
+ * be obtained from the
+ * VectorTools::compute_mean_function,
+ * however.
+ *
+ * Apart from the vector @p v to operate
+ * on, this function takes a boolean mask
+ * that has a true entry for every element
+ * of the vector for which the mean value
+ * shall be computed and later
+ * subtracted. The argument is used to
+ * denote which components of the solution
+ * vector correspond to the pressure, and
+ * avoid touching all other components of
+ * the vector, such as the velocity
+ * components. (Note, however, that the
+ * mask is not a @ref GlossComponentMask
+ * operating on the vector components of
+ * the finite element the solution vector
+ * @p v may be associated with; rather, it
+ * is a mask on the entire vector, without
+ * reference to what the vector elements
+ * mean.)
+ *
+ * @note In the context of using this
+ * function to filter out the kernel of
+ * an operator (such as the null space of
+ * the Stokes operator that consists of
+ * the constant pressures), this function
+ * only makes sense for finite elements
+ * for which the null space indeed
+ * consists of the vector
+ * $(1,1,\ldots,1)^T$. This is the case
+ * for example for the usual Lagrange
+ * elements where the sum of all shape
+ * functions equals the function that is
+ * constant one. However, it is not true
+ * for some other functions: for example,
+ * for the FE_DGP element (another valid
+ * choice for the pressure in Stokes
+ * discretizations), the first shape
+ * function on each cell is constant
+ * while further elements are $L_2$
+ * orthogonal to it (on the reference
+ * cell); consequently, the sum of all
+ * shape functions is not equal to one,
+ * and the vector that is associated with
+ * the constant mode is not equal to
+ * $(1,1,\ldots,1)^T$. For such elements,
+ * a different procedure has to be used
+ * when subtracting the mean value.
+ */
+ void subtract_mean_value(Vector<double> &v,
+ const std::vector<bool> &p_select);
+
+ /**
+ * Compute the mean value of one
+ * component of the solution.
+ *
+ * This function integrates the
+ * chosen component over the
+ * whole domain and returns the
+ * result, i.e. it computes
+ * $\int_\Omega [u_h(x)]_c \; dx$
+ * where $c$ is the vector component
+ * and $u_h$ is the function
+ * representation of the nodal
+ * vector given as fourth
+ * argument. The integral is evaluated
+ * numerically using the quadrature
+ * formula given as third argument.
+ *
+ * This function is used in the
+ * "Possibilities for extensions" part of
+ * the results section of @ref step_3
+ * "step-3".
+ *
+ * @note The function is most often used
+ * when solving a problem whose solution
+ * is only defined up to a constant, for
+ * example a pure Neumann problem or the
+ * pressure in a Stokes or Navier-Stokes
+ * problem. In both cases, subtracting
+ * the mean value as computed by the
+ * current function, from the nodal
+ * vector does not generally yield the
+ * desired result of a finite element
+ * function with mean value zero. In
+ * fact, it only works for Lagrangian
+ * elements. For all other elements, you
+ * will need to compute the mean value
+ * and subtract it right inside the
+ * evaluation routine.
+ */
+ template <int dim, class InVector, int spacedim>
+ double compute_mean_value (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &quadrature,
+ const InVector &v,
+ const unsigned int component);
+
+ /**
+ * Calls the other compute_mean_value()
+ * function, see above, with
+ * <tt>mapping=MappingQ1@<dim@>()</tt>.
+ */
+ template <int dim, class InVector, int spacedim>
+ double compute_mean_value (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &quadrature,
+ const InVector &v,
+ const unsigned int component);
+ //@}
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcInvalidBoundaryIndicator);
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcNonInterpolatingFE);
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcNoComponentSelected);
+}
+
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
--- /dev/null
+//---------------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------------------------------------------------------
+
+#ifndef _deal2__vector_tools_templates_h
+#define _deal2__vector_tools_templates_h
+
+#include <deal.II/base/derivative_form.h>
+#include <deal.II/base/function.h>
+#include <deal.II/base/quadrature.h>
+#include <deal.II/lac/vector.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/parallel_vector.h>
+#include <deal.II/lac/parallel_block_vector.h>
+#include <deal.II/lac/petsc_vector.h>
+#include <deal.II/lac/petsc_block_vector.h>
+#include <deal.II/lac/trilinos_vector.h>
+#include <deal.II/lac/trilinos_block_vector.h>
+#include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
+#include <deal.II/lac/precondition.h>
+#include <deal.II/lac/solver_cg.h>
+#include <deal.II/lac/vector_memory.h>
+#include <deal.II/lac/filtered_matrix.h>
+#include <deal.II/lac/constraint_matrix.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_boundary.h>
+#include <deal.II/grid/grid_tools.h>
+#include <deal.II/grid/intergrid_map.h>
+#include <deal.II/dofs/dof_accessor.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/dofs/dof_tools.h>
+#include <deal.II/fe/fe.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/fe/fe_tools.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/mapping_q1.h>
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/hp/fe_values.h>
+#include <deal.II/hp/mapping_collection.h>
+#include <deal.II/hp/q_collection.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
+
+#include <numeric>
+#include <algorithm>
+#include <vector>
+#include <cmath>
+#include <limits>
+#include <set>
+
+DEAL_II_NAMESPACE_OPEN
+
+
+namespace VectorTools
+{
+
+ template <class VECTOR, class DH>
+ void interpolate (const Mapping<DH::dimension,DH::space_dimension> &mapping,
+ const DH &dof,
+ const Function<DH::space_dimension> &function,
+ VECTOR &vec)
+ {
+ const unsigned int dim=DH::dimension;
+
+ Assert (dof.get_fe().n_components() == function.n_components,
+ ExcDimensionMismatch(dof.get_fe().n_components(),
+ function.n_components));
+
+ const hp::FECollection<DH::dimension,DH::space_dimension> fe (dof.get_fe());
+ const unsigned int n_components = fe.n_components();
+ const bool fe_is_system = (n_components != 1);
+
+ typename DH::active_cell_iterator cell = dof.begin_active(),
+ endc = dof.end();
+
+ // For FESystems many of the
+ // unit_support_points will appear
+ // multiple times, as a point may be
+ // unit_support_point for several of the
+ // components of the system. The following
+ // is rather complicated, but at least
+ // attempts to avoid evaluating the
+ // vectorfunction multiple times at the
+ // same point on a cell.
+ //
+ // note that we have to set up all of the
+ // following arrays for each of the
+ // elements in the FECollection (which
+ // means only once if this is for a regular
+ // DoFHandler)
+ std::vector<std::vector<Point<dim> > > unit_support_points (fe.size());
+ for (unsigned int fe_index=0; fe_index<fe.size(); ++fe_index)
+ {
+ unit_support_points[fe_index] = fe[fe_index].get_unit_support_points();
+ Assert (unit_support_points[fe_index].size() != 0,
+ ExcNonInterpolatingFE());
+ }
+
+
+ // Find the support points on a cell that
+ // are mentioned multiple times in
+ // unit_support_points. Mark the first
+ // representative of each support point
+ // mentioned multiple times by appending
+ // its dof index to dofs_of_rep_points.
+ // Each multiple point gets to know the dof
+ // index of its representative point by the
+ // dof_to_rep_dof_table.
+
+ // the following vector collects all dofs i,
+ // 0<=i<fe.dofs_per_cell, for that
+ // unit_support_points[i]
+ // is a representative one. i.e.
+ // the following vector collects all rep dofs.
+ // the position of a rep dof within this vector
+ // is called rep index.
+ std::vector<std::vector<unsigned int> > dofs_of_rep_points(fe.size());
+ // the following table converts a dof i
+ // to the rep index.
+ std::vector<std::vector<unsigned int> > dof_to_rep_index_table(fe.size());
+
+ std::vector<unsigned int> n_rep_points (fe.size(), 0);
+
+ for (unsigned int fe_index=0; fe_index<fe.size(); ++fe_index)
+ {
+ for (unsigned int i=0; i<fe[fe_index].dofs_per_cell; ++i)
+ {
+ bool representative=true;
+ // the following loop is looped
+ // the other way round to get
+ // the minimal effort of
+ // O(fe.dofs_per_cell) for multiple
+ // support points that are placed
+ // one after the other.
+ for (unsigned int j=dofs_of_rep_points[fe_index].size(); j>0; --j)
+ if (unit_support_points[fe_index][i]
+ == unit_support_points[fe_index][dofs_of_rep_points[fe_index][j-1]])
+ {
+ dof_to_rep_index_table[fe_index].push_back(j-1);
+ representative=false;
+ break;
+ }
+
+ if (representative)
+ {
+ // rep_index=dofs_of_rep_points.size()
+ dof_to_rep_index_table[fe_index].push_back(dofs_of_rep_points[fe_index].size());
+ // dofs_of_rep_points[rep_index]=i
+ dofs_of_rep_points[fe_index].push_back(i);
+ ++n_rep_points[fe_index];
+ }
+ }
+
+ Assert(dofs_of_rep_points[fe_index].size()==n_rep_points[fe_index],
+ ExcInternalError());
+ Assert(dof_to_rep_index_table[fe_index].size()==fe[fe_index].dofs_per_cell,
+ ExcInternalError());
+ }
+
+ const unsigned int max_rep_points = *std::max_element (n_rep_points.begin(),
+ n_rep_points.end());
+ std::vector<unsigned int> dofs_on_cell (fe.max_dofs_per_cell());
+ std::vector<Point<DH::space_dimension> > rep_points (max_rep_points);
+
+ // get space for the values of the
+ // function at the rep support points.
+ //
+ // have two versions, one for system fe
+ // and one for scalar ones, to take the
+ // more efficient one respectively
+ std::vector<std::vector<double> > function_values_scalar(fe.size());
+ std::vector<std::vector<Vector<double> > > function_values_system(fe.size());
+
+ // Make a quadrature rule from support points
+ // to feed it into FEValues
+ hp::QCollection<dim> support_quadrature;
+ for (unsigned int fe_index=0; fe_index<fe.size(); ++fe_index)
+ support_quadrature.push_back (Quadrature<dim>(unit_support_points[fe_index]));
+
+ // Transformed support points are computed by
+ // FEValues
+ hp::MappingCollection<dim,DH::space_dimension> mapping_collection (mapping);
+
+ hp::FEValues<dim, DH::space_dimension> fe_values (mapping_collection,
+ fe, support_quadrature, update_quadrature_points);
+
+ for (; cell!=endc; ++cell)
+ if (cell->is_locally_owned())
+ {
+ const unsigned int fe_index = cell->active_fe_index();
+
+ // for each cell:
+ // get location of finite element
+ // support_points
+ fe_values.reinit(cell);
+ const std::vector<Point<DH::space_dimension> >& support_points =
+ fe_values.get_present_fe_values().get_quadrature_points();
+
+ // pick out the representative
+ // support points
+ rep_points.resize (dofs_of_rep_points[fe_index].size());
+ for (unsigned int j=0; j<dofs_of_rep_points[fe_index].size(); ++j)
+ rep_points[j] = support_points[dofs_of_rep_points[fe_index][j]];
+
+ // get indices of the dofs on this cell
+ dofs_on_cell.resize (fe[fe_index].dofs_per_cell);
+ cell->get_dof_indices (dofs_on_cell);
+
+
+ if (fe_is_system)
+ {
+ // get function values at
+ // these points. Here: get
+ // all components
+ function_values_system[fe_index]
+ .resize (n_rep_points[fe_index],
+ Vector<double> (fe[fe_index].n_components()));
+ function.vector_value_list (rep_points,
+ function_values_system[fe_index]);
+ // distribute the function
+ // values to the global
+ // vector
+ for (unsigned int i=0; i<fe[fe_index].dofs_per_cell; ++i)
+ {
+ const unsigned int component
+ = fe[fe_index].system_to_component_index(i).first;
+ const unsigned int rep_dof=dof_to_rep_index_table[fe_index][i];
+ vec(dofs_on_cell[i])
+ = function_values_system[fe_index][rep_dof](component);
+ }
+ }
+ else
+ {
+ // get first component only,
+ // which is the only component
+ // in the function anyway
+ function_values_scalar[fe_index].resize (n_rep_points[fe_index]);
+ function.value_list (rep_points,
+ function_values_scalar[fe_index],
+ 0);
+ // distribute the function
+ // values to the global
+ // vector
+ for (unsigned int i=0; i<fe[fe_index].dofs_per_cell; ++i)
+ vec(dofs_on_cell[i])
+ = function_values_scalar[fe_index][dof_to_rep_index_table[fe_index][i]];
+ }
+ }
+ vec.compress(::dealii::VectorOperation::insert);
+ }
+
+
+ template <class VECTOR, class DH>
+ void interpolate (const DH &dof,
+ const Function<DH::space_dimension> &function,
+ VECTOR &vec)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ interpolate(StaticMappingQ1<DH::dimension, DH::space_dimension>::mapping,
+ dof, function, vec);
+ }
+
+
+
+
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void
+ interpolate (const DoFHandler<dim,spacedim> &dof_1,
+ const DoFHandler<dim,spacedim> &dof_2,
+ const FullMatrix<double> &transfer,
+ const InVector &data_1,
+ OutVector &data_2)
+ {
+ Vector<double> cell_data_1(dof_1.get_fe().dofs_per_cell);
+ Vector<double> cell_data_2(dof_2.get_fe().dofs_per_cell);
+
+ std::vector<short unsigned int> touch_count (dof_2.n_dofs(), 0);
+ std::vector<unsigned int> local_dof_indices (dof_2.get_fe().dofs_per_cell);
+
+ typename DoFHandler<dim,spacedim>::active_cell_iterator h = dof_1.begin_active();
+ typename DoFHandler<dim,spacedim>::active_cell_iterator l = dof_2.begin_active();
+ const typename DoFHandler<dim,spacedim>::cell_iterator endh = dof_1.end();
+
+ for(; h != endh; ++h, ++l)
+ {
+ h->get_dof_values(data_1, cell_data_1);
+ transfer.vmult(cell_data_2, cell_data_1);
+
+ l->get_dof_indices (local_dof_indices);
+
+ // distribute cell vector
+ for (unsigned int j=0; j<dof_2.get_fe().dofs_per_cell; ++j)
+ {
+ data_2(local_dof_indices[j]) += cell_data_2(j);
+
+ // count, how often we have
+ // added to this dof
+ Assert (touch_count[local_dof_indices[j]] < numbers::internal_face_boundary_id,
+ ExcInternalError());
+ ++touch_count[local_dof_indices[j]];
+ };
+ };
+
+ // compute the mean value of the
+ // sum which we have placed in each
+ // entry of the output vector
+ for (unsigned int i=0; i<dof_2.n_dofs(); ++i)
+ {
+ Assert (touch_count[i] != 0,
+ ExcInternalError());
+
+ data_2(i) /= touch_count[i];
+ };
+ }
+
+
+ namespace internal
+ {
+ void
+ interpolate_zero_boundary_values (const dealii::DoFHandler<1> &dof_handler,
+ std::map<unsigned int,double> &boundary_values)
+ {
+ // we only need to find the
+ // left-most and right-most
+ // vertex and query its vertex
+ // dof indices. that's easy :-)
+ for (unsigned int direction=0; direction<2; ++direction)
+ {
+ dealii::DoFHandler<1>::cell_iterator
+ cell = dof_handler.begin(0);
+ while (!cell->at_boundary(direction))
+ cell = cell->neighbor(direction);
+
+ for (unsigned int i=0; i<dof_handler.get_fe().dofs_per_vertex; ++i)
+ boundary_values[cell->vertex_dof_index (direction, i)] = 0.;
+ }
+ }
+
+
+
+ // codimension 1
+ void
+ interpolate_zero_boundary_values (const dealii::DoFHandler<1,2> &dof_handler,
+ std::map<unsigned int,double> &boundary_values)
+ {
+ // we only need to find the
+ // left-most and right-most
+ // vertex and query its vertex
+ // dof indices. that's easy :-)
+ for (unsigned int direction=0; direction<2; ++direction)
+ {
+ dealii::DoFHandler<1,2>::cell_iterator
+ cell = dof_handler.begin(0);
+ while (!cell->at_boundary(direction))
+ cell = cell->neighbor(direction);
+
+ for (unsigned int i=0; i<dof_handler.get_fe().dofs_per_vertex; ++i)
+ boundary_values[cell->vertex_dof_index (direction, i)] = 0.;
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ interpolate_zero_boundary_values (const dealii::DoFHandler<dim,spacedim> &dof_handler,
+ std::map<unsigned int,double> &boundary_values)
+ {
+ const FiniteElement<dim,spacedim> &fe = dof_handler.get_fe();
+
+ // loop over all boundary faces
+ // to get all dof indices of
+ // dofs on the boundary. note
+ // that in 3d there are cases
+ // where a face is not at the
+ // boundary, yet one of its
+ // lines is, and we should
+ // consider the degrees of
+ // freedom on it as boundary
+ // nodes. likewise, in 2d and
+ // 3d there are cases where a
+ // cell is only at the boundary
+ // by one vertex. nevertheless,
+ // since we do not support
+ // boundaries with dimension
+ // less or equal to dim-2, each
+ // such boundary dof is also
+ // found from some other face
+ // that is actually wholly on
+ // the boundary, not only by
+ // one line or one vertex
+ typename dealii::DoFHandler<dim,spacedim>::active_face_iterator
+ face = dof_handler.begin_active_face(),
+ endf = dof_handler.end_face();
+ std::vector<unsigned int> face_dof_indices (fe.dofs_per_face);
+ for (; face!=endf; ++face)
+ if (face->at_boundary())
+ {
+ face->get_dof_indices (face_dof_indices);
+ for (unsigned int i=0; i<fe.dofs_per_face; ++i)
+ // enter zero boundary values
+ // for all boundary nodes
+ //
+ // we need not care about
+ // vector valued elements here,
+ // since we set all components
+ boundary_values[face_dof_indices[i]] = 0.;
+ }
+ }
+ }
+
+
+
+ template <int dim, int spacedim,
+ template <int,int> class DH,
+ class Vector>
+ void
+ interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
+ const Vector &u1,
+ const DH<dim, spacedim> &dof2,
+ Vector &u2)
+ {
+ Assert(GridTools::have_same_coarse_mesh(dof1, dof2),
+ ExcMessage ("The two containers must represent triangulations that "
+ "have the same coarse meshes"));
+
+ InterGridMap<DH<dim, spacedim> > intergridmap;
+ intergridmap.make_mapping(dof1, dof2);
+
+ ConstraintMatrix dummy;
+ dummy.close();
+
+ interpolate_to_different_mesh(intergridmap, u1, dummy, u2);
+ }
+
+
+
+ template <int dim, int spacedim,
+ template <int,int> class DH,
+ class Vector>
+ void
+ interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
+ const Vector &u1,
+ const DH<dim, spacedim> &dof2,
+ const ConstraintMatrix &constraints,
+ Vector &u2)
+ {
+ Assert(GridTools::have_same_coarse_mesh(dof1, dof2),
+ ExcMessage ("The two containers must represent triangulations that "
+ "have the same coarse meshes"));
+
+ InterGridMap<DH<dim, spacedim> > intergridmap;
+ intergridmap.make_mapping(dof1, dof2);
+
+ interpolate_to_different_mesh(intergridmap, u1, constraints, u2);
+ }
+
+
+
+ template <int dim, int spacedim,
+ template <int,int> class DH,
+ class Vector>
+ void
+ interpolate_to_different_mesh (const InterGridMap<DH<dim, spacedim> > &intergridmap,
+ const Vector &u1,
+ const ConstraintMatrix &constraints,
+ Vector &u2)
+ {
+ const DH<dim, spacedim> &dof1 = intergridmap.get_source_grid();
+ const DH<dim, spacedim> &dof2 = intergridmap.get_destination_grid();
+
+ Assert(u1.size()==dof1.n_dofs(),
+ ExcDimensionMismatch(u1.size(), dof1.n_dofs()));
+ Assert(u2.size()==dof2.n_dofs(),
+ ExcDimensionMismatch(u2.size(),dof2.n_dofs()));
+
+ Vector cache;
+
+ // Looping over the finest common
+ // mesh, this means that source and
+ // destination cells have to be on the
+ // same level and at least one has to
+ // be active.
+ //
+ // Therefor, loop over all cells
+ // (active and inactive) of the source
+ // grid ..
+ typename DH<dim,spacedim>::cell_iterator cell1 = dof1.begin();
+ const typename DH<dim,spacedim>::cell_iterator endc1 = dof1.end();
+
+ for (; cell1 != endc1; ++cell1) {
+ const typename DH<dim,spacedim>::cell_iterator cell2 = intergridmap[cell1];
+
+ // .. and skip if source and destination
+ // cells are not on the same level ..
+ if (cell1->level() != cell2->level())
+ continue;
+ // .. or none of them is active.
+ if (!cell1->active() && !cell2->active())
+ continue;
+
+ Assert(cell1->get_fe().get_name() ==
+ cell2->get_fe().get_name(),
+ ExcMessage ("Source and destination cells need to use the same finite element"));
+
+ cache.reinit(cell1->get_fe().dofs_per_cell);
+
+ // Get and set the corresponding
+ // dof_values by interpolation.
+ cell1->get_interpolated_dof_values(u1, cache);
+ cell2->set_dof_values_by_interpolation(cache, u2);
+ }
+
+ // Apply hanging node constraints.
+ constraints.distribute(u2);
+ }
+
+
+
+ template <int dim, class VECTOR, int spacedim>
+ void project (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const ConstraintMatrix &constraints,
+ const Quadrature<dim> &quadrature,
+ const Function<spacedim> &function,
+ VECTOR &vec_result,
+ const bool enforce_zero_boundary,
+ const Quadrature<dim-1> &q_boundary,
+ const bool project_to_boundary_first)
+ {
+ Assert (dof.get_fe().n_components() == function.n_components,
+ ExcDimensionMismatch(dof.get_fe().n_components(),
+ function.n_components));
+
+ Assert (vec_result.size() == dof.n_dofs(),
+ ExcDimensionMismatch (vec_result.size(), dof.n_dofs()));
+
+ // make up boundary values
+ std::map<unsigned int,double> boundary_values;
+
+ if (enforce_zero_boundary == true)
+ // no need to project boundary
+ // values, but enforce
+ // homogeneous boundary values
+ // anyway
+ internal::
+ interpolate_zero_boundary_values (dof, boundary_values);
+
+ else
+ // no homogeneous boundary values
+ if (project_to_boundary_first == true)
+ // boundary projection required
+ {
+ // set up a list of boundary
+ // functions for the
+ // different boundary
+ // parts. We want the
+ // function to hold on
+ // all parts of the boundary
+ typename FunctionMap<spacedim>::type boundary_functions;
+ for (types::boundary_id c=0; c<numbers::internal_face_boundary_id; ++c)
+ boundary_functions[c] = &function;
+ project_boundary_values (dof, boundary_functions, q_boundary,
+ boundary_values);
+ }
+
+ // set up mass matrix and right hand side
+ Vector<double> vec (dof.n_dofs());
+ SparsityPattern sparsity;
+
+ // use csp to consume less memory and to
+ // still be fast
+ {
+ CompressedSimpleSparsityPattern csp (dof.n_dofs(), dof.n_dofs());
+ DoFTools::make_sparsity_pattern (dof, csp, constraints);
+
+ sparsity.copy_from (csp);
+ }
+
+ SparseMatrix<double> mass_matrix (sparsity);
+ Vector<double> tmp (mass_matrix.n());
+
+ // create mass matrix and rhs at once,
+ // which is faster.
+ MatrixCreator::create_mass_matrix (mapping, dof, quadrature, mass_matrix,
+ function, tmp);
+
+ constraints.condense (mass_matrix);
+ constraints.condense (tmp);
+ if (boundary_values.size() != 0)
+ MatrixTools::apply_boundary_values (boundary_values,
+ mass_matrix, vec, tmp,
+ true);
+ // Allow for a maximum of 5*n
+ // steps to reduce the residual by
+ // 10^-12. n steps may not be
+ // sufficient, since roundoff
+ // errors may accumulate for badly
+ // conditioned matrices
+ ReductionControl control(5*tmp.size(), 0., 1e-12, false, false);
+ GrowingVectorMemory<> memory;
+ SolverCG<> cg(control,memory);
+
+ PreconditionSSOR<> prec;
+ prec.initialize(mass_matrix, 1.2);
+ // solve
+ cg.solve (mass_matrix, vec, tmp, prec);
+
+ // distribute solution
+ constraints.distribute (vec);
+
+ // copy vec into vec_result. we
+ // can't use ve_result itself
+ // above, since it may be of
+ // another type than Vector<double>
+ // and that wouldn't necessarily go
+ // together with the matrix and
+ // other functions
+ for (unsigned int i=0; i<vec.size(); ++i)
+ vec_result(i) = vec(i);
+ }
+
+
+ template <int dim, class VECTOR, int spacedim>
+ void project (const DoFHandler<dim,spacedim> &dof,
+ const ConstraintMatrix &constraints,
+ const Quadrature<dim> &quadrature,
+ const Function<spacedim> &function,
+ VECTOR &vec,
+ const bool enforce_zero_boundary,
+ const Quadrature<dim-1> &q_boundary,
+ const bool project_to_boundary_first)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ project(StaticMappingQ1<dim,spacedim>::mapping, dof, constraints, quadrature, function, vec,
+ enforce_zero_boundary, q_boundary, project_to_boundary_first);
+ }
+
+
+
+
+ template <int dim, int spacedim>
+ void create_right_hand_side (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof_handler,
+ const Quadrature<dim> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector)
+ {
+ const FiniteElement<dim,spacedim> &fe = dof_handler.get_fe();
+ Assert (fe.n_components() == rhs_function.n_components,
+ ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+ rhs_vector = 0;
+
+ UpdateFlags update_flags = UpdateFlags(update_values |
+ update_quadrature_points |
+ update_JxW_values);
+ FEValues<dim,spacedim> fe_values (mapping, fe, quadrature, update_flags);
+
+ const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
+ n_q_points = fe_values.n_quadrature_points,
+ n_components = fe.n_components();
+
+ std::vector<unsigned int> dofs (dofs_per_cell);
+ Vector<double> cell_vector (dofs_per_cell);
+
+ typename DoFHandler<dim,spacedim>::active_cell_iterator
+ cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+
+ if (n_components==1)
+ {
+ std::vector<double> rhs_values(n_q_points);
+
+ for (; cell!=endc; ++cell)
+ {
+ fe_values.reinit(cell);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.value_list (fe_values.get_quadrature_points(),
+ rhs_values);
+
+ cell_vector = 0;
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_vector(i) += rhs_values[point] *
+ fe_values.shape_value(i,point) *
+ weights[point];
+
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+
+ }
+ else
+ {
+ std::vector<Vector<double> > rhs_values(n_q_points,
+ Vector<double>(n_components));
+
+ for (; cell!=endc; ++cell)
+ {
+ fe_values.reinit(cell);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.vector_value_list (fe_values.get_quadrature_points(),
+ rhs_values);
+
+ cell_vector = 0;
+ // Use the faster code if the
+ // FiniteElement is primitive
+ if (fe.is_primitive ())
+ {
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ {
+ const unsigned int component
+ = fe.system_to_component_index(i).first;
+
+ cell_vector(i) += rhs_values[point](component) *
+ fe_values.shape_value(i,point) *
+ weights[point];
+ }
+ }
+ else
+ {
+ // Otherwise do it the way
+ // proposed for vector valued
+ // elements
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
+ if (fe.get_nonzero_components(i)[comp_i])
+ {
+ cell_vector(i) += rhs_values[point](comp_i) *
+ fe_values.shape_value_component(i,point,comp_i) *
+ weights[point];
+ }
+ }
+
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void create_right_hand_side (const DoFHandler<dim,spacedim> &dof_handler,
+ const Quadrature<dim> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_right_hand_side(StaticMappingQ1<dim,spacedim>::mapping, dof_handler, quadrature,
+ rhs_function, rhs_vector);
+ }
+
+
+
+
+ template <int dim, int spacedim>
+ void create_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const hp::QCollection<dim> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector)
+ {
+ const hp::FECollection<dim,spacedim> &fe = dof_handler.get_fe();
+ Assert (fe.n_components() == rhs_function.n_components,
+ ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+ rhs_vector = 0;
+
+ UpdateFlags update_flags = UpdateFlags(update_values |
+ update_quadrature_points |
+ update_JxW_values);
+ hp::FEValues<dim,spacedim> x_fe_values (mapping, fe, quadrature, update_flags);
+
+ const unsigned int n_components = fe.n_components();
+
+ std::vector<unsigned int> dofs (fe.max_dofs_per_cell());
+ Vector<double> cell_vector (fe.max_dofs_per_cell());
+
+ typename hp::DoFHandler<dim,spacedim>::active_cell_iterator
+ cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+
+ if (n_components==1)
+ {
+ std::vector<double> rhs_values;
+
+ for (; cell!=endc; ++cell)
+ {
+ x_fe_values.reinit(cell);
+
+ const FEValues<dim,spacedim> &fe_values = x_fe_values.get_present_fe_values();
+
+ const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
+ n_q_points = fe_values.n_quadrature_points;
+ rhs_values.resize (n_q_points);
+ dofs.resize (dofs_per_cell);
+ cell_vector.reinit (dofs_per_cell);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.value_list (fe_values.get_quadrature_points(),
+ rhs_values);
+
+ cell_vector = 0;
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_vector(i) += rhs_values[point] *
+ fe_values.shape_value(i,point) *
+ weights[point];
+
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+
+ }
+ else
+ {
+ std::vector<Vector<double> > rhs_values;
+
+ for (; cell!=endc; ++cell)
+ {
+ x_fe_values.reinit(cell);
+
+ const FEValues<dim,spacedim> &fe_values = x_fe_values.get_present_fe_values();
+
+ const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
+ n_q_points = fe_values.n_quadrature_points;
+ rhs_values.resize (n_q_points,
+ Vector<double>(n_components));
+ dofs.resize (dofs_per_cell);
+ cell_vector.reinit (dofs_per_cell);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.vector_value_list (fe_values.get_quadrature_points(),
+ rhs_values);
+
+ cell_vector = 0;
+
+ // Use the faster code if the
+ // FiniteElement is primitive
+ if (cell->get_fe().is_primitive ())
+ {
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ {
+ const unsigned int component
+ = cell->get_fe().system_to_component_index(i).first;
+
+ cell_vector(i) += rhs_values[point](component) *
+ fe_values.shape_value(i,point) *
+ weights[point];
+ }
+ }
+ else
+ {
+ // Otherwise do it the way proposed
+ // for vector valued elements
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
+ if (cell->get_fe().get_nonzero_components(i)[comp_i])
+ {
+ cell_vector(i) += rhs_values[point](comp_i) *
+ fe_values.shape_value_component(i,point,comp_i) *
+ weights[point];
+ }
+ }
+
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void create_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const hp::QCollection<dim> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_right_hand_side(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
+ dof_handler, quadrature,
+ rhs_function, rhs_vector);
+ }
+
+
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector)
+ {
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+ Assert (dof_handler.get_fe().n_components() == 1,
+ ExcMessage ("This function only works for scalar finite elements"));
+
+ rhs_vector = 0;
+
+ std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point =
+ GridTools::find_active_cell_around_point (mapping, dof_handler, p);
+
+ Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+
+ FEValues<dim,spacedim> fe_values(mapping, dof_handler.get_fe(),
+ q, UpdateFlags(update_values));
+ fe_values.reinit(cell_point.first);
+
+ const unsigned int dofs_per_cell = dof_handler.get_fe().dofs_per_cell;
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+ cell_point.first->get_dof_indices (local_dof_indices);
+
+ for(unsigned int i=0; i<dofs_per_cell; i++)
+ rhs_vector(local_dof_indices[i]) = fe_values.shape_value(i,0);
+ }
+
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_point_source_vector(StaticMappingQ1<dim,spacedim>::mapping, dof_handler,
+ p, rhs_vector);
+ }
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector)
+ {
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+ Assert (dof_handler.get_fe().n_components() == 1,
+ ExcMessage ("This function only works for scalar finite elements"));
+
+ rhs_vector = 0;
+
+ std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point =
+ GridTools::find_active_cell_around_point (mapping, dof_handler, p);
+
+ Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+
+ FEValues<dim> fe_values(mapping[cell_point.first->active_fe_index()],
+ cell_point.first->get_fe(), q, UpdateFlags(update_values));
+ fe_values.reinit(cell_point.first);
+
+ const unsigned int dofs_per_cell = cell_point.first->get_fe().dofs_per_cell;
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+ cell_point.first->get_dof_indices (local_dof_indices);
+
+ for(unsigned int i=0; i<dofs_per_cell; i++)
+ rhs_vector(local_dof_indices[i]) = fe_values.shape_value(i,0);
+ }
+
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ Vector<double> &rhs_vector)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_point_source_vector(hp::StaticMappingQ1<dim>::mapping_collection,
+ dof_handler,
+ p, rhs_vector);
+ }
+
+
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector)
+ {
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+ Assert (dof_handler.get_fe().n_components() == dim,
+ ExcMessage ("This function only works for vector-valued finite elements."));
+
+ rhs_vector = 0;
+
+ std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point =
+ GridTools::find_active_cell_around_point (mapping, dof_handler, p);
+
+ Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+
+ const FEValuesExtractors::Vector vec (0);
+ FEValues<dim,spacedim> fe_values(mapping, dof_handler.get_fe(),
+ q, UpdateFlags(update_values));
+ fe_values.reinit(cell_point.first);
+
+ const unsigned int dofs_per_cell = dof_handler.get_fe().dofs_per_cell;
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+ cell_point.first->get_dof_indices (local_dof_indices);
+
+ for(unsigned int i=0; i<dofs_per_cell; i++)
+ rhs_vector(local_dof_indices[i]) = orientation * fe_values[vec].value(i,0);
+ }
+
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_point_source_vector(StaticMappingQ1<dim,spacedim>::mapping, dof_handler,
+ p, orientation, rhs_vector);
+ }
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector)
+ {
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+ Assert (dof_handler.get_fe().n_components() == dim,
+ ExcMessage ("This function only works for vector-valued finite elements."));
+
+ rhs_vector = 0;
+
+ std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point =
+ GridTools::find_active_cell_around_point (mapping, dof_handler, p);
+
+ Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+
+ const FEValuesExtractors::Vector vec (0);
+ FEValues<dim> fe_values(mapping[cell_point.first->active_fe_index()],
+ cell_point.first->get_fe(), q, UpdateFlags(update_values));
+ fe_values.reinit(cell_point.first);
+
+ const unsigned int dofs_per_cell = cell_point.first->get_fe().dofs_per_cell;
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+ cell_point.first->get_dof_indices (local_dof_indices);
+
+ for(unsigned int i=0; i<dofs_per_cell; i++)
+ rhs_vector(local_dof_indices[i]) = orientation * fe_values[vec].value(i,0);
+ }
+
+
+
+ template <int dim, int spacedim>
+ void create_point_source_vector (const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const Point<spacedim> &p,
+ const Point<dim> &orientation,
+ Vector<double> &rhs_vector)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_point_source_vector(hp::StaticMappingQ1<dim>::mapping_collection,
+ dof_handler,
+ p, orientation, rhs_vector);
+ }
+
+
+
+// separate implementation for 1D because otherwise we get linker errors since
+// FEFaceValues<1> is not compiled
+ template <>
+ void
+ create_boundary_right_hand_side (const Mapping<1,1> &,
+ const DoFHandler<1,1> &,
+ const Quadrature<0> &,
+ const Function<1> &,
+ Vector<double> &,
+ const std::set<types::boundary_id> &)
+ {
+ Assert (false, ExcImpossibleInDim(1));
+ }
+
+
+
+ template <>
+ void
+ create_boundary_right_hand_side (const Mapping<1,2> &,
+ const DoFHandler<1,2> &,
+ const Quadrature<0> &,
+ const Function<2> &,
+ Vector<double> &,
+ const std::set<types::boundary_id> &)
+ {
+ Assert (false, ExcImpossibleInDim(1));
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ create_boundary_right_hand_side (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof_handler,
+ const Quadrature<dim-1> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators)
+ {
+ const FiniteElement<dim> &fe = dof_handler.get_fe();
+ Assert (fe.n_components() == rhs_function.n_components,
+ ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+
+ rhs_vector = 0;
+
+ UpdateFlags update_flags = UpdateFlags(update_values |
+ update_quadrature_points |
+ update_JxW_values);
+ FEFaceValues<dim> fe_values (mapping, fe, quadrature, update_flags);
+
+ const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
+ n_q_points = fe_values.n_quadrature_points,
+ n_components = fe.n_components();
+
+ std::vector<unsigned int> dofs (dofs_per_cell);
+ Vector<double> cell_vector (dofs_per_cell);
+
+ typename DoFHandler<dim,spacedim>::active_cell_iterator cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+
+ if (n_components==1)
+ {
+ std::vector<double> rhs_values(n_q_points);
+
+ for (; cell!=endc; ++cell)
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face(face)->at_boundary () &&
+ (boundary_indicators.empty() ||
+ (boundary_indicators.find (cell->face(face)->boundary_indicator())
+ !=
+ boundary_indicators.end())))
+ {
+ fe_values.reinit(cell, face);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.value_list (fe_values.get_quadrature_points(), rhs_values);
+
+ cell_vector = 0;
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_vector(i) += rhs_values[point] *
+ fe_values.shape_value(i,point) *
+ weights[point];
+
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+ }
+ else
+ {
+ std::vector<Vector<double> > rhs_values(n_q_points, Vector<double>(n_components));
+
+ for (; cell!=endc; ++cell)
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face(face)->at_boundary () &&
+ (boundary_indicators.empty() ||
+ (boundary_indicators.find (cell->face(face)->boundary_indicator())
+ !=
+ boundary_indicators.end())))
+ {
+ fe_values.reinit(cell, face);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values);
+
+ cell_vector = 0;
+
+ // Use the faster code if the
+ // FiniteElement is primitive
+ if (fe.is_primitive ())
+ {
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ {
+ const unsigned int component
+ = fe.system_to_component_index(i).first;
+
+ cell_vector(i) += rhs_values[point](component) *
+ fe_values.shape_value(i,point) *
+ weights[point];
+ }
+ }
+ else
+ {
+ // And the full featured
+ // code, if vector valued
+ // FEs are used
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
+ if (fe.get_nonzero_components(i)[comp_i])
+ {
+ cell_vector(i)
+ += rhs_values[point](comp_i) *
+ fe_values.shape_value_component(i,point,comp_i) *
+ weights[point];
+ }
+ }
+
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ create_boundary_right_hand_side (const DoFHandler<dim,spacedim> &dof_handler,
+ const Quadrature<dim-1> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+
+ create_boundary_right_hand_side(StaticMappingQ1<dim>::mapping, dof_handler,
+ quadrature,
+ rhs_function, rhs_vector,
+ boundary_indicators);
+ }
+
+
+
+// separate implementation for 1D because otherwise we get linker errors since
+// hp::FEFaceValues<1> is not compiled
+ template <>
+ void
+ create_boundary_right_hand_side (const hp::MappingCollection<1,1> &,
+ const hp::DoFHandler<1,1> &,
+ const hp::QCollection<0> &,
+ const Function<1> &,
+ Vector<double> &,
+ const std::set<types::boundary_id> &)
+ {
+ Assert (false, ExcImpossibleInDim(1));
+ }
+
+
+
+ template <>
+ void
+ create_boundary_right_hand_side (const hp::MappingCollection<1,2> &,
+ const hp::DoFHandler<1,2> &,
+ const hp::QCollection<0> &,
+ const Function<2> &,
+ Vector<double> &,
+ const std::set<types::boundary_id> &)
+ {
+ Assert (false, ExcImpossibleInDim(1));
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ create_boundary_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const hp::QCollection<dim-1> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators)
+ {
+ const hp::FECollection<dim> &fe = dof_handler.get_fe();
+ Assert (fe.n_components() == rhs_function.n_components,
+ ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
+ Assert (rhs_vector.size() == dof_handler.n_dofs(),
+ ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
+
+ rhs_vector = 0;
+
+ UpdateFlags update_flags = UpdateFlags(update_values |
+ update_quadrature_points |
+ update_JxW_values);
+ hp::FEFaceValues<dim> x_fe_values (mapping, fe, quadrature, update_flags);
+
+ const unsigned int n_components = fe.n_components();
+
+ std::vector<unsigned int> dofs (fe.max_dofs_per_cell());
+ Vector<double> cell_vector (fe.max_dofs_per_cell());
+
+ typename hp::DoFHandler<dim,spacedim>::active_cell_iterator
+ cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+
+ if (n_components==1)
+ {
+ std::vector<double> rhs_values;
+
+ for (; cell!=endc; ++cell)
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face(face)->at_boundary () &&
+ (boundary_indicators.empty() ||
+ (boundary_indicators.find (cell->face(face)->boundary_indicator())
+ !=
+ boundary_indicators.end())))
+ {
+ x_fe_values.reinit(cell, face);
+
+ const FEFaceValues<dim> &fe_values = x_fe_values.get_present_fe_values();
+
+ const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
+ n_q_points = fe_values.n_quadrature_points;
+ rhs_values.resize (n_q_points);
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.value_list (fe_values.get_quadrature_points(), rhs_values);
+
+ cell_vector = 0;
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ cell_vector(i) += rhs_values[point] *
+ fe_values.shape_value(i,point) *
+ weights[point];
+
+ dofs.resize(dofs_per_cell);
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+ }
+ else
+ {
+ std::vector<Vector<double> > rhs_values;
+
+ for (; cell!=endc; ++cell)
+ for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face(face)->at_boundary () &&
+ (boundary_indicators.empty() ||
+ (boundary_indicators.find (cell->face(face)->boundary_indicator())
+ !=
+ boundary_indicators.end())))
+ {
+ x_fe_values.reinit(cell, face);
+
+ const FEFaceValues<dim> &fe_values = x_fe_values.get_present_fe_values();
+
+ const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
+ n_q_points = fe_values.n_quadrature_points;
+ rhs_values.resize (n_q_points, Vector<double>(n_components));
+
+ const std::vector<double> &weights = fe_values.get_JxW_values ();
+ rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values);
+
+ cell_vector = 0;
+
+ // Use the faster code if the
+ // FiniteElement is primitive
+ if (cell->get_fe().is_primitive ())
+ {
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ {
+ const unsigned int component
+ = cell->get_fe().system_to_component_index(i).first;
+
+ cell_vector(i) += rhs_values[point](component) *
+ fe_values.shape_value(i,point) *
+ weights[point];
+ }
+ }
+ else
+ {
+ // And the full featured
+ // code, if vector valued
+ // FEs are used
+ for (unsigned int point=0; point<n_q_points; ++point)
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
+ if (cell->get_fe().get_nonzero_components(i)[comp_i])
+ {
+ cell_vector(i)
+ += rhs_values[point](comp_i) *
+ fe_values.shape_value_component(i,point,comp_i) *
+ weights[point];
+ }
+ }
+ dofs.resize(dofs_per_cell);
+ cell->get_dof_indices (dofs);
+
+ for (unsigned int i=0; i<dofs_per_cell; ++i)
+ rhs_vector(dofs[i]) += cell_vector(i);
+ }
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ create_boundary_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof_handler,
+ const hp::QCollection<dim-1> &quadrature,
+ const Function<spacedim> &rhs_function,
+ Vector<double> &rhs_vector,
+ const std::set<types::boundary_id> &boundary_indicators)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ create_boundary_right_hand_side(hp::StaticMappingQ1<dim>::mapping_collection,
+ dof_handler, quadrature,
+ rhs_function, rhs_vector,
+ boundary_indicators);
+ }
+
+
+
+// ----------- interpolate_boundary_values for std::map --------------------
+
+ namespace internal
+ {
+ // interpolate boundary values in
+ // 1d. in higher dimensions, we
+ // use FEValues to figure out
+ // what to do on faces, but in 1d
+ // faces are points and it is far
+ // easier to simply work on
+ // individual vertices
+ template <class DH>
+ static inline
+ void interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &,
+ const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask_,
+ const dealii::internal::int2type<1>)
+ {
+ const unsigned int dim = DH::dimension;
+ const unsigned int spacedim=DH::space_dimension;
+
+ Assert ((component_mask_.size() == 0) ||
+ (component_mask_.size() == dof.get_fe().n_components()),
+ ExcMessage ("The number of components in the mask has to be either "
+ "zero or equal to the number of components in the finite "
+ "element."));
+
+ // if for whatever reason we were
+ // passed an empty map, return
+ // immediately
+ if (function_map.size() == 0)
+ return;
+
+ for (typename FunctionMap<spacedim>::type::const_iterator i=function_map.begin();
+ i!=function_map.end(); ++i)
+ Assert (i->first < 2,
+ ExcInvalidBoundaryIndicator());
+
+ for (typename DH::active_cell_iterator cell = dof.begin_active();
+ cell != dof.end(); ++cell)
+ for (unsigned int direction=0;
+ direction<GeometryInfo<dim>::faces_per_cell; ++direction)
+ if (cell->at_boundary(direction)
+ &&
+ (function_map.find(direction) != function_map.end()))
+ {
+ const Function<DH::space_dimension> & boundary_function
+ = *function_map.find(direction)->second;
+
+ // get the FE corresponding to this
+ // cell
+ const FiniteElement<dim,spacedim> &fe = cell->get_fe();
+ Assert (fe.n_components() == boundary_function.n_components,
+ ExcDimensionMismatch(fe.n_components(),
+ boundary_function.n_components));
+
+ // set the component mask to either
+ // the original value or a vector
+ // of trues
+ const std::vector<bool> component_mask ((component_mask_.size() == 0) ?
+ std::vector<bool> (fe.n_components(), true) :
+ component_mask_);
+ Assert (std::count(component_mask.begin(), component_mask.end(), true) > 0,
+ ExcNoComponentSelected());
+
+ // now set the value of
+ // the vertex degree of
+ // freedom. setting
+ // also creates the
+ // entry in the map if
+ // it did not exist
+ // beforehand
+ //
+ // save some time by
+ // requesting values
+ // only once for each
+ // point, irrespective
+ // of the number of
+ // components of the
+ // function
+ dealii::Vector<double> function_values (fe.n_components());
+ if (fe.n_components() == 1)
+ function_values(0)
+ = boundary_function.value (cell->vertex(direction));
+ else
+ boundary_function.vector_value (cell->vertex(direction),
+ function_values);
+
+ for (unsigned int i=0; i<fe.dofs_per_vertex; ++i)
+ if (component_mask[fe.face_system_to_component_index(i).first])
+ boundary_values[cell->
+ vertex_dof_index(direction,i,
+ cell->active_fe_index())]
+ = function_values(fe.face_system_to_component_index(i).first);
+ }
+ }
+
+
+
+ template <class DH>
+ static inline
+ void
+ interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &mapping,
+ const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask_,
+ const dealii::internal::int2type<DH::dimension>)
+ {
+ const unsigned int dim = DH::dimension;
+ const unsigned int spacedim=DH::space_dimension;
+
+ Assert ((component_mask_.size() == 0) ||
+ (component_mask_.size() == dof.get_fe().n_components()),
+ ExcMessage ("The number of components in the mask has to be either "
+ "zero or equal to the number of components in the finite "
+ "element."));
+
+
+ // if for whatever reason we were
+ // passed an empty map, return
+ // immediately
+ if (function_map.size() == 0)
+ return;
+
+ Assert (function_map.find(numbers::internal_face_boundary_id) == function_map.end(),
+ ExcInvalidBoundaryIndicator());
+
+ const unsigned int n_components = DoFTools::n_components(dof);
+ const bool fe_is_system = (n_components != 1);
+
+ for (typename FunctionMap<spacedim>::type::const_iterator i=function_map.begin();
+ i!=function_map.end(); ++i)
+ Assert (n_components == i->second->n_components,
+ ExcDimensionMismatch(n_components, i->second->n_components));
+
+ // set the component mask to either
+ // the original value or a vector
+ // of trues
+ const std::vector<bool> component_mask ((component_mask_.size() == 0) ?
+ std::vector<bool> (n_components, true) :
+ component_mask_);
+ Assert (std::count(component_mask.begin(), component_mask.end(), true) > 0,
+ ExcNoComponentSelected());
+
+ // field to store the indices
+ std::vector<unsigned int> face_dofs;
+ face_dofs.reserve (DoFTools::max_dofs_per_face(dof));
+
+ std::vector<Point<spacedim> > dof_locations;
+ dof_locations.reserve (DoFTools::max_dofs_per_face(dof));
+
+ // array to store the values of
+ // the boundary function at the
+ // boundary points. have two arrays
+ // for scalar and vector functions
+ // to use the more efficient one
+ // respectively
+ std::vector<double> dof_values_scalar;
+ std::vector<dealii::Vector<double> > dof_values_system;
+ dof_values_scalar.reserve (DoFTools::max_dofs_per_face (dof));
+ dof_values_system.reserve (DoFTools::max_dofs_per_face (dof));
+
+ // before we start with the loop
+ // over all cells create an
+ // hp::FEValues object that holds
+ // the interpolation points of all
+ // finite elements that may ever be
+ // in use
+ dealii::hp::FECollection<dim,spacedim> finite_elements (dof.get_fe());
+ dealii::hp::QCollection<dim-1> q_collection;
+ for (unsigned int f=0; f<finite_elements.size(); ++f)
+ {
+ const FiniteElement<dim,spacedim> &fe = finite_elements[f];
+
+ // generate a quadrature rule
+ // on the face from the unit
+ // support points. this will be
+ // used to obtain the
+ // quadrature points on the
+ // real cell's face
+ //
+ // to do this, we check whether
+ // the FE has support points on
+ // the face at all:
+ if (fe.has_face_support_points())
+ q_collection.push_back (Quadrature<dim-1>(fe.get_unit_face_support_points()));
+ else
+ {
+ // if not, then we should
+ // try a more clever
+ // way. the idea is that a
+ // finite element may not
+ // offer support points for
+ // all its shape functions,
+ // but maybe only some. if
+ // it offers support points
+ // for the components we
+ // are interested in in
+ // this function, then
+ // that's fine. if not, the
+ // function we call in the
+ // finite element will
+ // raise an exception. the
+ // support points for the
+ // other shape functions
+ // are left uninitialized
+ // (well, initialized by
+ // the default
+ // constructor), since we
+ // don't need them anyway.
+ //
+ // As a detour, we must
+ // make sure we only query
+ // face_system_to_component_index
+ // if the index corresponds
+ // to a primitive shape
+ // function. since we know
+ // that all the components
+ // we are interested in are
+ // primitive (by the above
+ // check), we can safely
+ // put such a check in
+ // front
+ std::vector<Point<dim-1> > unit_support_points (fe.dofs_per_face);
+
+ for (unsigned int i=0; i<fe.dofs_per_face; ++i)
+ if (fe.is_primitive (fe.face_to_equivalent_cell_index(i)))
+ if (component_mask[fe.face_system_to_component_index(i).first]
+ == true)
+ unit_support_points[i] = fe.unit_face_support_point(i);
+
+ q_collection.push_back (Quadrature<dim-1>(unit_support_points));
+ }
+ }
+ // now that we have a q_collection
+ // object with all the right
+ // quadrature points, create an
+ // hp::FEFaceValues object that we
+ // can use to evaluate the boundary
+ // values at
+ dealii::hp::MappingCollection<dim,spacedim> mapping_collection (mapping);
+ dealii::hp::FEFaceValues<dim,spacedim> x_fe_values (mapping_collection, finite_elements, q_collection,
+ update_quadrature_points);
+
+ typename DH::active_cell_iterator cell = dof.begin_active(),
+ endc = dof.end();
+ for (; cell!=endc; ++cell)
+ if (!cell->is_artificial())
+ for (unsigned int face_no = 0; face_no < GeometryInfo<dim>::faces_per_cell;
+ ++face_no)
+ {
+ const FiniteElement<dim,spacedim> &fe = cell->get_fe();
+
+ // we can presently deal only with
+ // primitive elements for boundary
+ // values. this does not preclude
+ // us using non-primitive elements
+ // in components that we aren't
+ // interested in, however. make
+ // sure that all shape functions
+ // that are non-zero for the
+ // components we are interested in,
+ // are in fact primitive
+ for (unsigned int i=0; i<cell->get_fe().dofs_per_cell; ++i)
+ {
+ const std::vector<bool> &nonzero_component_array
+ = cell->get_fe().get_nonzero_components (i);
+ for (unsigned int c=0; c<n_components; ++c)
+ if ((nonzero_component_array[c] == true)
+ &&
+ (component_mask[c] == true))
+ Assert (cell->get_fe().is_primitive (i),
+ ExcMessage ("This function can only deal with requested boundary "
+ "values that correspond to primitive (scalar) base "
+ "elements"));
+ }
+
+ const typename DH::face_iterator face = cell->face(face_no);
+ const types::boundary_id boundary_component = face->boundary_indicator();
+
+ // see if this face is
+ // part of the
+ // boundaries for which
+ // we are supposed to
+ // do something, and
+ // also see if the
+ // finite element in
+ // use here has DoFs on
+ // the face at all
+ if ((function_map.find(boundary_component) != function_map.end())
+ &&
+ (cell->get_fe().dofs_per_face > 0))
+ {
+ // face is of the right component
+ x_fe_values.reinit(cell, face_no);
+ const dealii::FEFaceValues<dim,spacedim> &fe_values =
+ x_fe_values.get_present_fe_values();
+
+ // get indices, physical location and
+ // boundary values of dofs on this
+ // face
+ face_dofs.resize (fe.dofs_per_face);
+ face->get_dof_indices (face_dofs, cell->active_fe_index());
+ const std::vector<Point<spacedim> > &dof_locations
+ = fe_values.get_quadrature_points ();
+
+ if (fe_is_system)
+ {
+ // resize
+ // array. avoid
+ // construction of a
+ // memory allocating
+ // temporary if
+ // possible
+ if (dof_values_system.size() < fe.dofs_per_face)
+ dof_values_system.resize (fe.dofs_per_face,
+ dealii::Vector<double>(fe.n_components()));
+ else
+ dof_values_system.resize (fe.dofs_per_face);
+
+ function_map.find(boundary_component)->second
+ ->vector_value_list (dof_locations, dof_values_system);
+
+ // enter those dofs
+ // into the list that
+ // match the
+ // component
+ // signature. avoid
+ // the usual
+ // complication that
+ // we can't just use
+ // *_system_to_component_index
+ // for non-primitive
+ // FEs
+ for (unsigned int i=0; i<face_dofs.size(); ++i)
+ {
+ unsigned int component;
+ if (fe.is_primitive())
+ component = fe.face_system_to_component_index(i).first;
+ else
+ {
+ // non-primitive
+ // case. make
+ // sure that
+ // this
+ // particular
+ // shape
+ // function
+ // _is_
+ // primitive,
+ // and get at
+ // it's
+ // component. use
+ // usual
+ // trick to
+ // transfer
+ // face dof
+ // index to
+ // cell dof
+ // index
+ const unsigned int cell_i
+ = (dim == 1 ?
+ i
+ :
+ (dim == 2 ?
+ (i<2*fe.dofs_per_vertex ? i : i+2*fe.dofs_per_vertex)
+ :
+ (dim == 3 ?
+ (i<4*fe.dofs_per_vertex ?
+ i
+ :
+ (i<4*fe.dofs_per_vertex+4*fe.dofs_per_line ?
+ i+4*fe.dofs_per_vertex
+ :
+ i+4*fe.dofs_per_vertex+8*fe.dofs_per_line))
+ :
+ numbers::invalid_unsigned_int)));
+ Assert (cell_i < fe.dofs_per_cell, ExcInternalError());
+
+ // make sure
+ // that if
+ // this is
+ // not a
+ // primitive
+ // shape function,
+ // then all
+ // the
+ // corresponding
+ // components
+ // in the
+ // mask are
+ // not set
+ if (!fe.is_primitive(cell_i))
+ for (unsigned int c=0; c<n_components; ++c)
+ if (fe.get_nonzero_components(cell_i)[c])
+ Assert (component_mask[c] == false,
+ FETools::ExcFENotPrimitive());
+
+ // let's pick
+ // the first
+ // of
+ // possibly
+ // more than
+ // one
+ // non-zero
+ // components. if
+ // shape
+ // function
+ // is
+ // non-primitive,
+ // then we
+ // will
+ // ignore the
+ // result in
+ // the
+ // following
+ // anyway,
+ // otherwise
+ // there's
+ // only one
+ // non-zero
+ // component
+ // which we
+ // will use
+ component = (std::find (fe.get_nonzero_components(cell_i).begin(),
+ fe.get_nonzero_components(cell_i).end(),
+ true)
+ -
+ fe.get_nonzero_components(cell_i).begin());
+ }
+
+ if (component_mask[component] == true)
+ boundary_values[face_dofs[i]] = dof_values_system[i](component);
+ }
+ }
+ else
+ // fe has only one component,
+ // so save some computations
+ {
+ // get only the one component that
+ // this function has
+ dof_values_scalar.resize (fe.dofs_per_face);
+ function_map.find(boundary_component)->second
+ ->value_list (dof_locations, dof_values_scalar, 0);
+
+ // enter into list
+
+ for (unsigned int i=0; i<face_dofs.size(); ++i)
+ boundary_values[face_dofs[i]] = dof_values_scalar[i];
+ }
+ }
+ }
+ } // end of interpolate_boundary_values
+ } // end of namespace internal
+
+
+
+ template <class DH>
+ void
+
+ interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &mapping,
+ const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask_)
+ {
+ internal::
+ interpolate_boundary_values (mapping, dof, function_map, boundary_values,
+ component_mask_,
+ dealii::internal::int2type<DH::dimension>());
+ }
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &mapping,
+ const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask)
+ {
+ typename FunctionMap<DH::space_dimension>::type function_map;
+ function_map[boundary_component] = &boundary_function;
+ interpolate_boundary_values (mapping, dof, function_map, boundary_values,
+ component_mask);
+ }
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values (const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
+ dof, boundary_component,
+ boundary_function, boundary_values, component_mask);
+ }
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values (const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ std::map<unsigned int,double> &boundary_values,
+ const std::vector<bool> &component_mask)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
+ dof, function_map,
+ boundary_values, component_mask);
+ }
+
+
+
+
+// ----------- interpolate_boundary_values for ConstraintMatrix --------------
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values
+ (const Mapping<DH::dimension, DH::space_dimension> &mapping,
+ const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask_)
+ {
+ std::map<unsigned int,double> boundary_values;
+ interpolate_boundary_values (mapping, dof, function_map,
+ boundary_values, component_mask_);
+ std::map<unsigned int,double>::const_iterator boundary_value =
+ boundary_values.begin();
+ for ( ; boundary_value !=boundary_values.end(); ++boundary_value)
+ {
+ if (constraints.can_store_line (boundary_value->first)
+ &&
+ !constraints.is_constrained(boundary_value->first))
+ {
+ constraints.add_line (boundary_value->first);
+ constraints.set_inhomogeneity (boundary_value->first,
+ boundary_value->second);
+ }
+ }
+ }
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values
+ (const Mapping<DH::dimension, DH::space_dimension> &mapping,
+ const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask)
+ {
+ typename FunctionMap<DH::space_dimension>::type function_map;
+ function_map[boundary_component] = &boundary_function;
+ interpolate_boundary_values (mapping, dof, function_map, constraints,
+ component_mask);
+ }
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values
+ (const DH &dof,
+ const types::boundary_id boundary_component,
+ const Function<DH::space_dimension> &boundary_function,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
+ dof, boundary_component,
+ boundary_function, constraints, component_mask);
+ }
+
+
+
+ template <class DH>
+ void
+ interpolate_boundary_values
+ (const DH &dof,
+ const typename FunctionMap<DH::space_dimension>::type &function_map,
+ ConstraintMatrix &constraints,
+ const std::vector<bool> &component_mask)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
+ dof, function_map,
+ constraints, component_mask);
+ }
+
+
+
+
+// -------- implementation for project_boundary_values with std::map --------
+
+// separate implementations for 1D because otherwise we get linking errors
+// because create_boundary_mass_matrix is not compiled for 1D
+ template <>
+ void
+ project_boundary_values (const Mapping<1,1> &mapping,
+ const DoFHandler<1,1> &dof,
+ const FunctionMap<1>::type &boundary_functions,
+ const Quadrature<0> &,
+ std::map<unsigned int,double> &boundary_values,
+ std::vector<unsigned int> component_mapping)
+ {
+ Assert (component_mapping.size() == 0, ExcNotImplemented());
+ // projection in 1d is equivalent
+ // to interpolation
+ interpolate_boundary_values (mapping, dof, boundary_functions,
+ boundary_values, std::vector<bool>());
+ }
+
+
+
+ template <>
+ void
+ project_boundary_values (const Mapping<1,2> &mapping,
+ const DoFHandler<1,2> &dof,
+ const FunctionMap<2>::type &boundary_functions,
+ const Quadrature<0> &,
+ std::map<unsigned int,double> &boundary_values,
+ std::vector<unsigned int> component_mapping)
+ {
+ Assert (component_mapping.size() == 0, ExcNotImplemented());
+ // projection in 1d is equivalent
+ // to interpolation
+ interpolate_boundary_values (mapping, dof, boundary_functions,
+ boundary_values, std::vector<bool>());
+ }
+
+
+
+
+ template <int dim, int spacedim>
+ void
+ project_boundary_values (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim, spacedim>&dof,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ const Quadrature<dim-1> &q,
+ std::map<unsigned int,double> &boundary_values,
+ std::vector<unsigned int> component_mapping)
+ {
+//TODO:[?] In project_boundary_values, no condensation of sparsity
+// structures, matrices and right hand sides or distribution of
+// solution vectors is performed. This is ok for dim<3 because then
+// there are no constrained nodes on the boundary, but is not
+// acceptable for higher dimensions. Fix this.
+
+ if (component_mapping.size() == 0)
+ {
+ AssertDimension (dof.get_fe().n_components(), boundary_functions.begin()->second->n_components);
+ // I still do not see why i
+ // should create another copy
+ // here
+ component_mapping.resize(dof.get_fe().n_components());
+ for (unsigned int i= 0 ;i < component_mapping.size() ; ++i)
+ component_mapping[i] = i;
+ }
+ else
+ AssertDimension (dof.get_fe().n_components(), component_mapping.size());
+
+ std::vector<unsigned int> dof_to_boundary_mapping;
+ std::set<types::boundary_id> selected_boundary_components;
+ for (typename FunctionMap<spacedim>::type::const_iterator i=boundary_functions.begin();
+ i!=boundary_functions.end(); ++i)
+ selected_boundary_components.insert (i->first);
+
+ DoFTools::map_dof_to_boundary_indices (dof, selected_boundary_components,
+ dof_to_boundary_mapping);
+
+ // Done if no degrees of freedom on
+ // the boundary
+ if (dof.n_boundary_dofs (boundary_functions) == 0)
+ return;
+ // set up sparsity structure
+ SparsityPattern sparsity(dof.n_boundary_dofs (boundary_functions),
+ dof.max_couplings_between_boundary_dofs());
+ DoFTools::make_boundary_sparsity_pattern (dof,
+ boundary_functions,
+ dof_to_boundary_mapping,
+ sparsity);
+
+ // note: for three or more dimensions, there
+ // may be constrained nodes on the boundary
+ // in this case the boundary mass matrix has
+ // to be condensed and the solution is to
+ // be distributed afterwards, which is not
+ // yet implemented. The reason for this is
+ // that we cannot simply use the condense
+ // family of functions, since the matrices
+ // and vectors do not use the global
+ // numbering but rather the boundary
+ // numbering, i.e. the condense function
+ // needs to use another indirection. There
+ // should be not many technical problems,
+ // but it needs to be implemented
+ if (dim>=3)
+ {
+#ifdef DEBUG
+// Assert that there are no hanging nodes at the boundary
+ int level = -1;
+ for (typename DoFHandler<dim,spacedim>::active_cell_iterator cell = dof.begin_active();
+ cell != dof.end(); ++cell)
+ for (unsigned int f=0;f<GeometryInfo<dim>::faces_per_cell;++f)
+ {
+ if (cell->at_boundary(f))
+ {
+ if (level == -1)
+ level = cell->level();
+ else
+ {
+ Assert (level == cell->level(), ExcNotImplemented());
+ }
+ }
+ }
+#endif
+ }
+ sparsity.compress();
+
+
+ // make mass matrix and right hand side
+ SparseMatrix<double> mass_matrix(sparsity);
+ Vector<double> rhs(sparsity.n_rows());
+
+
+ MatrixCreator::create_boundary_mass_matrix (mapping, dof, q,
+ mass_matrix, boundary_functions,
+ rhs, dof_to_boundary_mapping, (const Function<spacedim>*) 0,
+ component_mapping);
+
+ // For certain weird elements,
+ // there might be degrees of
+ // freedom on the boundary, but
+ // their shape functions do not
+ // have support there. Let's
+ // eliminate them here.
+
+ // The Bogner-Fox-Schmidt element
+ // is an example for those.
+
+//TODO: Maybe we should figure out if the element really needs this
+
+ FilteredMatrix<Vector<double> > filtered_mass_matrix(mass_matrix, true);
+ FilteredMatrix<Vector<double> > filtered_precondition;
+ std::vector<bool> excluded_dofs(mass_matrix.m(), false);
+
+ double max_element = 0.;
+ for (unsigned int i=0;i<mass_matrix.m();++i)
+ if (mass_matrix.diag_element(i) > max_element)
+ max_element = mass_matrix.diag_element(i);
+
+ for (unsigned int i=0;i<mass_matrix.m();++i)
+ if (mass_matrix.diag_element(i) < 1.e-8 * max_element)
+ {
+ filtered_mass_matrix.add_constraint(i, 0.);
+ filtered_precondition.add_constraint(i, 0.);
+ mass_matrix.diag_element(i) = 1.;
+ excluded_dofs[i] = true;
+ }
+
+ Vector<double> boundary_projection (rhs.size());
+
+ // Allow for a maximum of 5*n
+ // steps to reduce the residual by
+ // 10^-12. n steps may not be
+ // sufficient, since roundoff
+ // errors may accumulate for badly
+ // conditioned matrices
+ ReductionControl control(5*rhs.size(), 0., 1.e-12, false, false);
+ GrowingVectorMemory<> memory;
+ SolverCG<> cg(control,memory);
+
+ PreconditionSSOR<> prec;
+ prec.initialize(mass_matrix, 1.2);
+ filtered_precondition.initialize(prec, true);
+ // solve
+ cg.solve (filtered_mass_matrix, boundary_projection, rhs, filtered_precondition);
+ filtered_precondition.apply_constraints(boundary_projection, true);
+ filtered_precondition.clear();
+ // fill in boundary values
+ for (unsigned int i=0; i<dof_to_boundary_mapping.size(); ++i)
+ if (dof_to_boundary_mapping[i] != DoFHandler<dim,spacedim>::invalid_dof_index
+ && ! excluded_dofs[dof_to_boundary_mapping[i]])
+ {
+ Assert(numbers::is_finite(boundary_projection(dof_to_boundary_mapping[i])), ExcNumberNotFinite());
+
+ // this dof is on one of the
+ // interesting boundary parts
+ //
+ // remember: i is the global dof
+ // number, dof_to_boundary_mapping[i]
+ // is the number on the boundary and
+ // thus in the solution vector
+ boundary_values[i] = boundary_projection(dof_to_boundary_mapping[i]);
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ project_boundary_values (const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ const Quadrature<dim-1> &q,
+ std::map<unsigned int,double> &boundary_values,
+ std::vector<unsigned int> component_mapping)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ project_boundary_values(StaticMappingQ1<dim,spacedim>::mapping, dof, boundary_functions, q,
+ boundary_values, component_mapping);
+ }
+
+
+
+// ----- implementation for project_boundary_values with ConstraintMatrix -----
+
+
+
+ template <int dim, int spacedim>
+ void
+ project_boundary_values (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ const Quadrature<dim-1> &q,
+ ConstraintMatrix &constraints,
+ std::vector<unsigned int> component_mapping)
+ {
+ std::map<unsigned int,double> boundary_values;
+ project_boundary_values (mapping, dof, boundary_functions, q,
+ boundary_values, component_mapping);
+ std::map<unsigned int,double>::const_iterator boundary_value =
+ boundary_values.begin();
+ for ( ; boundary_value !=boundary_values.end(); ++boundary_value)
+ {
+ if (!constraints.is_constrained(boundary_value->first))
+ {
+ constraints.add_line (boundary_value->first);
+ constraints.set_inhomogeneity (boundary_value->first,
+ boundary_value->second);
+ }
+ }
+ }
+
+
+
+ template <int dim, int spacedim>
+ void
+ project_boundary_values (const DoFHandler<dim,spacedim> &dof,
+ const typename FunctionMap<spacedim>::type &boundary_functions,
+ const Quadrature<dim-1> &q,
+ ConstraintMatrix &constraints,
+ std::vector<unsigned int> component_mapping)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ project_boundary_values(StaticMappingQ1<dim,spacedim>::mapping, dof, boundary_functions, q,
+ constraints, component_mapping);
+ }
+
+
+
+
+ namespace internal
+ {
+ /**
+ * A structure that stores the dim DoF
+ * indices that correspond to a
+ * vector-valued quantity at a single
+ * support point.
+ */
+ template <int dim>
+ struct VectorDoFTuple
+ {
+ unsigned int dof_indices[dim];
+
+ VectorDoFTuple ()
+ {
+ for (unsigned int i=0; i<dim; ++i)
+ dof_indices[i] = numbers::invalid_unsigned_int;
+ }
+
+
+ bool operator < (const VectorDoFTuple<dim> &other) const
+ {
+ for (unsigned int i=0; i<dim; ++i)
+ if (dof_indices[i] < other.dof_indices[i])
+ return true;
+ else
+ if (dof_indices[i] > other.dof_indices[i])
+ return false;
+ return false;
+ }
+
+ bool operator == (const VectorDoFTuple<dim> &other) const
+ {
+ for (unsigned int i=0; i<dim; ++i)
+ if (dof_indices[i] != other.dof_indices[i])
+ return false;
+
+ return true;
+ }
+
+ bool operator != (const VectorDoFTuple<dim> &other) const
+ {
+ return ! (*this == other);
+ }
+ };
+
+
+
+ /**
+ * Add the constraint
+ * $\vec n \cdot \vec u = 0$
+ * to the list of constraints.
+ *
+ * Here, $\vec u$ is represented
+ * by the set of given DoF
+ * indices, and $\vec n$ by the
+ * vector specified as the second
+ * argument.
+ *
+ * The function does not add constraints
+ * if a degree of freedom is already
+ * constrained in the constraints object.
+ */
+ template <int dim>
+ void
+ add_constraint (const VectorDoFTuple<dim> &dof_indices,
+ const Tensor<1,dim> &constraining_vector,
+ ConstraintMatrix &constraints)
+ {
+
+ // choose the DoF that has the
+ // largest component in the
+ // constraining_vector as the
+ // one to be constrained as
+ // this makes the process
+ // stable in cases where the
+ // constraining_vector has the
+ // form n=(1,0) or n=(0,1)
+ //
+ // we get constraints of the form
+ // x0 = a_1*x1 + a2*x2 + ...
+ // if one of the weights is
+ // essentially zero then skip
+ // this part. the ConstraintMatrix
+ // can also deal with cases like
+ // x0 = 0
+ // if necessary
+ //
+ // there is a problem if we have a
+ // normal vector of the form
+ // (a,a,small) or (a,a,a). Depending on
+ // round-off we may choose the first or
+ // second component (or third, in the
+ // latter case) as the largest one, and
+ // depending on our choice one or
+ // another degree of freedom will be
+ // constrained. On a single processor
+ // this is not much of a problem, but
+ // it's a nightmare when we run in
+ // parallel and two processors disagree
+ // on which DoF should be
+ // constrained. This led to an
+ // incredibly difficult to find bug in
+ // step-32 when running in parallel
+ // with 9 or more processors.
+ //
+ // in practice, such normal vectors of
+ // the form (a,a,small) or (a,a,a)
+ // happen not infrequently since they
+ // lie on the diagonals where vertices
+ // frequently happen to land upon mesh
+ // refinement if one starts from a
+ // symmetric and regular body. we work
+ // around this problem in the following
+ // way: if we have a normal vector of
+ // the form (a,b) (similarly algorithm
+ // in 3d), we choose 'a' as the largest
+ // coefficient not if a>b but if
+ // a>b+1e-10. this shifts the problem
+ // away from the frequently visited
+ // diagonal to a line that is off the
+ // diagonal. there will of course be
+ // problems where the exact values of a
+ // and b differ by exactly 1e-10 and we
+ // get into the same instability, but
+ // from a practical viewpoint such
+ // problems should be much rarer. in
+ // particular, meshes have to be very
+ // very fine for a vertex to land on
+ // this line if the original body had a
+ // vertex on the diagonal as well
+ switch (dim)
+ {
+ case 2:
+ {
+ if (std::fabs(constraining_vector[0]) > std::fabs(constraining_vector[1]) + 1e-10)
+ {
+ if (!constraints.is_constrained(dof_indices.dof_indices[0])
+ &&
+ constraints.can_store_line(dof_indices.dof_indices[0]))
+ {
+ constraints.add_line (dof_indices.dof_indices[0]);
+
+ if (std::fabs (constraining_vector[1]/constraining_vector[0])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[0],
+ dof_indices.dof_indices[1],
+ -constraining_vector[1]/constraining_vector[0]);
+ }
+ }
+ else
+ {
+ if (!constraints.is_constrained(dof_indices.dof_indices[1])
+ &&
+ constraints.can_store_line(dof_indices.dof_indices[1]))
+ {
+ constraints.add_line (dof_indices.dof_indices[1]);
+
+ if (std::fabs (constraining_vector[0]/constraining_vector[1])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[1],
+ dof_indices.dof_indices[0],
+ -constraining_vector[0]/constraining_vector[1]);
+ }
+ }
+ break;
+ }
+
+ case 3:
+ {
+ if ((std::fabs(constraining_vector[0]) >= std::fabs(constraining_vector[1])+1e-10)
+ &&
+ (std::fabs(constraining_vector[0]) >= std::fabs(constraining_vector[2])+2e-10))
+ {
+ if (!constraints.is_constrained(dof_indices.dof_indices[0])
+ &&
+ constraints.can_store_line(dof_indices.dof_indices[0]))
+ {
+ constraints.add_line (dof_indices.dof_indices[0]);
+
+ if (std::fabs (constraining_vector[1]/constraining_vector[0])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[0],
+ dof_indices.dof_indices[1],
+ -constraining_vector[1]/constraining_vector[0]);
+
+ if (std::fabs (constraining_vector[2]/constraining_vector[0])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[0],
+ dof_indices.dof_indices[2],
+ -constraining_vector[2]/constraining_vector[0]);
+ }
+ }
+ else
+ if ((std::fabs(constraining_vector[1])+1e-10 >= std::fabs(constraining_vector[0]))
+ &&
+ (std::fabs(constraining_vector[1]) >= std::fabs(constraining_vector[2])+1e-10))
+ {
+ if (!constraints.is_constrained(dof_indices.dof_indices[1])
+ &&
+ constraints.can_store_line(dof_indices.dof_indices[1]))
+ {
+ constraints.add_line (dof_indices.dof_indices[1]);
+
+ if (std::fabs (constraining_vector[0]/constraining_vector[1])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[1],
+ dof_indices.dof_indices[0],
+ -constraining_vector[0]/constraining_vector[1]);
+
+ if (std::fabs (constraining_vector[2]/constraining_vector[1])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[1],
+ dof_indices.dof_indices[2],
+ -constraining_vector[2]/constraining_vector[1]);
+ }
+ }
+ else
+ {
+ if (!constraints.is_constrained(dof_indices.dof_indices[2])
+ &&
+ constraints.can_store_line(dof_indices.dof_indices[2]))
+ {
+ constraints.add_line (dof_indices.dof_indices[2]);
+
+ if (std::fabs (constraining_vector[0]/constraining_vector[2])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[2],
+ dof_indices.dof_indices[0],
+ -constraining_vector[0]/constraining_vector[2]);
+
+ if (std::fabs (constraining_vector[1]/constraining_vector[2])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[2],
+ dof_indices.dof_indices[1],
+ -constraining_vector[1]/constraining_vector[2]);
+ }
+ }
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented());
+ }
+ }
+
+
+ /**
+ * Add the constraint $\vec u \|
+ * \vec t$ to the list of
+ * constraints. In 2d, this is a
+ * single constraint, in 3d these
+ * are two constraints
+ *
+ * Here, $\vec u$ is represented
+ * by the set of given DoF
+ * indices, and $\vec t$ by the
+ * vector specified as the second
+ * argument.
+ *
+ * The function does not add constraints
+ * if a degree of freedom is already
+ * constrained in the constraints object.
+ */
+ template <int dim>
+ void
+ add_tangentiality_constraints (const VectorDoFTuple<dim> &dof_indices,
+ const Tensor<1,dim> &tangent_vector,
+ ConstraintMatrix &constraints)
+ {
+
+ // choose the DoF that has the
+ // largest component in the
+ // tangent_vector as the
+ // independent component, and
+ // then constrain the others to
+ // it. specifically, if, say,
+ // component 0 of the tangent
+ // vector t is largest by
+ // magnitude, then
+ // x1=t[1]/t[0]*x_0, etc.
+ unsigned int largest_component = 0;
+ for (unsigned int d=1; d<dim; ++d)
+ if (std::fabs(tangent_vector[d]) > std::fabs(tangent_vector[largest_component]) + 1e-10)
+ largest_component = d;
+
+ // then constrain all of the
+ // other degrees of freedom in
+ // terms of the one just found
+ for (unsigned int d=0; d<dim; ++d)
+ if (d != largest_component)
+ if (!constraints.is_constrained(dof_indices.dof_indices[d])
+ &&
+ constraints.can_store_line(dof_indices.dof_indices[d]))
+ {
+ constraints.add_line (dof_indices.dof_indices[d]);
+
+ if (std::fabs (tangent_vector[d]/tangent_vector[largest_component])
+ > std::numeric_limits<double>::epsilon())
+ constraints.add_entry (dof_indices.dof_indices[d],
+ dof_indices.dof_indices[largest_component],
+ tangent_vector[d]/tangent_vector[largest_component]);
+ }
+ }
+
+
+
+ /**
+ * Given a vector, compute a set
+ * of dim-1 vectors that are
+ * orthogonal to the first one
+ * and mutually orthonormal as
+ * well.
+ */
+ template <int dim>
+ void
+ compute_orthonormal_vectors (const Tensor<1,dim> &vector,
+ Tensor<1,dim> (&orthonormals)[dim-1])
+ {
+ switch (dim)
+ {
+ case 3:
+ {
+ // to do this in 3d, take
+ // one vector that is
+ // guaranteed to be not
+ // aligned with the
+ // average tangent and
+ // form the cross
+ // product. this yields
+ // one vector that is
+ // certainly
+ // perpendicular to the
+ // tangent; then take the
+ // cross product between
+ // this vector and the
+ // tangent and get one
+ // vector that is
+ // perpendicular to both
+
+ // construct a
+ // temporary vector
+ // by swapping the
+ // larger two
+ // components and
+ // flipping one
+ // sign; this can
+ // not be collinear
+ // with the average
+ // tangent
+ Tensor<1,dim> tmp = vector;
+ if ((std::fabs(tmp[0]) > std::fabs(tmp[1]))
+ &&
+ (std::fabs(tmp[0]) > std::fabs(tmp[2])))
+ {
+ // entry zero
+ // is the
+ // largest
+ if ((std::fabs(tmp[1]) > std::fabs(tmp[2])))
+ std::swap (tmp[0], tmp[1]);
+ else
+ std::swap (tmp[0], tmp[2]);
+
+ tmp[0] *= -1;
+ }
+ else if ((std::fabs(tmp[1]) > std::fabs(tmp[0]))
+ &&
+ (std::fabs(tmp[1]) > std::fabs(tmp[2])))
+ {
+ // entry one
+ // is the
+ // largest
+ if ((std::fabs(tmp[0]) > std::fabs(tmp[2])))
+ std::swap (tmp[1], tmp[0]);
+ else
+ std::swap (tmp[1], tmp[2]);
+
+ tmp[1] *= -1;
+ }
+ else
+ {
+ // entry two
+ // is the
+ // largest
+ if ((std::fabs(tmp[0]) > std::fabs(tmp[1])))
+ std::swap (tmp[2], tmp[0]);
+ else
+ std::swap (tmp[2], tmp[1]);
+
+ tmp[2] *= -1;
+ }
+
+ // make sure the two vectors
+ // are indeed not collinear
+ Assert (std::fabs(vector * tmp / vector.norm() / tmp.norm())
+ <
+ (1-1e-12),
+ ExcInternalError());
+
+ // now compute the
+ // two normals
+ cross_product (orthonormals[0], vector, tmp);
+ cross_product (orthonormals[1], vector, orthonormals[0]);
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented());
+ }
+ }
+ }
+
+
+ namespace internals
+ {
+ // This function computes the
+ // projection of the boundary
+ // function on edges for 3D.
+ template<typename cell_iterator>
+ void
+ compute_edge_projection (const cell_iterator& cell,
+ const unsigned int face,
+ const unsigned int line,
+ hp::FEValues<3>& hp_fe_values,
+ const Function<3>& boundary_function,
+ const unsigned int first_vector_component,
+ std::vector<double>& dof_values)
+ {
+ const double tol = 0.5 * cell->get_fe ().degree * 1e-13 / cell->face (face)->line (line)->diameter ();
+ const unsigned int dim = 3;
+ const unsigned int spacedim = 3;
+
+ hp_fe_values.reinit
+ (cell,
+ (cell->active_fe_index () * GeometryInfo<dim>::faces_per_cell + face)
+ * GeometryInfo<dim>::lines_per_face + line);
+
+ // Initialize the required
+ // objects.
+ const FEValues<dim>&
+ fe_values = hp_fe_values.get_present_fe_values ();
+ const std::vector< DerivativeForm<1,dim,spacedim> > &
+ jacobians = fe_values.get_jacobians ();
+ const std::vector<Point<dim> >&
+ quadrature_points = fe_values.get_quadrature_points ();
+
+ std::vector<Point<dim> > tangentials (fe_values.n_quadrature_points);
+ std::vector<Vector<double> > values (fe_values.n_quadrature_points,
+ Vector<double> (cell->get_fe ().n_components ()));
+
+ // Get boundary function values
+ // at quadrature points.
+ boundary_function.vector_value_list (quadrature_points, values);
+
+ const std::vector<Point<dim> >&
+ reference_quadrature_points = fe_values.get_quadrature ().get_points ();
+ const unsigned int superdegree = cell->get_fe ().degree;
+ const unsigned int degree = superdegree - 1;
+
+ // coordinate directions of
+ // the edges of the face.
+ const unsigned int
+ edge_coordinate_direction
+ [GeometryInfo<dim>::faces_per_cell]
+ [GeometryInfo<dim>::lines_per_face]
+ = { { 2, 2, 1, 1 },
+ { 2, 2, 1, 1 },
+ { 0, 0, 2, 2 },
+ { 0, 0, 2, 2 },
+ { 1, 1, 0, 0 },
+ { 1, 1, 0, 0 } };
+ const FEValuesExtractors::Vector vec (first_vector_component);
+
+ // The interpolation for the
+ // lowest order edge shape
+ // functions is just the mean
+ // value of the tangential
+ // components of the boundary
+ // function on the edge.
+ for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points;
+ ++q_point)
+ {
+ // Therefore compute the
+ // tangential of the edge at
+ // the quadrature point.
+ Point<dim> shifted_reference_point_1 = reference_quadrature_points[q_point];
+ Point<dim> shifted_reference_point_2 = reference_quadrature_points[q_point];
+
+ shifted_reference_point_1 (edge_coordinate_direction[face][line]) += tol;
+ shifted_reference_point_2 (edge_coordinate_direction[face][line]) -= tol;
+ tangentials[q_point]
+ = (0.5 *
+ (fe_values.get_mapping ()
+ .transform_unit_to_real_cell (cell,
+ shifted_reference_point_1)
+ -
+ fe_values.get_mapping ()
+ .transform_unit_to_real_cell (cell,
+ shifted_reference_point_2))
+ / tol);
+ tangentials[q_point]
+ /= std::sqrt (tangentials[q_point].square ());
+
+ // Compute the degrees of
+ // freedom.
+ for (unsigned int i = 0; i <= degree; ++i)
+ dof_values[i + line * superdegree]
+ += (fe_values.JxW (q_point)
+ * (values[q_point] (first_vector_component) * tangentials[q_point] (0)
+ + values[q_point] (first_vector_component + 1) * tangentials[q_point] (1)
+ + values[q_point] (first_vector_component + 2) * tangentials[q_point] (2))
+ * (fe_values[vec].value (cell->get_fe ().face_to_cell_index (i + line * superdegree,
+ face),
+ q_point)
+ * tangentials[q_point])
+ / std::sqrt (jacobians[q_point][0][edge_coordinate_direction[face][line]]
+ * jacobians[q_point][0][edge_coordinate_direction[face][line]]
+ + jacobians[q_point][1][edge_coordinate_direction[face][line]]
+ * jacobians[q_point][1][edge_coordinate_direction[face][line]]
+ + jacobians[q_point][2][edge_coordinate_direction[face][line]]
+ * jacobians[q_point][2][edge_coordinate_direction[face][line]]));
+ }
+ }
+
+ // dummy implementation of above
+ // function for all other
+ // dimensions
+ template<int dim, typename cell_iterator>
+ void
+ compute_edge_projection (const cell_iterator&,
+ const unsigned int,
+ const unsigned int,
+ hp::FEValues<dim>&,
+ const Function<dim>&,
+ const unsigned int,
+ std::vector<double>&)
+ {
+ Assert (false, ExcInternalError ());
+ }
+
+ // This function computes the
+ // projection of the boundary
+ // function on the interior of
+ // faces.
+ template<int dim, typename cell_iterator>
+ void
+ compute_face_projection_curl_conforming (const cell_iterator& cell,
+ const unsigned int face,
+ hp::FEValues<dim>& hp_fe_values,
+ const Function<dim>& boundary_function,
+ const unsigned int first_vector_component,
+ std::vector<double>& dof_values)
+ {
+ const unsigned int spacedim = dim;
+ hp_fe_values.reinit (cell, cell->active_fe_index ()
+ * GeometryInfo<dim>::faces_per_cell + face);
+ // Initialize the required
+ // objects.
+ const FEValues<dim>&
+ fe_values = hp_fe_values.get_present_fe_values ();
+ const std::vector< DerivativeForm<1,dim,spacedim> > &
+ jacobians = fe_values.get_jacobians ();
+
+ std::vector<Vector<double> >
+ values (fe_values.n_quadrature_points, Vector<double> (cell->get_fe ().n_components ()));
+
+ switch (dim)
+ {
+ case 2:
+ {
+ const std::vector<Point<dim> >&
+ quadrature_points = fe_values.get_quadrature_points ();
+ std::vector<Point<dim> >
+ tangentials (fe_values.n_quadrature_points);
+
+ // Get boundary function
+ // values at quadrature
+ // points.
+ boundary_function.vector_value_list (quadrature_points, values);
+
+ const std::vector<Point<dim> >&
+ reference_quadrature_points = fe_values.get_quadrature ().get_points ();
+ const unsigned int degree = cell->get_fe ().degree - 1;
+
+ // coordinate directions
+ // of the face.
+ const unsigned int
+ face_coordinate_direction[GeometryInfo<dim>::faces_per_cell]
+ = { 1, 1, 0, 0 };
+ const FEValuesExtractors::Vector vec (first_vector_component);
+
+ // The interpolation for
+ // the lowest order face
+ // shape functions is just
+ // the mean value of the
+ // tangential components
+ // of the boundary function
+ // on the edge.
+ for (unsigned int q_point = 0;
+ q_point < fe_values.n_quadrature_points; ++q_point)
+ {
+ // Therefore compute the
+ // tangential of the
+ // face at the quadrature
+ // point.
+ Point<dim> shifted_reference_point_1
+ = reference_quadrature_points[q_point];
+ Point<dim> shifted_reference_point_2
+ = reference_quadrature_points[q_point];
+
+ shifted_reference_point_1 (face_coordinate_direction[face])
+ += 1e-13;
+ shifted_reference_point_2 (face_coordinate_direction[face])
+ -= 1e-13;
+ tangentials[q_point]
+ = 2e13
+ * (fe_values.get_mapping ()
+ .transform_unit_to_real_cell (cell,
+ shifted_reference_point_1)
+ -
+ fe_values.get_mapping ()
+ .transform_unit_to_real_cell (cell,
+ shifted_reference_point_2));
+ tangentials[q_point]
+ /= std::sqrt (tangentials[q_point].square ());
+ // Compute the degrees
+ // of freedom.
+ for (unsigned int i = 0; i <= degree; ++i)
+ dof_values[i]
+ += fe_values.JxW (q_point)
+ * (values[q_point] (first_vector_component)
+ * tangentials[q_point] (0)
+ + values[q_point] (first_vector_component + 1)
+ * tangentials[q_point] (1))
+ * (fe_values[vec].value (cell->get_fe ().face_to_cell_index (i, face),
+ q_point) * tangentials[q_point])
+ / std::sqrt (jacobians[q_point][0][face_coordinate_direction[face]]
+ * jacobians[q_point][0][face_coordinate_direction[face]]
+ + jacobians[q_point][1][face_coordinate_direction[face]]
+ * jacobians[q_point][1][face_coordinate_direction[face]]);
+ }
+
+ break;
+ }
+
+ case 3:
+ {
+ const std::vector<Point<dim> >&
+ quadrature_points = fe_values.get_quadrature_points ();
+
+ // Get boundary function
+ // values at quadrature
+ // points.
+ boundary_function.vector_value_list (quadrature_points, values);
+
+ const FEValuesExtractors::Vector vec (first_vector_component);
+ const unsigned int superdegree = cell->get_fe ().degree;
+ const unsigned int degree = superdegree - 1;
+ FullMatrix<double>
+ assembling_matrix (degree * superdegree,
+ dim * fe_values.n_quadrature_points);
+ Vector<double> assembling_vector (assembling_matrix.n ());
+ Vector<double> cell_rhs (assembling_matrix.m ());
+ FullMatrix<double> cell_matrix (assembling_matrix.m (),
+ assembling_matrix.m ());
+ FullMatrix<double> cell_matrix_inv (assembling_matrix.m (),
+ assembling_matrix.m ());
+ Vector<double> solution (cell_matrix.m ());
+
+ // Get coordinate directions
+ // of the face.
+ const unsigned int
+ global_face_coordinate_directions[GeometryInfo<3>::faces_per_cell][2]
+ = { { 1, 2 },
+ { 1, 2 },
+ { 2, 0 },
+ { 2, 0 },
+ { 0, 1 },
+ { 0, 1 } };
+
+ // The projection is
+ // divided into two steps.
+ // In the first step we
+ // project the boundary
+ // function on the
+ // horizontal shape
+ // functions. Then the
+ // bounary function is
+ // projected on the
+ // vertical shape
+ // functions. We begin
+ // with the horizontal
+ // shape functions and
+ // set up a linear system
+ // of equations to get
+ // the values for degrees
+ // of freedom associated
+ // with the interior of
+ // the face.
+ for (unsigned int q_point = 0;
+ q_point < fe_values.n_quadrature_points; ++q_point)
+ {
+ // The right hand
+ // side of the
+ // corresponding problem
+ // is the residual
+ // of the boundary
+ // function and
+ // the already
+ // interpolated part
+ // on the edges.
+ Tensor<1, dim> tmp;
+
+ for (unsigned int d = 0; d < dim; ++d)
+ tmp[d] = values[q_point] (first_vector_component + d);
+
+ for (unsigned int i = 0; i < 2; ++i)
+ for (unsigned int j = 0; j <= degree; ++j)
+ tmp -= dof_values[(i + 2) * superdegree + j]
+ * fe_values[vec].value (cell->get_fe ().face_to_cell_index
+ ((i + 2) * superdegree + j,
+ face), q_point);
+
+ const double JxW
+ = std::sqrt (fe_values.JxW (q_point)
+ / ((jacobians[q_point][0][global_face_coordinate_directions[face][0]]
+ * jacobians[q_point][0][global_face_coordinate_directions[face][0]]
+ +
+ jacobians[q_point][1][global_face_coordinate_directions[face][0]]
+ * jacobians[q_point][1][global_face_coordinate_directions[face][0]]
+ +
+ jacobians[q_point][2][global_face_coordinate_directions[face][0]]
+ * jacobians[q_point][2][global_face_coordinate_directions[face][0]])
+ *
+ (jacobians[q_point][0][global_face_coordinate_directions[face][1]]
+ * jacobians[q_point][0][global_face_coordinate_directions[face][1]]
+ +
+ jacobians[q_point][1][global_face_coordinate_directions[face][1]]
+ * jacobians[q_point][1][global_face_coordinate_directions[face][1]]
+ +
+ jacobians[q_point][2][global_face_coordinate_directions[face][1]]
+ * jacobians[q_point][2][global_face_coordinate_directions[face][1]])));
+
+ // In the weak form
+ // the right hand
+ // side function
+ // is multiplicated
+ // by the horizontal
+ // shape functions
+ // defined in the
+ // interior of
+ // the face.
+ for (unsigned int d = 0; d < dim; ++d)
+ assembling_vector (dim * q_point + d) = JxW * tmp[d];
+
+ for (unsigned int i = 0; i <= degree; ++i)
+ for (unsigned int j = 0; j < degree; ++j)
+ {
+ const Tensor<1, dim> shape_value
+ = (JxW
+ * fe_values[vec].value (cell->get_fe ()
+ .face_to_cell_index
+ ((i + GeometryInfo<dim>::lines_per_face)
+ * degree
+ + j
+ + GeometryInfo<dim>::lines_per_face,
+ face),
+ q_point));
+
+ for (unsigned int d = 0; d < dim; ++d)
+ assembling_matrix (i * degree + j,
+ dim * q_point + d)
+ = shape_value[d];
+ }
+ }
+
+ // Create the system
+ // matrix by
+ // multiplying the
+ // assembling matrix
+ // with its transposed
+ // and the right
+ // hand side vector
+ // by mutliplying
+ // the assembling
+ // matrix with the
+ // assembling vector.
+ // Invert the system
+ // matrix.
+ assembling_matrix.mTmult (cell_matrix, assembling_matrix);
+ cell_matrix_inv.invert (cell_matrix);
+ assembling_matrix.vmult (cell_rhs, assembling_vector);
+ cell_matrix_inv.vmult (solution, cell_rhs);
+
+ // Store the computed
+ // values.
+ for (unsigned int i = 0; i <= degree; ++i)
+ for (unsigned int j = 0; j < degree; ++j)
+ dof_values[(i + GeometryInfo<dim>::lines_per_face)
+ * degree + j + GeometryInfo<dim>::lines_per_face]
+ = solution (i * degree + j);
+
+ // Now we do the
+ // same as above
+ // with the vertical
+ // shape functions
+ // instead of the
+ // horizontal ones.
+ for (unsigned int q_point = 0;
+ q_point < fe_values.n_quadrature_points; ++q_point)
+ {
+ Tensor<1, dim> tmp;
+
+ for (unsigned int d = 0; d < dim; ++d)
+ tmp[d] = values[q_point] (first_vector_component + d);
+
+ for (unsigned int i = 0; i < 2; ++i)
+ for (unsigned int j = 0; j <= degree; ++j)
+ tmp
+ -= dof_values[i * superdegree + j]
+ * fe_values[vec].value (cell->get_fe ().face_to_cell_index
+ (i * superdegree + j, face), q_point);
+
+ const double JxW
+ = std::sqrt (fe_values.JxW (q_point)
+ / ((jacobians[q_point][0][global_face_coordinate_directions[face][0]]
+ * jacobians[q_point][0][global_face_coordinate_directions[face][0]]
+ +
+ jacobians[q_point][1][global_face_coordinate_directions[face][0]]
+ * jacobians[q_point][1][global_face_coordinate_directions[face][0]]
+ +
+ jacobians[q_point][2][global_face_coordinate_directions[face][0]]
+ * jacobians[q_point][2][global_face_coordinate_directions[face][0]])
+ *
+ (jacobians[q_point][0][global_face_coordinate_directions[face][1]]
+ * jacobians[q_point][0][global_face_coordinate_directions[face][1]]
+ +
+ jacobians[q_point][1][global_face_coordinate_directions[face][1]]
+ * jacobians[q_point][1][global_face_coordinate_directions[face][1]]
+ +
+ jacobians[q_point][2][global_face_coordinate_directions[face][1]]
+ * jacobians[q_point][2][global_face_coordinate_directions[face][1]])));
+
+ for (unsigned int d = 0; d < dim; ++d)
+ assembling_vector (dim * q_point + d) = JxW * tmp[d];
+
+ for (unsigned int i = 0; i < degree; ++i)
+ for (unsigned int j = 0; j <= degree; ++j)
+ {
+ const Tensor<1, dim> shape_value
+ = (JxW
+ * fe_values[vec].value (cell->get_fe ().face_to_cell_index
+ ((i + degree + GeometryInfo<dim>::lines_per_face)
+ * superdegree + j, face), q_point));
+
+ for (unsigned int d = 0; d < dim; ++d)
+ assembling_matrix (i * superdegree + j, dim * q_point + d)
+ = shape_value[d];
+ }
+ }
+
+ assembling_matrix.mTmult (cell_matrix, assembling_matrix);
+ cell_matrix_inv.invert (cell_matrix);
+ assembling_matrix.vmult (cell_rhs, assembling_vector);
+ cell_matrix_inv.vmult (solution, cell_rhs);
+
+ for (unsigned int i = 0; i < degree; ++i)
+ for (unsigned int j = 0; j <= degree; ++j)
+ dof_values[(i + degree + GeometryInfo<dim>::lines_per_face) * superdegree + j]
+ = solution (i * superdegree + j);
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented ());
+ }
+ }
+ }
+
+
+
+
+ template <int dim>
+ void
+
+ project_boundary_values_curl_conforming (const DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const Mapping<dim>& mapping)
+ {
+ // Projection-based interpolation
+ // is performed in two (in 2D)
+ // respectively three (in 3D)
+ // steps. First the tangential
+ // component of the function is
+ // interpolated on each edge. This
+ // gives the values for the degrees
+ // of freedom corresponding to the
+ // edge shape functions. Now we are
+ // done for 2D, but in 3D we possibly
+ // have also degrees of freedom, which
+ // are located in the interior of
+ // the faces. Therefore we compute
+ // the residual of the function
+ // describing the boundary values
+ // and the interpolated part, which
+ // we have computed in the last
+ // step. On the faces there are
+ // two kinds of shape functions,
+ // the horizontal and the vertical
+ // ones. Thus we have to solve two
+ // linear systems of equations of
+ // size <tt>degree * (degree +
+ // 1)<tt> to obtain the values for
+ // the corresponding degrees of
+ // freedom.
+ const unsigned int superdegree = dof_handler.get_fe ().degree;
+ const QGauss<dim - 1> reference_face_quadrature (2 * superdegree);
+ const unsigned int dofs_per_face = dof_handler.get_fe ().dofs_per_face;
+ hp::FECollection<dim> fe_collection (dof_handler.get_fe ());
+ hp::MappingCollection<dim> mapping_collection (mapping);
+ hp::QCollection<dim> face_quadrature_collection;
+
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ face_quadrature_collection.push_back
+ (QProjector<dim>::project_to_face (reference_face_quadrature, face));
+
+ hp::FEValues<dim> fe_face_values (mapping_collection, fe_collection,
+ face_quadrature_collection,
+ update_jacobians |
+ update_JxW_values |
+ update_quadrature_points |
+ update_values);
+
+ std::vector<double> dof_values (dofs_per_face);
+ std::vector<unsigned int> face_dof_indices (dofs_per_face);
+ typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
+
+ switch (dim)
+ {
+ case 2:
+ {
+ for (; cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // if the FE is a
+ // FE_Nothing object
+ // there is no work to
+ // do
+ if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
+ return;
+
+ // This is only
+ // implemented, if the
+ // FE is a Nedelec
+ // element. If the FE
+ // is a FESystem, we
+ // cannot check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0) {
+ typedef FiniteElement<dim> FEL;
+ AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
+
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ dof_values[dof] = 0.0;
+
+ // Compute the
+ // projection of the
+ // boundary function on
+ // the edge.
+ internals
+ ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
+ boundary_function,
+ first_vector_component,
+ dof_values);
+ cell->face (face)->get_dof_indices (face_dof_indices,
+ cell->active_fe_index ());
+
+ // Add the computed
+ // constraints to the
+ // constraint matrix,
+ // if the degree of
+ // freedom is not
+ // already constrained.
+ const double tol = 1e-13;
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ if (!(constraints.is_constrained (face_dof_indices[dof])))
+ {
+ constraints.add_line (face_dof_indices[dof]);
+
+ if (std::abs (dof_values[dof]) > tol)
+ constraints.set_inhomogeneity (face_dof_indices[dof], dof_values[dof]);
+ }
+ }
+
+ break;
+ }
+
+ case 3:
+ {
+ const QGauss<dim - 2> reference_edge_quadrature (2 * superdegree);
+ const unsigned int degree = superdegree - 1;
+ const unsigned int n_dofs = dof_handler.n_dofs ();
+ hp::QCollection<dim> edge_quadrature_collection;
+
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ for (unsigned int line = 0; line < GeometryInfo<dim>::lines_per_face; ++line)
+ edge_quadrature_collection.push_back
+ (QProjector<dim>::project_to_face
+ (QProjector<dim - 1>::project_to_face
+ (reference_edge_quadrature, line), face));
+
+ hp::FEValues<dim> fe_edge_values (mapping_collection, fe_collection,
+ edge_quadrature_collection,
+ update_jacobians |
+ update_JxW_values |
+ update_quadrature_points |
+ update_values);
+ std::vector<double> computed_constraints (n_dofs);
+ std::vector<int> projected_dofs (n_dofs);
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof) {
+ computed_constraints[dof] = 0.0;
+ projected_dofs[dof] = -1;
+ }
+
+ for (; cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // if the FE is a
+ // FE_Nothing object
+ // there is no work to
+ // do
+ if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
+ return;
+
+ // This is only
+ // implemented, if the
+ // FE is a Nedelec
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ dof_values[dof] = 0.0;
+
+ cell->face (face)->get_dof_indices (face_dof_indices,
+ cell->active_fe_index ());
+
+ // First we compute the
+ // projection on the
+ // edges.
+ for (unsigned int line = 0;
+ line < GeometryInfo<3>::lines_per_face; ++line)
+ {
+ // If we have reached
+ // this edge through
+ // another cell
+ // before, we do not
+ // do here anything
+ // unless we have a
+ // good reason, i.e.
+ // a higher
+ // polynomial degree.
+ if (projected_dofs[face_dof_indices[line * superdegree]]
+ <
+ (int) degree)
+ {
+ // Compute the
+ // projection of
+ // the boundary
+ // function on the
+ // edge.
+ internals
+ ::compute_edge_projection (cell, face, line,
+ fe_edge_values,
+ boundary_function,
+ first_vector_component,
+ dof_values);
+ // Mark the
+ // projected
+ // degrees of
+ // freedom.
+ for (unsigned int dof = line * superdegree;
+ dof < (line + 1) * superdegree; ++dof)
+ projected_dofs[face_dof_indices[dof]] = degree;
+ }
+
+ // If we have
+ // computed the
+ // values in a
+ // previous step of
+ // the loop, we just
+ // copy the values in
+ // the local vector.
+ else
+ for (unsigned int dof = line * superdegree;
+ dof < (line + 1) * superdegree; ++dof)
+ dof_values[dof] = computed_constraints[face_dof_indices[dof]];
+ }
+
+ // If there are higher
+ // order shape
+ // functions, there is
+ // still some work
+ // left.
+ if (degree > 0)
+ {
+ // Compute the
+ // projection of the
+ // boundary function
+ // on the interior of
+ // the face.
+ internals
+ ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
+ boundary_function,
+ first_vector_component,
+ dof_values);
+
+ // Mark the projected
+ // degrees of
+ // freedom.
+ for (unsigned int dof = GeometryInfo<dim>::lines_per_face * superdegree;
+ dof < dofs_per_face; ++dof)
+ projected_dofs[face_dof_indices[dof]] = degree;
+ }
+
+ // Store the computed
+ // values in the global
+ // vector.
+ const double tol = 0.5 * superdegree * 1e-13 / cell->face (face)->diameter ();
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ if (std::abs (computed_constraints[face_dof_indices[dof]] - dof_values[dof]) > tol)
+ computed_constraints[face_dof_indices[dof]] = dof_values[dof];
+ }
+
+ // Add the computed constraints
+ // to the constraint matrix, if
+ // the degree of freedom is not
+ // already constrained.
+ for (unsigned int dof = 0; dof < n_dofs; ++dof)
+ if ((projected_dofs[dof] != -1) && !(constraints.is_constrained (dof)))
+ {
+ constraints.add_line (dof);
+ constraints.set_inhomogeneity (dof, computed_constraints[dof]);
+ }
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented ());
+ }
+ }
+
+
+
+ template <int dim>
+ void
+
+ project_boundary_values_curl_conforming (const hp::DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const hp::MappingCollection<dim>& mapping_collection)
+ {
+ hp::FECollection<dim> fe_collection (dof_handler.get_fe ());
+ hp::QCollection<dim> face_quadrature_collection;
+
+ for (unsigned int i = 0; i < fe_collection.size (); ++i)
+ {
+ const QGauss<dim - 1>
+ reference_face_quadrature (2 * fe_collection[i].degree);
+
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ face_quadrature_collection.push_back
+ (QProjector<dim>::project_to_face (reference_face_quadrature, face));
+ }
+
+ hp::FEValues<dim> fe_face_values (mapping_collection, fe_collection,
+ face_quadrature_collection,
+ update_jacobians |
+ update_JxW_values |
+ update_quadrature_points |
+ update_values);
+ std::vector<double> dof_values;
+ std::vector<unsigned int> face_dof_indices;
+ typename hp::DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
+
+ switch (dim)
+ {
+ case 2:
+ {
+ for (; cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // if the FE is a
+ // FE_Nothing object
+ // there is no work to
+ // do
+ if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
+ return;
+
+ // This is only
+ // implemented, if the
+ // FE is a Nedelec
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ const unsigned int dofs_per_face = cell->get_fe ().dofs_per_face;
+
+ dof_values.resize (dofs_per_face);
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ dof_values[dof] = 0.0;
+
+ internals
+ ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
+ boundary_function,
+ first_vector_component,
+ dof_values);
+ face_dof_indices.resize (dofs_per_face);
+ cell->face (face)->get_dof_indices (face_dof_indices,
+ cell->active_fe_index ());
+
+ const double tol = 0.5 * cell->get_fe ().degree * 1e-13 / cell->face (face)->diameter ();
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ if (!(constraints.is_constrained (face_dof_indices[dof])))
+ {
+ constraints.add_line (face_dof_indices[dof]);
+
+ if (std::abs (dof_values[dof]) > tol)
+ constraints.set_inhomogeneity (face_dof_indices[dof], dof_values[dof]);
+ }
+ }
+
+ break;
+ }
+
+ case 3:
+ {
+ const unsigned int n_dofs = dof_handler.n_dofs ();
+ hp::QCollection<dim> edge_quadrature_collection;
+
+ for (unsigned int i = 0; i < fe_collection.size (); ++i)
+ {
+ const QGauss<dim - 2>
+ reference_edge_quadrature (2 * fe_collection[i].degree);
+
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ for (unsigned int line = 0; line < GeometryInfo<dim>::lines_per_face; ++line)
+ edge_quadrature_collection.push_back
+ (QProjector<dim>::project_to_face
+ (QProjector<dim - 1>::project_to_face (reference_edge_quadrature, line),
+ face));
+ }
+
+ hp::FEValues<dim> fe_edge_values (mapping_collection, fe_collection,
+ edge_quadrature_collection,
+ update_jacobians |
+ update_JxW_values |
+ update_quadrature_points |
+ update_values);
+ std::vector<double> computed_constraints (n_dofs);
+ std::vector<int> projected_dofs (n_dofs);
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof) {
+ computed_constraints[dof] = 0.0;
+ projected_dofs[dof] = -1;
+ }
+
+ for (; cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // if the FE is a
+ // FE_Nothing object
+ // there is no work to
+ // do
+ if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
+ return;
+
+ // This is only
+ // implemented, if the
+ // FE is a Nedelec
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ const unsigned int superdegree = cell->get_fe ().degree;
+ const unsigned int degree = superdegree - 1;
+ const unsigned int dofs_per_face = cell->get_fe ().dofs_per_face;
+
+ dof_values.resize (dofs_per_face);
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ dof_values[dof] = 0.0;
+
+ face_dof_indices.resize (dofs_per_face);
+ cell->face (face)->get_dof_indices (face_dof_indices,
+ cell->active_fe_index ());
+
+ for (unsigned int line = 0;
+ line < GeometryInfo<dim>::lines_per_face; ++line)
+ {
+ if (projected_dofs[face_dof_indices[line * superdegree]]
+ <
+ (int) degree)
+ {
+ internals
+ ::compute_edge_projection (cell, face, line,
+ fe_edge_values,
+ boundary_function,
+ first_vector_component,
+ dof_values);
+
+ for (unsigned int dof = line * superdegree;
+ dof < (line + 1) * superdegree; ++dof)
+ projected_dofs[face_dof_indices[dof]] = degree;
+ }
+
+ else
+ for (unsigned int dof = line * superdegree;
+ dof < (line + 1) * superdegree; ++dof)
+ dof_values[dof] = computed_constraints[face_dof_indices[dof]];
+ }
+
+ if (degree > 0)
+ {
+ internals
+ ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
+ boundary_function,
+ first_vector_component,
+ dof_values);
+
+ for (unsigned int dof = GeometryInfo<dim>::lines_per_face * superdegree;
+ dof < dofs_per_face; ++dof)
+ projected_dofs[face_dof_indices[dof]] = degree;
+ }
+
+ const double tol = 0.5 * superdegree * 1e-13 / cell->face (face)->diameter ();
+
+ for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
+ if (std::abs (computed_constraints[face_dof_indices[dof]] - dof_values[dof]) > tol)
+ computed_constraints[face_dof_indices[dof]] = dof_values[dof];
+ }
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof)
+ if ((projected_dofs[dof] != -1) && !(constraints.is_constrained (dof)))
+ {
+ constraints.add_line (dof);
+ constraints.set_inhomogeneity (dof, computed_constraints[dof]);
+ }
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented ());
+ }
+ }
+
+
+ namespace internals
+ {
+ // This function computes the
+ // projection of the boundary
+ // function on the boundary
+ // in 2d.
+ template <typename cell_iterator>
+ void
+ compute_face_projection_div_conforming (const cell_iterator& cell,
+ const unsigned int face,
+ const FEFaceValues<2>& fe_values,
+ const unsigned int first_vector_component,
+ const Function<2>& boundary_function,
+ const std::vector<DerivativeForm<1,2,2> > & jacobians,
+ ConstraintMatrix& constraints)
+ {
+ // Compute the intergral over
+ // the product of the normal
+ // components of the boundary
+ // function times the normal
+ // components of the shape
+ // functions supported on the
+ // boundary.
+ const FEValuesExtractors::Vector vec (first_vector_component);
+ const FiniteElement<2>& fe = cell->get_fe ();
+ const std::vector<Point<2> >& normals = fe_values.get_normal_vectors ();
+ const unsigned int
+ face_coordinate_direction[GeometryInfo<2>::faces_per_cell] = {1, 1, 0, 0};
+ std::vector<Vector<double> >
+ values (fe_values.n_quadrature_points, Vector<double> (2));
+ Vector<double> dof_values (fe.dofs_per_face);
+
+ // Get the values of the
+ // boundary function at the
+ // quadrature points.
+ {
+ const std::vector<Point<2> >&
+ quadrature_points = fe_values.get_quadrature_points ();
+
+ boundary_function.vector_value_list (quadrature_points, values);
+ }
+
+ for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points; ++q_point)
+ {
+ double tmp = 0.0;
+
+ for (unsigned int d = 0; d < 2; ++d)
+ tmp += normals[q_point][d] * values[q_point] (d);
+
+ tmp *= fe_values.JxW (q_point)
+ * std::sqrt (jacobians[q_point][0][face_coordinate_direction[face]]
+ * jacobians[q_point][0][face_coordinate_direction[face]]
+ + jacobians[q_point][1][face_coordinate_direction[face]]
+ * jacobians[q_point][1][face_coordinate_direction[face]]);
+
+ for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
+ dof_values (i) += tmp * (normals[q_point]
+ * fe_values[vec].value (fe.face_to_cell_index (i, face), q_point));
+ }
+
+ std::vector<unsigned int> face_dof_indices (fe.dofs_per_face);
+
+ cell->face (face)->get_dof_indices (face_dof_indices, cell->active_fe_index ());
+
+ // Copy the computed values
+ // in the ConstraintMatrix only,
+ // if the degree of freedom is
+ // not already constrained.
+ for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
+ if (!(constraints.is_constrained (face_dof_indices[i])))
+ {
+ constraints.add_line (face_dof_indices[i]);
+
+ if (std::abs (dof_values (i)) > 1e-14)
+ constraints.set_inhomogeneity (face_dof_indices[i], dof_values (i));
+ }
+ }
+
+ // dummy implementation of above
+ // function for all other
+ // dimensions
+ template<int dim, typename cell_iterator>
+ void
+ compute_face_projection_div_conforming (const cell_iterator&,
+ const unsigned int,
+ const FEFaceValues<dim>&,
+ const unsigned int,
+ const Function<dim>&,
+ const std::vector<DerivativeForm<1,dim,dim> >&,
+ ConstraintMatrix&)
+ {
+ Assert (false, ExcNotImplemented ());
+ }
+
+ // This function computes the
+ // projection of the boundary
+ // function on the boundary
+ // in 3d.
+ template<typename cell_iterator>
+ void
+ compute_face_projection_div_conforming (const cell_iterator& cell,
+ const unsigned int face,
+ const FEFaceValues<3>& fe_values,
+ const unsigned int first_vector_component,
+ const Function<3>& boundary_function,
+ const std::vector<DerivativeForm<1,3,3> >& jacobians,
+ std::vector<double>& dof_values,
+ std::vector<unsigned int>& projected_dofs)
+ {
+ // Compute the intergral over
+ // the product of the normal
+ // components of the boundary
+ // function times the normal
+ // components of the shape
+ // functions supported on the
+ // boundary.
+ const FEValuesExtractors::Vector vec (first_vector_component);
+ const FiniteElement<3>& fe = cell->get_fe ();
+ const std::vector<Point<3> >& normals = fe_values.get_normal_vectors ();
+ const unsigned int
+ face_coordinate_directions[GeometryInfo<3>::faces_per_cell][2] = {{1, 2},
+ {1, 2},
+ {2, 0},
+ {2, 0},
+ {0, 1},
+ {0, 1}};
+ std::vector<Vector<double> >
+ values (fe_values.n_quadrature_points, Vector<double> (3));
+ Vector<double> dof_values_local (fe.dofs_per_face);
+
+ {
+ const std::vector<Point<3> >&
+ quadrature_points = fe_values.get_quadrature_points ();
+
+ boundary_function.vector_value_list (quadrature_points, values);
+ }
+
+ for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points; ++q_point)
+ {
+ double tmp = 0.0;
+
+ for (unsigned int d = 0; d < 3; ++d)
+ tmp += normals[q_point][d] * values[q_point] (d);
+
+ tmp *= fe_values.JxW (q_point)
+ * std::sqrt ((jacobians[q_point][0][face_coordinate_directions[face][0]]
+ * jacobians[q_point][0][face_coordinate_directions[face][0]]
+ + jacobians[q_point][1][face_coordinate_directions[face][0]]
+ * jacobians[q_point][1][face_coordinate_directions[face][0]]
+ + jacobians[q_point][2][face_coordinate_directions[face][0]]
+ * jacobians[q_point][2][face_coordinate_directions[face][0]])
+ * (jacobians[q_point][0][face_coordinate_directions[face][1]]
+ * jacobians[q_point][0][face_coordinate_directions[face][1]]
+ + jacobians[q_point][1][face_coordinate_directions[face][1]]
+ * jacobians[q_point][1][face_coordinate_directions[face][1]]
+ + jacobians[q_point][2][face_coordinate_directions[face][1]]
+ * jacobians[q_point][2][face_coordinate_directions[face][1]]));
+
+ for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
+ dof_values_local (i) += tmp * (normals[q_point]
+ * fe_values[vec].value (fe.face_to_cell_index (i, face), q_point));
+ }
+
+ std::vector<unsigned int> face_dof_indices (fe.dofs_per_face);
+
+ cell->face (face)->get_dof_indices (face_dof_indices, cell->active_fe_index ());
+
+ for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
+ if (projected_dofs[face_dof_indices[i]] < fe.degree)
+ {
+ dof_values[face_dof_indices[i]] = dof_values_local (i);
+ projected_dofs[face_dof_indices[i]] = fe.degree;
+ }
+ }
+
+ // dummy implementation of above
+ // function for all other
+ // dimensions
+ template<int dim, typename cell_iterator>
+ void
+ compute_face_projection_div_conforming (const cell_iterator&,
+ const unsigned int,
+ const FEFaceValues<dim>&,
+ const unsigned int,
+ const Function<dim>&,
+ const std::vector<DerivativeForm<1,dim,dim> > &,
+ std::vector<double>&,
+ std::vector<unsigned int>&)
+ {
+ Assert (false, ExcNotImplemented ());
+ }
+ }
+
+
+ template <int dim>
+ void
+ project_boundary_values_div_conforming (const DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const Mapping<dim>& mapping)
+ {
+ const unsigned int spacedim = dim;
+ // Interpolate the normal components
+ // of the boundary functions. Since
+ // the Raviart-Thomas elements are
+ // constructed from a Lagrangian
+ // basis, it suffices to compute
+ // the integral over the product
+ // of the normal components of the
+ // boundary function times the
+ // normal components of the shape
+ // functions supported on the
+ // boundary.
+ const FiniteElement<dim>& fe = dof_handler.get_fe ();
+ QGauss<dim - 1> face_quadrature (fe.degree + 1);
+ FEFaceValues<dim> fe_face_values (mapping, fe, face_quadrature, update_JxW_values |
+ update_normal_vectors |
+ update_quadrature_points |
+ update_values);
+ hp::FECollection<dim> fe_collection (fe);
+ hp::MappingCollection<dim> mapping_collection (mapping);
+ hp::QCollection<dim> quadrature_collection;
+
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ quadrature_collection.push_back (QProjector<dim>::project_to_face (face_quadrature,
+ face));
+
+ hp::FEValues<dim> fe_values (mapping_collection, fe_collection, quadrature_collection,
+ update_jacobians);
+
+ switch (dim)
+ {
+ case 2:
+ {
+ for (typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
+ cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // if the FE is a
+ // FE_Nothing object
+ // there is no work to
+ // do
+ if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
+ return;
+
+ // This is only
+ // implemented, if the
+ // FE is a Raviart-Thomas
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ fe_values.reinit (cell, face + cell->active_fe_index ()
+ * GeometryInfo<dim>::faces_per_cell);
+
+ const std::vector<DerivativeForm<1,dim,spacedim> > &
+ jacobians = fe_values.get_present_fe_values ().get_jacobians ();
+
+ fe_face_values.reinit (cell, face);
+ internals::compute_face_projection_div_conforming (cell, face,
+ fe_face_values,
+ first_vector_component,
+ boundary_function,
+ jacobians,
+ constraints);
+ }
+
+ break;
+ }
+
+ case 3:
+ {
+ // In three dimensions the
+ // edges between two faces
+ // are treated twice.
+ // Therefore we store the
+ // computed values in a
+ // vector and copy them over
+ // in the ConstraintMatrix
+ // after all values have been
+ // computed.
+ // If we have two values for
+ // one edge, we choose the one,
+ // which was computed with the
+ // higher order element.
+ // If both elements are of the
+ // same order, we just keep the
+ // first value and do not
+ // compute a second one.
+ const unsigned int& n_dofs = dof_handler.n_dofs ();
+ std::vector<double> dof_values (n_dofs);
+ std::vector<unsigned int> projected_dofs (n_dofs);
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof)
+ projected_dofs[dof] = 0;
+
+ for (typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
+ cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // This is only
+ // implemented, if the
+ // FE is a Raviart-Thomas
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ fe_values.reinit (cell, face + cell->active_fe_index ()
+ * GeometryInfo<dim>::faces_per_cell);
+
+ const std::vector<DerivativeForm<1,dim ,spacedim> >&
+ jacobians = fe_values.get_present_fe_values ().get_jacobians ();
+
+ fe_face_values.reinit (cell, face);
+ internals::compute_face_projection_div_conforming (cell, face,
+ fe_face_values,
+ first_vector_component,
+ boundary_function,
+ jacobians, dof_values,
+ projected_dofs);
+ }
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof)
+ if ((projected_dofs[dof] != 0) && !(constraints.is_constrained (dof)))
+ {
+ constraints.add_line (dof);
+
+ if (std::abs (dof_values[dof]) > 1e-14)
+ constraints.set_inhomogeneity (dof, dof_values[dof]);
+ }
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented ());
+ }
+ }
+
+
+ template <int dim>
+ void
+ project_boundary_values_div_conforming (const hp::DoFHandler<dim>& dof_handler,
+ const unsigned int first_vector_component,
+ const Function<dim>& boundary_function,
+ const types::boundary_id boundary_component,
+ ConstraintMatrix& constraints,
+ const hp::MappingCollection<dim, dim>& mapping_collection)
+ {
+ const unsigned int spacedim = dim;
+ const hp::FECollection<dim>& fe_collection = dof_handler.get_fe ();
+ hp::QCollection<dim - 1> face_quadrature_collection;
+ hp::QCollection<dim> quadrature_collection;
+
+ for (unsigned int i = 0; i < fe_collection.size (); ++i)
+ {
+ const QGauss<dim - 1> quadrature (fe_collection[i].degree + 1);
+
+ face_quadrature_collection.push_back (quadrature);
+
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ quadrature_collection.push_back (QProjector<dim>::project_to_face (quadrature,
+ face));
+ }
+
+ hp::FEFaceValues<dim> fe_face_values (mapping_collection, fe_collection,
+ face_quadrature_collection, update_JxW_values |
+ update_normal_vectors |
+ update_quadrature_points |
+ update_values);
+ hp::FEValues<dim> fe_values (mapping_collection, fe_collection, quadrature_collection,
+ update_jacobians);
+
+ switch (dim)
+ {
+ case 2:
+ {
+ for (typename hp::DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
+ cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // This is only
+ // implemented, if the
+ // FE is a Raviart-Thomas
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ fe_values.reinit (cell, face + cell->active_fe_index ()
+ * GeometryInfo<dim>::faces_per_cell);
+
+ const std::vector<DerivativeForm<1,dim,spacedim> > &
+ jacobians = fe_values.get_present_fe_values ().get_jacobians ();
+
+ fe_face_values.reinit (cell, face);
+ internals::compute_face_projection_div_conforming (cell, face,
+ fe_face_values.get_present_fe_values (),
+ first_vector_component,
+ boundary_function,
+ jacobians,
+ constraints);
+ }
+
+ break;
+ }
+
+ case 3:
+ {
+ const unsigned int& n_dofs = dof_handler.n_dofs ();
+ std::vector<double> dof_values (n_dofs);
+ std::vector<unsigned int> projected_dofs (n_dofs);
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof)
+ projected_dofs[dof] = 0;
+
+ for (typename hp::DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
+ cell != dof_handler.end (); ++cell)
+ if (cell->at_boundary ())
+ for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
+ if (cell->face (face)->boundary_indicator () == boundary_component)
+ {
+ // This is only
+ // implemented, if the
+ // FE is a Raviart-Thomas
+ // element. If the FE is
+ // a FESystem we cannot
+ // check this.
+ if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
+ {
+ typedef FiniteElement<dim> FEL;
+
+ AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
+ typename FEL::ExcInterpolationNotImplemented ());
+ }
+
+ fe_values.reinit (cell, face + cell->active_fe_index ()
+ * GeometryInfo<dim>::faces_per_cell);
+
+ const std::vector<DerivativeForm<1,dim,spacedim> > &
+ jacobians = fe_values.get_present_fe_values ().get_jacobians ();
+
+ fe_face_values.reinit (cell, face);
+ internals::compute_face_projection_div_conforming (cell, face,
+ fe_face_values.get_present_fe_values (),
+ first_vector_component,
+ boundary_function,
+ jacobians, dof_values,
+ projected_dofs);
+ }
+
+ for (unsigned int dof = 0; dof < n_dofs; ++dof)
+ if ((projected_dofs[dof] != 0) && !(constraints.is_constrained (dof)))
+ {
+ constraints.add_line (dof);
+
+ if (std::abs (dof_values[dof]) > 1e-14)
+ constraints.set_inhomogeneity (dof, dof_values[dof]);
+ }
+
+ break;
+ }
+
+ default:
+ Assert (false, ExcNotImplemented ());
+ }
+ }
+
+
+
+ template <int dim, template <int, int> class DH, int spacedim>
+ void
+ compute_no_normal_flux_constraints (const DH<dim,spacedim> &dof_handler,
+ const unsigned int first_vector_component,
+ const std::set<types::boundary_id> &boundary_ids,
+ ConstraintMatrix &constraints,
+ const Mapping<dim, spacedim> &mapping)
+ {
+ Assert (dim > 1,
+ ExcMessage ("This function is not useful in 1d because it amounts "
+ "to imposing Dirichlet values on the vector-valued "
+ "quantity."));
+
+ std::vector<unsigned int> face_dofs;
+
+ // create FE and mapping
+ // collections for all elements in
+ // use by this DoFHandler
+ hp::FECollection<dim,spacedim> fe_collection (dof_handler.get_fe());
+ hp::MappingCollection<dim,spacedim> mapping_collection;
+ for (unsigned int i=0; i<fe_collection.size(); ++i)
+ mapping_collection.push_back (mapping);
+
+ // now also create a quadrature
+ // collection for the faces of a
+ // cell. fill it with a quadrature
+ // formula with the support points
+ // on faces for each FE
+ hp::QCollection<dim-1> face_quadrature_collection;
+ for (unsigned int i=0; i<fe_collection.size(); ++i)
+ {
+ const std::vector<Point<dim-1> > &
+ unit_support_points = fe_collection[i].get_unit_face_support_points();
+
+ Assert (unit_support_points.size() == fe_collection[i].dofs_per_face,
+ ExcInternalError());
+
+ face_quadrature_collection
+ .push_back (Quadrature<dim-1> (unit_support_points));
+ }
+
+ // now create the object with which
+ // we will generate the normal
+ // vectors
+ hp::FEFaceValues<dim,spacedim> x_fe_face_values (mapping_collection,
+ fe_collection,
+ face_quadrature_collection,
+ update_q_points);
+
+ // have a map that stores normal
+ // vectors for each vector-dof
+ // tuple we want to
+ // constrain. since we can get at
+ // the same vector dof tuple more
+ // than once (for example if it is
+ // located at a vertex that we
+ // visit from all adjacent cells),
+ // we will want to average later on
+ // the normal vectors computed on
+ // different cells as described in
+ // the documentation of this
+ // function. however, we can only
+ // average if the contributions
+ // came from different cells,
+ // whereas we want to constrain
+ // twice or more in case the
+ // contributions came from
+ // different faces of the same cell
+ // (i.e. constrain not just the
+ // *average normal direction* but
+ // *all normal directions* we
+ // find). consequently, we also
+ // have to store which cell a
+ // normal vector was computed on
+ typedef
+ std::multimap<internal::VectorDoFTuple<dim>,
+ std::pair<Tensor<1,dim>, typename DH<dim,spacedim>::active_cell_iterator> >
+ DoFToNormalsMap;
+
+ DoFToNormalsMap dof_to_normals_map;
+
+ // now loop over all cells and all faces
+ typename DH<dim,spacedim>::active_cell_iterator
+ cell = dof_handler.begin_active(),
+ endc = dof_handler.end();
+ for (; cell!=endc; ++cell)
+ if (!cell->is_artificial())
+ for (unsigned int face_no=0; face_no < GeometryInfo<dim>::faces_per_cell;
+ ++face_no)
+ if (boundary_ids.find(cell->face(face_no)->boundary_indicator())
+ != boundary_ids.end())
+ {
+ const FiniteElement<dim>& fe = cell->get_fe ();
+ typename DH<dim,spacedim>::face_iterator face = cell->face(face_no);
+
+ // get the indices of the
+ // dofs on this cell...
+ face_dofs.resize (fe.dofs_per_face);
+ face->get_dof_indices (face_dofs, cell->active_fe_index());
+
+ x_fe_face_values.reinit (cell, face_no);
+ const FEFaceValues<dim> &fe_values = x_fe_face_values.get_present_fe_values();
+
+ // then identify which of
+ // them correspond to the
+ // selected set of vector
+ // components
+ for (unsigned int i=0; i<face_dofs.size(); ++i)
+ if (fe.face_system_to_component_index(i).first ==
+ first_vector_component)
+ {
+ // find corresponding other
+ // components of vector
+ internal::VectorDoFTuple<dim> vector_dofs;
+ vector_dofs.dof_indices[0] = face_dofs[i];
+
+ for (unsigned int k=0; k<fe.dofs_per_face; ++k)
+ if ((k != i)
+ &&
+ (face_quadrature_collection[cell->active_fe_index()].point(k) ==
+ face_quadrature_collection[cell->active_fe_index()].point(i))
+ &&
+ (fe.face_system_to_component_index(k).first >=
+ first_vector_component)
+ &&
+ (fe.face_system_to_component_index(k).first <
+ first_vector_component + dim))
+ vector_dofs.dof_indices[fe.face_system_to_component_index(k).first -
+ first_vector_component]
+ = face_dofs[k];
+
+ for (unsigned int d=0; d<dim; ++d)
+ Assert (vector_dofs.dof_indices[d] < dof_handler.n_dofs(),
+ ExcInternalError());
+
+ // we need the normal
+ // vector on this face. we
+ // know that it is a vector
+ // of length 1 but at least
+ // with higher order
+ // mappings it isn't always
+ // possible to guarantee
+ // that each component is
+ // exact up to zero
+ // tolerance. in
+ // particular, as shown in
+ // the deal.II/no_flux_06
+ // test, if we just take
+ // the normal vector as
+ // given by the fe_values
+ // object, we can get
+ // entries in the normal
+ // vectors of the unit cube
+ // that have entries up to
+ // several times 1e-14.
+ //
+ // the problem with this is
+ // that this later yields
+ // constraints that are
+ // circular (e.g., in the
+ // testcase, we get
+ // constraints of the form
+ //
+ // x22 = 2.93099e-14*x21 + 2.93099e-14*x23
+ // x21 = -2.93099e-14*x22 + 2.93099e-14*x21
+ //
+ // in both of these
+ // constraints, the small
+ // numbers should be zero
+ // and the constraints
+ // should simply be
+ // x22 = x21 = 0
+ //
+ // to achieve this, we
+ // utilize that we know
+ // that the normal vector
+ // has (or should have)
+ // length 1 and that we can
+ // simply set small
+ // elements to zero
+ // (without having to check
+ // that they are small
+ // *relative to something
+ // else*). we do this and
+ // then normalize the
+ // length of the vector
+ // back to one, just to be
+ // on the safe side
+ Point<dim> normal_vector
+ = (cell->face(face_no)->get_boundary()
+ .normal_vector (cell->face(face_no),
+ fe_values.quadrature_point(i)));
+ Assert (std::fabs(normal_vector.norm() - 1) < 1e-14,
+ ExcInternalError());
+ for (unsigned int d=0; d<dim; ++d)
+ if (std::fabs(normal_vector[d]) < 1e-13)
+ normal_vector[d] = 0;
+ normal_vector /= normal_vector.norm();
+
+ // now enter the
+ // (dofs,(normal_vector,cell))
+ // entry into the map
+ dof_to_normals_map
+ .insert (std::make_pair (vector_dofs,
+ std::make_pair (normal_vector,
+ cell)));
+ }
+ }
+
+ // Now do something with the
+ // collected information. To this
+ // end, loop through all sets of
+ // pairs (dofs,normal_vector) and
+ // identify which entries belong to
+ // the same set of dofs and then do
+ // as described in the
+ // documentation, i.e. either
+ // average the normal vector or
+ // don't for this particular set of
+ // dofs
+ typename DoFToNormalsMap::const_iterator
+ p = dof_to_normals_map.begin();
+
+ while (p != dof_to_normals_map.end())
+ {
+ // first find the range of entries in
+ // the multimap that corresponds to the
+ // same vector-dof tuple. as usual, we
+ // define the range half-open. the
+ // first entry of course is 'p'
+ typename DoFToNormalsMap::const_iterator same_dof_range[2]
+ = { p };
+ for (++p; p != dof_to_normals_map.end(); ++p)
+ if (p->first != same_dof_range[0]->first)
+ {
+ same_dof_range[1] = p;
+ break;
+ }
+ if (p == dof_to_normals_map.end())
+ same_dof_range[1] = dof_to_normals_map.end();
+
+ // now compute the reverse mapping: for
+ // each of the cells that contributed
+ // to the current set of vector dofs,
+ // add up the normal vectors. the
+ // values of the map are pairs of
+ // normal vectors and number of cells
+ // that have contributed
+ typedef
+ std::map
+ <typename DH<dim,spacedim>::active_cell_iterator,
+ std::pair<Tensor<1,dim>, unsigned int> >
+ CellToNormalsMap;
+
+ CellToNormalsMap cell_to_normals_map;
+ for (typename DoFToNormalsMap::const_iterator
+ q = same_dof_range[0];
+ q != same_dof_range[1]; ++q)
+ if (cell_to_normals_map.find (q->second.second)
+ == cell_to_normals_map.end())
+ cell_to_normals_map[q->second.second]
+ = std::make_pair (q->second.first, 1U);
+ else
+ {
+ const Tensor<1,dim> old_normal
+ = cell_to_normals_map[q->second.second].first;
+ const unsigned int old_count
+ = cell_to_normals_map[q->second.second].second;
+
+ Assert (old_count > 0, ExcInternalError());
+
+ // in the same entry,
+ // store again the now
+ // averaged normal vector
+ // and the new count
+ cell_to_normals_map[q->second.second]
+ = std::make_pair ((old_normal * old_count + q->second.first) / (old_count + 1),
+ old_count + 1);
+ }
+
+ Assert (cell_to_normals_map.size() >= 1, ExcInternalError());
+
+ // count the maximum number of
+ // contributions from each cell
+ unsigned int max_n_contributions_per_cell = 1;
+ for (typename CellToNormalsMap::const_iterator
+ x = cell_to_normals_map.begin();
+ x != cell_to_normals_map.end(); ++x)
+ max_n_contributions_per_cell
+ = std::max (max_n_contributions_per_cell,
+ x->second.second);
+
+ // verify that each cell can have only
+ // contributed at most dim times, since
+ // that is the maximum number of faces
+ // that come together at a single place
+ Assert (max_n_contributions_per_cell <= dim, ExcInternalError());
+
+ switch (max_n_contributions_per_cell)
+ {
+ // first deal with the case that a
+ // number of cells all have
+ // registered that they have a
+ // normal vector defined at the
+ // location of a given vector dof,
+ // and that each of them have
+ // encountered this vector dof
+ // exactly once while looping over
+ // all their faces. as stated in
+ // the documentation, this is the
+ // case where we want to simply
+ // average over all normal vectors
+ case 1:
+ {
+
+ // compute the average
+ // normal vector from all
+ // the ones that have the
+ // same set of dofs. we
+ // could add them up and
+ // divide them by the
+ // number of additions,
+ // or simply normalize
+ // them right away since
+ // we want them to have
+ // unit length anyway
+ Tensor<1,dim> normal;
+ for (typename CellToNormalsMap::const_iterator
+ x = cell_to_normals_map.begin();
+ x != cell_to_normals_map.end(); ++x)
+ normal += x->second.first;
+ normal /= normal.norm();
+
+ // normalize again
+ for (unsigned int d=0; d<dim; ++d)
+ if (std::fabs(normal[d]) < 1e-13)
+ normal[d] = 0;
+ normal /= normal.norm();
+
+ // then construct constraints
+ // from this:
+ const internal::VectorDoFTuple<dim> &
+ dof_indices = same_dof_range[0]->first;
+ internal::add_constraint (dof_indices, normal,
+ constraints);
+
+ break;
+ }
+
+
+ // this is the slightly
+ // more complicated case
+ // that a single cell has
+ // contributed with exactly
+ // DIM normal vectors to
+ // the same set of vector
+ // dofs. this is what
+ // happens in a corner in
+ // 2d and 3d (but not on an
+ // edge in 3d, where we
+ // have only 2, i.e. <DIM,
+ // contributions. Here we
+ // do not want to average
+ // the normal
+ // vectors. Since we have
+ // DIM contributions, let's
+ // assume (and verify) that
+ // they are in fact all
+ // linearly independent; in
+ // that case, all vector
+ // components are
+ // constrained and we need
+ // to set them to zero
+ case dim:
+ {
+ // assert that indeed
+ // only a single cell has
+ // contributed
+ Assert (cell_to_normals_map.size() == 1,
+ ExcInternalError());
+
+ // check linear
+ // independence by
+ // computing the
+ // determinant of the
+ // matrix created from
+ // all the normal
+ // vectors. if they are
+ // linearly independent,
+ // then the determinant
+ // is nonzero. if they
+ // are orthogonal, then
+ // the matrix is in fact
+ // equal to 1 (since they
+ // are all unit vectors);
+ // make sure the
+ // determinant is larger
+ // than 1e-3 to avoid
+ // cases where cells are
+ // degenerate
+ {
+ Tensor<2,dim> t;
+
+ typename DoFToNormalsMap::const_iterator x = same_dof_range[0];
+ for (unsigned int i=0; i<dim; ++i, ++x)
+ for (unsigned int j=0; j<dim; ++j)
+ t[i][j] = x->second.first[j];
+
+ Assert (std::fabs(determinant (t)) > 1e-3,
+ ExcMessage("Found a set of normal vectors that are nearly collinear."));
+ }
+
+ // so all components of
+ // this vector dof are
+ // constrained. enter
+ // this into the
+ // constraint matrix
+ //
+ // ignore dofs already
+ // constrained
+ for (unsigned int i=0; i<dim; ++i)
+ if (!constraints.is_constrained (same_dof_range[0]
+ ->first.dof_indices[i])
+ &&
+ constraints.can_store_line(
+ same_dof_range[0]->first.dof_indices[i]))
+ {
+ constraints.add_line (same_dof_range[0]->first.dof_indices[i]);
+ // no add_entries here
+ }
+
+ break;
+ }
+
+
+ // this is the case of an
+ // edge contribution in 3d,
+ // i.e. the vector is
+ // constrained in two
+ // directions but not the
+ // third.
+ default:
+ {
+ Assert (dim >= 3, ExcNotImplemented());
+ Assert (max_n_contributions_per_cell == 2, ExcInternalError());
+
+ // as described in the
+ // documentation, let us
+ // first collect what
+ // each of the cells
+ // contributed at the
+ // current point. we use
+ // a std::list instead of
+ // a std::set (which
+ // would be more natural)
+ // because std::set
+ // requires that the
+ // stored elements are
+ // comparable with
+ // operator<
+ typedef
+ std::map<typename DH<dim,spacedim>::active_cell_iterator, std::list<Tensor<1,dim> > >
+ CellContributions;
+ CellContributions cell_contributions;
+
+ for (typename DoFToNormalsMap::const_iterator
+ q = same_dof_range[0];
+ q != same_dof_range[1]; ++q)
+ cell_contributions[q->second.second].push_back (q->second.first);
+ Assert (cell_contributions.size() >= 1, ExcInternalError());
+
+ // now for each cell that
+ // has contributed
+ // determine the number
+ // of normal vectors it
+ // has contributed. we
+ // currently only
+ // implement if this is
+ // dim-1 for all cells
+ // (if a single cell has
+ // contributed dim, or if
+ // all adjacent cells
+ // have contributed 1
+ // normal vector, this is
+ // already handled above)
+ //
+ // for each contributing
+ // cell compute the
+ // tangential vector that
+ // remains unconstrained
+ std::list<Tensor<1,dim> > tangential_vectors;
+ for (typename CellContributions::const_iterator
+ contribution = cell_contributions.begin();
+ contribution != cell_contributions.end();
+ ++contribution)
+ {
+ Assert (contribution->second.size() == dim-1, ExcNotImplemented());
+
+ Tensor<1,dim> normals[dim-1];
+ {
+ unsigned int index=0;
+ for (typename std::list<Tensor<1,dim> >::const_iterator
+ t = contribution->second.begin();
+ t != contribution->second.end();
+ ++t, ++index)
+ normals[index] = *t;
+ Assert (index == dim-1, ExcInternalError());
+ }
+
+ // calculate the
+ // tangent as the
+ // outer product of
+ // the normal
+ // vectors. since
+ // these vectors do
+ // not need to be
+ // orthogonal (think,
+ // for example, the
+ // case of the
+ // deal.II/no_flux_07
+ // test: a sheared
+ // cube in 3d, with
+ // Q2 elements, where
+ // we have
+ // constraints from
+ // the two normal
+ // vectors of two
+ // faces of the
+ // sheared cube that
+ // are not
+ // perpendicular to
+ // each other), we
+ // have to normalize
+ // the outer product
+ Tensor<1,dim> tangent;
+ switch (dim)
+ {
+ case 3:
+ // take
+ // cross
+ // product
+ // between
+ // normals[0]
+ // and
+ // normals[1]. write
+ // it in
+ // the
+ // current
+ // form
+ // (with
+ // [dim-2])
+ // to make
+ // sure
+ // that
+ // compilers
+ // don't
+ // warn
+ // about
+ // out-of-bounds
+ // accesses
+ // -- the
+ // warnings
+ // are
+ // bogus
+ // since we
+ // get here
+ // only for
+ // dim==3,
+ // but at
+ // least
+ // one
+ // isn't
+ // quite
+ // smart
+ // enough
+ // to
+ // notice
+ // this and
+ // warns
+ // when
+ // compiling
+ // the
+ // function
+ // in 2d
+ cross_product (tangent, normals[0], normals[dim-2]);
+ break;
+ default:
+ Assert (false, ExcNotImplemented());
+ }
+
+ Assert (std::fabs (tangent.norm()) > 1e-12,
+ ExcMessage("Two normal vectors from adjacent faces are almost "
+ "parallel."));
+ tangent /= tangent.norm();
+
+ tangential_vectors.push_back (tangent);
+ }
+
+ // go through the list of
+ // tangents and make sure
+ // that they all roughly
+ // point in the same
+ // direction as the first
+ // one (i.e. have an
+ // angle less than 90
+ // degrees); if they
+ // don't then flip their
+ // sign
+ {
+ const Tensor<1,dim> first_tangent = tangential_vectors.front();
+ typename std::list<Tensor<1,dim> >::iterator
+ t = tangential_vectors.begin();
+ ++t;
+ for (; t != tangential_vectors.end(); ++t)
+ if (*t * first_tangent < 0)
+ *t *= -1;
+ }
+
+ // now compute the
+ // average tangent and
+ // normalize it
+ Tensor<1,dim> average_tangent;
+ for (typename std::list<Tensor<1,dim> >::const_iterator
+ t = tangential_vectors.begin();
+ t != tangential_vectors.end();
+ ++t)
+ average_tangent += *t;
+ average_tangent /= average_tangent.norm();
+
+ // now all that is left
+ // is that we add the
+ // constraints that the
+ // vector is parallel
+ // to the tangent
+ const internal::VectorDoFTuple<dim> &
+ dof_indices = same_dof_range[0]->first;
+ internal::add_tangentiality_constraints (dof_indices,
+ average_tangent,
+ constraints);
+ }
+ }
+ }
+ }
+
+
+
+ namespace internal
+ {
+ template <int dim, class InVector, class OutVector, class DH, int spacedim>
+ static
+ void
+ do_integrate_difference (const dealii::hp::MappingCollection<dim,spacedim> &mapping,
+ const DH &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const dealii::hp::QCollection<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight,
+ const double exponent_1)
+ {
+ // we mark the "exponent" parameter
+ // to this function "const" since
+ // it is strictly incoming, but we
+ // need to set it to something
+ // different later on, if
+ // necessary, so have a read-write
+ // version of it:
+ double exponent = exponent_1;
+
+ const unsigned int n_components = dof.get_fe().n_components();
+ const bool fe_is_system = (n_components != 1);
+
+ if (weight!=0)
+ {
+ Assert ((weight->n_components==1) || (weight->n_components==n_components),
+ ExcDimensionMismatch(weight->n_components, n_components));
+ }
+
+ difference.reinit (dof.get_tria().n_active_cells());
+
+ switch (norm)
+ {
+ case L2_norm:
+ case H1_seminorm:
+ case H1_norm:
+ exponent = 2.;
+ break;
+ case L1_norm:
+ exponent = 1.;
+ break;
+ default:
+ break;
+ }
+
+ UpdateFlags update_flags = UpdateFlags (update_quadrature_points |
+ update_JxW_values);
+ switch (norm)
+ {
+ case H1_seminorm:
+ case W1p_seminorm:
+ case W1infty_seminorm:
+ update_flags |= UpdateFlags (update_gradients);
+ if(spacedim == dim+1) update_flags |= UpdateFlags (update_normal_vectors);
+
+ break;
+ case H1_norm:
+ case W1p_norm:
+ case W1infty_norm:
+ update_flags |= UpdateFlags (update_gradients);
+ if(spacedim == dim+1) update_flags |= UpdateFlags (update_normal_vectors);
+ // no break!
+ default:
+ update_flags |= UpdateFlags (update_values);
+ break;
+ }
+
+ dealii::hp::FECollection<dim,spacedim> fe_collection (dof.get_fe());
+ dealii::hp::FEValues<dim,spacedim> x_fe_values(mapping, fe_collection, q, update_flags);
+
+ const unsigned int max_n_q_points = q.max_n_quadrature_points ();
+
+ std::vector< dealii::Vector<double> >
+ function_values (max_n_q_points, dealii::Vector<double>(n_components));
+ std::vector<std::vector<Tensor<1,spacedim> > >
+ function_grads (max_n_q_points, std::vector<Tensor<1,spacedim> >(n_components));
+
+ std::vector<double>
+ weight_values (max_n_q_points);
+ std::vector<dealii::Vector<double> >
+ weight_vectors (max_n_q_points, dealii::Vector<double>(n_components));
+
+ std::vector<dealii::Vector<double> >
+ psi_values (max_n_q_points, dealii::Vector<double>(n_components));
+ std::vector<std::vector<Tensor<1,spacedim> > >
+ psi_grads (max_n_q_points, std::vector<Tensor<1,spacedim> >(n_components));
+ std::vector<double>
+ psi_scalar (max_n_q_points);
+
+ // tmp vector when we use the
+ // Function<spacedim> functions for
+ // scalar functions
+ std::vector<double> tmp_values (max_n_q_points);
+ std::vector<Tensor<1,spacedim> > tmp_gradients (max_n_q_points);
+
+ // loop over all cells
+ typename DH::active_cell_iterator cell = dof.begin_active(),
+ endc = dof.end();
+ for (unsigned int index=0; cell != endc; ++cell, ++index)
+ if (cell->is_locally_owned())
+ {
+ double diff=0;
+ // initialize for this cell
+ x_fe_values.reinit (cell);
+
+ const dealii::FEValues<dim, spacedim> &fe_values = x_fe_values.get_present_fe_values ();
+ const unsigned int n_q_points = fe_values.n_quadrature_points;
+
+ // resize all out scratch
+ // arrays to the number of
+ // quadrature points we use
+ // for the present cell
+ function_values.resize (n_q_points,
+ dealii::Vector<double>(n_components));
+ function_grads.resize (n_q_points,
+ std::vector<Tensor<1,spacedim> >(n_components));
+
+ weight_values.resize (n_q_points);
+ weight_vectors.resize (n_q_points,
+ dealii::Vector<double>(n_components));
+
+ psi_values.resize (n_q_points,
+ dealii::Vector<double>(n_components));
+ psi_grads.resize (n_q_points,
+ std::vector<Tensor<1,spacedim> >(n_components));
+ psi_scalar.resize (n_q_points);
+
+ tmp_values.resize (n_q_points);
+ tmp_gradients.resize (n_q_points);
+
+ if (weight!=0)
+ {
+ if (weight->n_components>1)
+ weight->vector_value_list (fe_values.get_quadrature_points(),
+ weight_vectors);
+ else
+ {
+ weight->value_list (fe_values.get_quadrature_points(),
+ weight_values);
+ for (unsigned int k=0;k<n_q_points;++k)
+ weight_vectors[k] = weight_values[k];
+ }
+ }
+ else
+ {
+ for (unsigned int k=0;k<n_q_points;++k)
+ weight_vectors[k] = 1.;
+ }
+
+
+ if (update_flags & update_values)
+ {
+ // first compute the exact solution
+ // (vectors) at the quadrature points
+ // try to do this as efficient as
+ // possible by avoiding a second
+ // virtual function call in case
+ // the function really has only
+ // one component
+ if (fe_is_system)
+ exact_solution.vector_value_list (fe_values.get_quadrature_points(),
+ psi_values);
+ else
+ {
+ exact_solution.value_list (fe_values.get_quadrature_points(),
+ tmp_values);
+ for (unsigned int i=0; i<n_q_points; ++i)
+ psi_values[i](0) = tmp_values[i];
+ }
+
+ // then subtract finite element
+ // fe_function
+ fe_values.get_function_values (fe_function, function_values);
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_values[q] -= function_values[q];
+ }
+
+ // Do the same for gradients, if required
+ if (update_flags & update_gradients)
+ {
+ // try to be a little clever
+ // to avoid recursive virtual
+ // function calls when calling
+ // gradient_list for functions
+ // that are really scalar
+ // functions
+ if (fe_is_system)
+ exact_solution.vector_gradient_list (fe_values.get_quadrature_points(),
+ psi_grads);
+ else
+ {
+ exact_solution.gradient_list (fe_values.get_quadrature_points(),
+ tmp_gradients);
+ for (unsigned int i=0; i<n_q_points; ++i)
+ psi_grads[i][0] = tmp_gradients[i];
+ }
+
+ // then subtract finite element
+ // function_grads. We
+ // need to be careful
+ // in the codimension
+ // one case, since
+ // there we only have
+ // tangential gradients
+ // in the finite
+ // element function,
+ // not the full
+ // gradient. This is
+ // taken care of, by
+ // subtracting the
+ // normal component of
+ // the gradient from
+ // the exact function.
+ fe_values.get_function_grads (fe_function, function_grads);
+ if(update_flags & update_normal_vectors)
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_grads[q][k] -= (function_grads[q][k] +
+ (psi_grads[q][k]* // (f.n) n
+ fe_values.normal_vector(q))*
+ fe_values.normal_vector(q));
+ else
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_grads[q][k] -= function_grads[q][k];
+ }
+
+ switch (norm)
+ {
+ case mean:
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ // Compute values in
+ // quadrature points
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_scalar[q] += psi_values[q](k)
+ * weight_vectors[q](k);
+
+ // Integrate
+ diff = std::inner_product (psi_scalar.begin(), psi_scalar.end(),
+ fe_values.get_JxW_values().begin(),
+ 0.0);
+ break;
+ case Lp_norm:
+ case L1_norm:
+ case W1p_norm:
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ // Compute values in
+ // quadrature points
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_scalar[q] += std::pow(psi_values[q](k)*psi_values[q](k),
+ exponent/2.)
+ * weight_vectors[q](k);
+
+ // Integrate
+ diff = std::inner_product (psi_scalar.begin(), psi_scalar.end(),
+ fe_values.get_JxW_values().begin(),
+ 0.0);
+ // Compute the root only,
+ // if no derivative
+ // values are added later
+ if (!(update_flags & update_gradients))
+ diff = std::pow(diff, 1./exponent);
+ break;
+ case L2_norm:
+ case H1_norm:
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ // Compute values in
+ // quadrature points
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_scalar[q] += psi_values[q](k)*psi_values[q](k)
+ * weight_vectors[q](k);
+
+ // Integrate
+ diff = std::inner_product (psi_scalar.begin(), psi_scalar.end(),
+ fe_values.get_JxW_values().begin(),
+ 0.0);
+ // Compute the root only,
+ // if no derivative
+ // values are added later
+ if (norm == L2_norm)
+ diff=std::sqrt(diff);
+ break;
+ case Linfty_norm:
+ case W1infty_norm:
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ {
+ double newval = std::fabs(psi_values[q](k))
+ * weight_vectors[q](k);
+ if (psi_scalar[q]<newval)
+ psi_scalar[q] = newval;
+ }
+ // Maximum on one cell
+ diff = *std::max_element (psi_scalar.begin(), psi_scalar.end());
+ break;
+ case H1_seminorm:
+ case W1p_seminorm:
+ case W1infty_seminorm:
+ break;
+ default:
+ Assert (false, ExcNotImplemented());
+ break;
+ }
+
+ switch (norm)
+ {
+ case W1p_seminorm:
+ case W1p_norm:
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_scalar[q] += std::pow(psi_grads[q][k] * psi_grads[q][k],
+ exponent/2.)
+ * weight_vectors[q](k);
+
+ diff += std::inner_product (psi_scalar.begin(), psi_scalar.end(),
+ fe_values.get_JxW_values().begin(),
+ 0.0);
+ diff = std::pow(diff, 1./exponent);
+ break;
+ case H1_seminorm:
+ case H1_norm:
+ // take square of integrand
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ psi_scalar[q] += (psi_grads[q][k] * psi_grads[q][k])
+ * weight_vectors[q](k);
+
+ // add seminorm to L_2 norm or
+ // to zero
+ diff += std::inner_product (psi_scalar.begin(), psi_scalar.end(),
+ fe_values.get_JxW_values().begin(),
+ 0.0);
+ diff = std::sqrt(diff);
+ break;
+
+ case W1infty_seminorm:
+ case W1infty_norm:
+ std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
+ for (unsigned int k=0; k<n_components; ++k)
+ for (unsigned int q=0; q<n_q_points; ++q)
+ {
+ double t = 0.;
+ for (unsigned int d=0;d<dim;++d)
+ t = std::max(t,std::fabs(psi_grads[q][k][d])
+ * weight_vectors[q](k));
+
+ psi_scalar[q] = std::max(psi_scalar[q],t);
+ }
+
+ // compute seminorm
+ {
+ double t = 0;
+ for (unsigned int i=0;i<psi_scalar.size();++i)
+ t = std::max (t, psi_scalar[i]);
+
+ // then add seminorm to norm if that had previously been
+ // computed
+ diff += t;
+ }
+ break;
+ default:
+ break;
+ }
+ // append result of this cell
+ // to the end of the vector
+ Assert (numbers::is_finite(diff), ExcNumberNotFinite());
+ difference(index) = diff;
+ }
+ else
+ // the cell is a ghost cell
+ // or is artificial. write
+ // a zero into the
+ // corresponding value of
+ // the returned vector
+ difference(index) = 0;
+ }
+
+ } // namespace internal
+
+
+
+
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void
+ integrate_difference (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const Quadrature<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight,
+ const double exponent)
+ {
+ internal
+ ::do_integrate_difference (hp::MappingCollection<dim,spacedim>(mapping),
+ dof, fe_function, exact_solution,
+ difference, hp::QCollection<dim>(q),
+ norm, weight, exponent);
+ }
+
+
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void
+ integrate_difference (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const Quadrature<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight,
+ const double exponent)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ internal
+ ::do_integrate_difference(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
+ dof, fe_function, exact_solution,
+ difference, hp::QCollection<dim>(q),
+ norm, weight, exponent);
+ }
+
+
+
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void
+ integrate_difference (const dealii::hp::MappingCollection<dim,spacedim> &mapping,
+ const dealii::hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const dealii::hp::QCollection<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight,
+ const double exponent)
+ {
+ internal
+ ::do_integrate_difference (hp::MappingCollection<dim,spacedim>(mapping),
+ dof, fe_function, exact_solution,
+ difference, q,
+ norm, weight, exponent);
+ }
+
+
+ template <int dim, class InVector, class OutVector, int spacedim>
+ void
+ integrate_difference (const dealii::hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_solution,
+ OutVector &difference,
+ const dealii::hp::QCollection<dim> &q,
+ const NormType &norm,
+ const Function<spacedim> *weight,
+ const double exponent)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ internal
+ ::do_integrate_difference(hp::StaticMappingQ1<dim>::mapping_collection,
+ dof, fe_function, exact_solution,
+ difference, q,
+ norm, weight, exponent);
+ }
+
+
+
+ template <int dim, class InVector, int spacedim>
+ void
+ point_difference (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_function,
+ Vector<double> &difference,
+ const Point<spacedim> &point)
+ {
+ point_difference(StaticMappingQ1<dim>::mapping,
+ dof,
+ fe_function,
+ exact_function,
+ difference,
+ point);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ void
+ point_difference (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Function<spacedim> &exact_function,
+ Vector<double> &difference,
+ const Point<spacedim> &point)
+ {
+ const FiniteElement<dim>& fe = dof.get_fe();
+
+ Assert(difference.size() == fe.n_components(),
+ ExcDimensionMismatch(difference.size(), fe.n_components()));
+
+ // first find the cell in which this point
+ // is, initialize a quadrature rule with
+ // it, and then a FEValues object
+ const std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
+
+ Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
+ ExcInternalError());
+
+ const Quadrature<dim>
+ quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+ FEValues<dim> fe_values(mapping, fe, quadrature, update_values);
+ fe_values.reinit(cell_point.first);
+
+ // then use this to get at the values of
+ // the given fe_function at this point
+ std::vector<Vector<double> > u_value(1, Vector<double> (fe.n_components()));
+ fe_values.get_function_values(fe_function, u_value);
+
+ if (fe.n_components() == 1)
+ difference(0) = exact_function.value(point);
+ else
+ exact_function.vector_value(point, difference);
+
+ for (unsigned int i=0; i<difference.size(); ++i)
+ difference(i) -= u_value[0](i);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value)
+ {
+
+ point_value (StaticMappingQ1<dim,spacedim>::mapping,
+ dof,
+ fe_function,
+ point,
+ value);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value)
+ {
+ point_value(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
+ dof,
+ fe_function,
+ point,
+ value);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point)
+ {
+ return point_value (StaticMappingQ1<dim,spacedim>::mapping,
+ dof,
+ fe_function,
+ point);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point)
+ {
+ return point_value(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
+ dof,
+ fe_function,
+ point);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value)
+ {
+ const FiniteElement<dim>& fe = dof.get_fe();
+
+ Assert(value.size() == fe.n_components(),
+ ExcDimensionMismatch(value.size(), fe.n_components()));
+
+ // first find the cell in which this point
+ // is, initialize a quadrature rule with
+ // it, and then a FEValues object
+ const std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point
+ = GridTools::find_active_cell_around_point (mapping, dof, point);
+
+ Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
+ ExcInternalError());
+
+ const Quadrature<dim>
+ quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+
+ FEValues<dim> fe_values(mapping, fe, quadrature, update_values);
+ fe_values.reinit(cell_point.first);
+
+ // then use this to get at the values of
+ // the given fe_function at this point
+ std::vector<Vector<double> > u_value(1, Vector<double> (fe.n_components()));
+ fe_values.get_function_values(fe_function, u_value);
+
+ value = u_value[0];
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ void
+ point_value (const hp::MappingCollection<dim, spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point,
+ Vector<double> &value)
+ {
+ const hp::FECollection<dim, spacedim>& fe = dof.get_fe();
+
+ Assert(value.size() == fe.n_components(),
+ ExcDimensionMismatch(value.size(), fe.n_components()));
+
+ // first find the cell in which this point
+ // is, initialize a quadrature rule with
+ // it, and then a FEValues object
+ const std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
+
+ Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
+ ExcInternalError());
+
+ const Quadrature<dim>
+ quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+ hp::FEValues<dim, spacedim> hp_fe_values(mapping, fe, hp::QCollection<dim>(quadrature), update_values);
+ hp_fe_values.reinit(cell_point.first);
+ const FEValues<dim, spacedim>& fe_values = hp_fe_values.get_present_fe_values();
+
+ // then use this to get at the values of
+ // the given fe_function at this point
+ std::vector<Vector<double> > u_value(1, Vector<double> (fe.n_components()));
+ fe_values.get_function_values(fe_function, u_value);
+
+ value = u_value[0];
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point)
+ {
+ const FiniteElement<dim>& fe = dof.get_fe();
+
+ Assert(fe.n_components() == 1,
+ ExcMessage ("Finite element is not scalar as is necessary for this function"));
+
+ // first find the cell in which this point
+ // is, initialize a quadrature rule with
+ // it, and then a FEValues object
+ const std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
+
+ Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
+ ExcInternalError());
+
+ const Quadrature<dim>
+ quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+ FEValues<dim> fe_values(mapping, fe, quadrature, update_values);
+ fe_values.reinit(cell_point.first);
+
+ // then use this to get at the values of
+ // the given fe_function at this point
+ std::vector<double> u_value(1);
+ fe_values.get_function_values(fe_function, u_value);
+
+ return u_value[0];
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ double
+ point_value (const hp::MappingCollection<dim, spacedim> &mapping,
+ const hp::DoFHandler<dim,spacedim> &dof,
+ const InVector &fe_function,
+ const Point<spacedim> &point)
+ {
+ const hp::FECollection<dim, spacedim>& fe = dof.get_fe();
+
+ Assert(fe.n_components() == 1,
+ ExcMessage ("Finite element is not scalar as is necessary for this function"));
+
+ // first find the cell in which this point
+ // is, initialize a quadrature rule with
+ // it, and then a FEValues object
+ const std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+ cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
+
+ Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
+ ExcInternalError());
+
+ const Quadrature<dim>
+ quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
+ hp::FEValues<dim, spacedim> hp_fe_values(mapping, fe, hp::QCollection<dim>(quadrature), update_values);
+ hp_fe_values.reinit(cell_point.first);
+ const FEValues<dim, spacedim>& fe_values = hp_fe_values.get_present_fe_values();
+
+ // then use this to get at the values of
+ // the given fe_function at this point
+ std::vector<double> u_value(1);
+ fe_values.get_function_values(fe_function, u_value);
+
+ return u_value[0];
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ double
+ compute_mean_value (const Mapping<dim, spacedim> &mapping,
+ const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &quadrature,
+ const InVector &v,
+ const unsigned int component)
+ {
+ Assert (v.size() == dof.n_dofs(),
+ ExcDimensionMismatch (v.size(), dof.n_dofs()));
+ Assert (component < dof.get_fe().n_components(),
+ ExcIndexRange(component, 0, dof.get_fe().n_components()));
+
+ FEValues<dim,spacedim> fe(mapping, dof.get_fe(), quadrature,
+ UpdateFlags(update_JxW_values
+ | update_values));
+
+ typename DoFHandler<dim,spacedim>::active_cell_iterator cell;
+ std::vector<Vector<double> > values(quadrature.size(),
+ Vector<double> (dof.get_fe().n_components()));
+
+ double mean = 0.;
+ double area = 0.;
+ // Compute mean value
+ for (cell = dof.begin_active(); cell != dof.end(); ++cell)
+ if (cell->is_locally_owned())
+ {
+ fe.reinit (cell);
+ fe.get_function_values(v, values);
+ for (unsigned int k=0; k< quadrature.size(); ++k)
+ {
+ mean += fe.JxW(k) * values[k](component);
+ area += fe.JxW(k);
+ }
+ }
+
+#if DEAL_II_USE_P4EST
+ // if this was a distributed
+ // DoFHandler, we need to do the
+ // reduction over the entire domain
+ if (const parallel::distributed::Triangulation<dim,spacedim> *
+ p_d_triangulation
+ = dynamic_cast<const parallel::distributed::Triangulation<dim,spacedim> *>(&dof.get_tria()))
+ {
+ double my_values[2] = { mean, area };
+ double global_values[2];
+
+ MPI_Allreduce (&my_values, &global_values, 2, MPI_DOUBLE,
+ MPI_SUM,
+ p_d_triangulation->get_communicator());
+
+ mean = global_values[0];
+ area = global_values[1];
+ }
+#endif
+
+ return (mean/area);
+ }
+
+
+ template <int dim, class InVector, int spacedim>
+ double
+ compute_mean_value (const DoFHandler<dim,spacedim> &dof,
+ const Quadrature<dim> &quadrature,
+ const InVector &v,
+ const unsigned int component)
+ {
+ Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
+ return compute_mean_value(StaticMappingQ1<dim,spacedim>::mapping, dof, quadrature, v, component);
+ }
+}
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
// further information on this license.
//
//---------------------------------------------------------------------------
-#ifndef __deal2__vectors_h
-#define __deal2__vectors_h
-
-
-#include <deal.II/base/config.h>
-#include <deal.II/base/exceptions.h>
-#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/base/point.h>
-#include <deal.II/dofs/function_map.h>
-#include <deal.II/fe/mapping_q.h>
-#include <deal.II/hp/mapping_collection.h>
-
-#include <map>
-#include <vector>
-#include <set>
-
-DEAL_II_NAMESPACE_OPEN
-
-template <int dim> class Function;
-template <int dim> struct FunctionMap;
-template <int dim> class Quadrature;
-template <int dim> class QGauss;
-
-template <typename number> class Vector;
-template <typename number> class FullMatrix;
-template <int dim, int spacedim> class Mapping;
-template <int dim, int spacedim> class DoFHandler;
-template <typename gridtype> class InterGridMap;
-namespace hp
-{
- template <int dim, int spacedim> class DoFHandler;
- template <int dim, int spacedim> class MappingCollection;
- template <int dim> class QCollection;
-}
-class ConstraintMatrix;
-
-
-//TODO: Move documentation of functions to the functions!
-
-/**
- * Provide a namespace which offers some operations on vectors. Among
- * these are assembling of standard vectors, integration of the
- * difference of a finite element solution and a continuous function,
- * interpolations and projections of continuous functions to the
- * finite element space and other operations.
- *
- * @note There exist two versions of almost each function. One with a
- * Mapping argument and one without. If a code uses a mapping
- * different from MappingQ1 the functions <b>with</b> mapping argument
- * should be used. Code that uses only MappingQ1 may also use the
- * functions without Mapping argument. Each of these latter functions
- * create a MappingQ1 object and just call the respective functions
- * with that object as mapping argument. The functions without Mapping
- * argument still exist to ensure backward compatibility. Nevertheless
- * it is advised to change the user's codes to store a specific
- * Mapping object and to use the functions that take this Mapping
- * object as argument. This gives the possibility to easily extend the
- * user codes to work also on mappings of higher degree, this just by
- * exchanging MappingQ1 by, for example, a MappingQ or another Mapping
- * object of interest.
- *
- * <h3>Description of operations</h3>
- *
- * This collection of methods offers the following operations:
- * <ul>
- * <li> Interpolation: assign each degree of freedom in the vector to be
- * the value of the function given as argument. This is identical to
- * saying that the resulting finite element function (which is
- * isomorphic to the output vector) has exact function values in all
- * support points of trial functions. The support point of a trial
- * function is the point where its value equals one, e.g. for linear
- * trial functions the support points are four corners of an
- * element. This function therefore relies on the assumption that a
- * finite element is used for which the degrees of freedom are
- * function values (Lagrange elements) rather than gradients, normal
- * derivatives, second derivatives, etc (Hermite elements, quintic
- * Argyris element, etc.).
- *
- * It seems inevitable that some values of the vector to be created are set
- * twice or even more than that. The reason is that we have to loop over
- * all cells and get the function values for each of the trial functions
- * located thereon. This applies also to the functions located on faces and
- * corners which we thus visit more than once. While setting the value
- * in the vector is not an expensive operation, the evaluation of the
- * given function may be, taking into account that a virtual function has
- * to be called.
- *
- * <li> Projection: compute the <i>L</i><sup>2</sup>-projection of the
- * given function onto the finite element space, i.e. if <i>f</i> is
- * the function to be projected, compute <i>f<sub>h</sub></i> in
- * <i>V<sub>h</sub></i> such that
- * (<i>f<sub>h</sub></i>,<i>v<sub>h</sub></i>)=(<i>f</i>,<i>v<sub>h</sub></i>)
- * for all discrete test functions <i>v<sub>h</sub></i>. This is done
- * through the solution of the linear system of equations <i> M v =
- * f</i> where <i>M</i> is the mass matrix $m_{ij} = \int_\Omega
- * \phi_i(x) \phi_j(x) dx$ and $f_i = \int_\Omega f(x) \phi_i(x)
- * dx$. The solution vector $v$ then is the nodal representation of
- * the projection <i>f<sub>h</sub></i>. The project() functions are
- * used in the step-21 and step-23
- * tutorial programs.
- *
- * In order to get proper results, it be may necessary to treat
- * boundary conditions right. Below are listed some cases where this
- * may be needed. If needed, this is done by <i>L</i><sup>2</sup>-projection of
- * the trace of the given function onto the finite element space
- * restricted to the boundary of the domain, then taking this
- * information and using it to eliminate the boundary nodes from the
- * mass matrix of the whole domain, using the
- * MatrixTools::apply_boundary_values() function. The projection of
- * the trace of the function to the boundary is done with the
- * VectorTools::project_boundary_values() (see below) function,
- * which is called with a map of boundary functions FunctioMap in
- * which all boundary indicators from zero to types::internal_face_boundary_id-1
- * (types::internal_face_boundary_id is used for other purposes,
- * see the Triangulation class documentation) point
- * to the function to be projected. The projection to the boundary
- * takes place using a second quadrature formula on the boundary
- * given to the project() function. The first quadrature formula is
- * used to compute the right hand side and for numerical quadrature
- * of the mass matrix.
- *
- * The projection of the boundary values first, then eliminating
- * them from the global system of equations is not needed
- * usually. It may be necessary if you want to enforce special
- * restrictions on the boundary values of the projected function,
- * for example in time dependent problems: you may want to project
- * the initial values but need consistency with the boundary values
- * for later times. Since the latter are projected onto the boundary
- * in each time step, it is necessary that we also project the
- * boundary values of the initial values, before projecting them to
- * the whole domain.
- *
- * Obviously, the results of the two schemes for projection are
- * different. Usually, when projecting to the boundary first, the
- * <i>L</i><sup>2</sup>-norm of the difference between original
- * function and projection over the whole domain will be larger
- * (factors of five have been observed) while the
- * <i>L</i><sup>2</sup>-norm of the error integrated over the
- * boundary should of course be less. The reverse should also hold
- * if no projection to the boundary is performed.
- *
- * The selection whether the projection to the boundary first is
- * needed is done with the <tt>project_to_boundary_first</tt> flag
- * passed to the function. If @p false is given, the additional
- * quadrature formula for faces is ignored.
- *
- * You should be aware of the fact that if no projection to the boundary
- * is requested, a function with zero boundary values may not have zero
- * boundary values after projection. There is a flag for this especially
- * important case, which tells the function to enforce zero boundary values
- * on the respective boundary parts. Since enforced zero boundary values
- * could also have been reached through projection, but are more economically
- * obtain using other methods, the @p project_to_boundary_first flag is
- * ignored if the @p enforce_zero_boundary flag is set.
- *
- * The solution of the linear system is presently done using a simple CG
- * method without preconditioning and without multigrid. This is clearly not
- * too efficient, but sufficient in many cases and simple to implement. This
- * detail may change in the future.
- *
- * <li> Creation of right hand side vectors:
- * The create_right_hand_side() function computes the vector
- * $f_i = \int_\Omega f(x) \phi_i(x) dx$. This is the same as what the
- * <tt>MatrixCreator::create_*</tt> functions which take a right hand side do,
- * but without assembling a matrix.
- *
- * <li> Creation of right hand side vectors for point sources:
- * The create_point_source_vector() function computes the vector
- * $f_i = \int_\Omega \delta_0(x-x_0) \phi_i(x) dx$.
- *
- * <li> Creation of boundary right hand side vectors: The
- * create_boundary_right_hand_side() function computes the vector
- * $f_i = \int_{\partial\Omega} g(x) \phi_i(x) dx$. This is the
- * right hand side contribution of boundary forces when having
- * inhomogeneous Neumann boundary values in Laplace's equation or
- * other second order operators. This function also takes an
- * optional argument denoting over which parts of the boundary the
- * integration shall extend. If the default argument is used, it is applied
- * to all boundaries.
- *
- * <li> Interpolation of boundary values:
- * The MatrixTools::apply_boundary_values() function takes a list
- * of boundary nodes and their values. You can get such a list by interpolation
- * of a boundary function using the interpolate_boundary_values() function.
- * To use it, you have to
- * specify a list of pairs of boundary indicators (of type <tt>types::boundary_id_t</tt>;
- * see the section in the documentation of the Triangulation class for more
- * details) and the according functions denoting the dirichlet boundary values
- * of the nodes on boundary faces with this boundary indicator.
- *
- * Usually, all other boundary conditions, such as inhomogeneous Neumann values
- * or mixed boundary conditions are handled in the weak formulation. No attempt
- * is made to include these into the process of matrix and vector assembly therefore.
- *
- * Within this function, boundary values are interpolated, i.e. a node is given
- * the point value of the boundary function. In some cases, it may be necessary
- * to use the L2-projection of the boundary function or any other method. For
- * this purpose we refer to the project_boundary_values()
- * function below.
- *
- * You should be aware that the boundary function may be evaluated at nodes
- * on the interior of faces. These, however, need not be on the true
- * boundary, but rather are on the approximation of the boundary represented
- * by the mapping of the unit cell to the real cell. Since this mapping will
- * in most cases not be the exact one at the face, the boundary function is
- * evaluated at points which are not on the boundary and you should make
- * sure that the returned values are reasonable in some sense anyway.
- *
- * In 1d the situation is a bit different since there faces (i.e. vertices) have
- * no boundary indicator. It is assumed that if the boundary indicator zero
- * is given in the list of boundary functions, the left boundary point is to be
- * interpolated while the right boundary point is associated with the boundary
- * index 1 in the map. The respective boundary functions are then evaluated at
- * the place of the respective boundary point.
- *
- * <li> Projection of boundary values:
- * The project_boundary_values() function acts similar to the
- * interpolate_boundary_values() function, apart from the fact that it does
- * not get the nodal values of boundary nodes by interpolation but rather
- * through the <i>L</i><sup>2</sup>-projection of the trace of the function to the boundary.
- *
- * The projection takes place on all boundary parts with boundary
- * indicators listed in the map (FunctioMap::FunctionMap)
- * of boundary functions. These boundary parts may or may not be
- * continuous. For these boundary parts, the mass matrix is
- * assembled using the
- * MatrixTools::create_boundary_mass_matrix() function, as
- * well as the appropriate right hand side. Then the resulting
- * system of equations is solved using a simple CG method (without
- * preconditioning), which is in most cases sufficient for the
- * present purpose.
- *
- * <li> Computing errors:
- * The function integrate_difference() performs the calculation of
- * the error between a given (continuous) reference function and the
- * finite element solution in different norms. The integration is
- * performed using a given quadrature formula and assumes that the
- * given finite element objects equals that used for the computation
- * of the solution.
- *
- * The result is stored in a vector (named @p difference), where each entry
- * equals the given norm of the difference on a cell. The order of entries
- * is the same as a @p cell_iterator takes when started with @p begin_active and
- * promoted with the <tt>++</tt> operator.
- *
- * This data, one number per active cell, can be used to generate
- * graphical output by directly passing it to the DataOut class
- * through the DataOut::add_data_vector function. Alternatively, it
- * can be interpolated to the nodal points of a finite element field
- * using the DoFTools::distribute_cell_to_dof_vector function.
- *
- * Presently, there is the possibility to compute the following values from the
- * difference, on each cell: @p mean, @p L1_norm, @p L2_norm, @p Linfty_norm,
- * @p H1_seminorm and @p H1_norm, see VectorTools::NormType.
- * For the mean difference value, the reference function minus the numerical
- * solution is computed, not the other way round.
- *
- * The infinity norm of the difference on a given cell returns the maximum
- * absolute value of the difference at the quadrature points given by the
- * quadrature formula parameter. This will in some cases not be too good
- * an approximation, since for example the Gauss quadrature formulae do
- * not evaluate the difference at the end or corner points of the cells.
- * You may want to choose a quadrature formula with more quadrature points
- * or one with another distribution of the quadrature points in this case.
- * You should also take into account the superconvergence properties of finite
- * elements in some points: for example in 1D, the standard finite element
- * method is a collocation method and should return the exact value at nodal
- * points. Therefore, the trapezoidal rule should always return a vanishing
- * L-infinity error. Conversely, in 2D the maximum L-infinity error should
- * be located at the vertices or at the center of the cell, which would make
- * it plausible to use the Simpson quadrature rule. On the other hand, there
- * may be superconvergence at Gauss integration points. These examples are not
- * intended as a rule of thumb, rather they are thought to illustrate that the
- * use of the wrong quadrature formula may show a significantly wrong result
- * and care should be taken to chose the right formula.
- *
- * The <i>H</i><sup>1</sup> seminorm is the <i>L</i><sup>2</sup>
- * norm of the gradient of the difference. The square of the full
- * <i>H</i><sup>1</sup> norm is the sum of the square of seminorm
- * and the square of the <i>L</i><sup>2</sup> norm.
- *
- * To get the global <i>L<sup>1</sup></i> error, you have to sum up the
- * entries in @p difference, e.g. using
- * Vector::l1_norm() function. For the global <i>L</i><sup>2</sup>
- * difference, you have to sum up the squares of the entries and
- * take the root of the sum, e.g. using
- * Vector::l2_norm(). These two operations
- * represent the <i>l</i><sub>1</sub> and <i>l</i><sub>2</sub> norms of the vectors, but you need
- * not take the absolute value of each entry, since the cellwise
- * norms are already positive.
- *
- * To get the global mean difference, simply sum up the elements as above.
- * To get the $L_\infty$ norm, take the maximum of the vector elements, e.g.
- * using the Vector::linfty_norm() function.
- *
- * For the global <i>H</i><sup>1</sup> norm and seminorm, the same rule applies as for the
- * <i>L</i><sup>2</sup> norm: compute the <i>l</i><sub>2</sub> norm
- * of the cell error vector.
- *
- * Note that, in the codimension one case, if you ask for a norm
- * that requires the computation of a gradient, then the provided
- * function is automatically projected along the curve, and the
- * difference is only computed on the tangential part of the
- * gradient, since no information is available on the normal
- * component of the gradient anyway.
- * </ul>
- *
- * All functions use the finite element given to the DoFHandler object the last
- * time that the degrees of freedom were distributed over the triangulation. Also,
- * if access to an object describing the exact form of the boundary is needed, the
- * pointer stored within the triangulation object is accessed.
- *
- * @note Instantiations for this template are provided for some vector types,
- * in particular <code>Vector<float>, Vector<double>,
- * BlockVector<float>, BlockVector<double></code>; others can be
- * generated in application code (see the section on @ref Instantiations in
- * the manual).
- *
- * @ingroup numerics
- * @author Wolfgang Bangerth, Ralf Hartmann, Guido Kanschat, 1998, 1999, 2000, 2001
- */
-namespace VectorTools
-{
- /**
- * Denote which norm/integral is
- * to be computed by the
- * integrate_difference()
- * function of this class. The
- * following possibilities are
- * implemented:
- */
- enum NormType
- {
- /**
- * The function or
- * difference of functions
- * is integrated on each
- * cell.
- */
- mean,
- /**
- * The absolute value of
- * the function is
- * integrated.
- */
- L1_norm,
- /**
- * The square of the
- * function is integrated
- * and the the square root
- * of the result is
- * computed on each cell.
- */
- L2_norm,
- /**
- * The absolute value to
- * the <i>p</i>th power is
- * integrated and the pth
- * root is computed on each
- * cell. The exponent
- * <i>p</i> is the last
- * parameter of the
- * function.
- */
- Lp_norm,
- /**
- * The maximum absolute
- * value of the function.
- */
- Linfty_norm,
- /**
- * #L2_norm of the gradient.
- */
- H1_seminorm,
- /**
- * The square of this norm
- * is the square of the
- * #L2_norm plus the square
- * of the #H1_seminorm.
- */
- H1_norm,
- /**
- * #Lp_norm of the gradient.
- */
- W1p_seminorm,
- /**
- * same as #H1_norm for
- * <i>L<sup>p</sup></i>.
- */
- W1p_norm,
- /**
- * #Linfty_norm of the gradient.
- */
- W1infty_seminorm,
- /**
- * same as #H1_norm for
- * <i>L<sup>infty</sup></i>.
- */
- W1infty_norm
-
- };
-/**
- * @name Interpolation and projection
- */
- //@{
- /**
- * Compute the interpolation of
- * @p function at the support
- * points to the finite element
- * space described by the Triangulation
- * and FiniteElement object with which
- * the given DoFHandler argument is
- * initialized. It is assumed that the
- * number of components of
- * @p function matches that of
- * the finite element used by
- * @p dof.
- *
- * Note that you may have to call
- * <tt>hanging_nodes.distribute(vec)</tt>
- * with the hanging nodes from
- * space @p dof afterwards, to
- * make the result continuous
- * again.
- *
- * The template argument <code>DH</code>
- * may either be of type DoFHandler or
- * hp::DoFHandler.
- *
- * See the general documentation
- * of this class for further
- * information.
- *
- * @todo The @p mapping argument should be
- * replaced by a hp::MappingCollection in
- * case of a hp::DoFHandler.
- */
- template <class VECTOR, class DH>
- void interpolate (const Mapping<DH::dimension,DH::space_dimension> &mapping,
- const DH &dof,
- const Function<DH::space_dimension> &function,
- VECTOR &vec);
-
- /**
- * Calls the @p interpolate()
- * function above with
- * <tt>mapping=MappingQ1@<dim>@()</tt>.
- */
- template <class VECTOR, class DH>
- void interpolate (const DH &dof,
- const Function<DH::space_dimension> &function,
- VECTOR &vec);
-
- /**
- * Interpolate different finite
- * element spaces. The
- * interpolation of vector
- * @p data_1 is executed from the
- * FE space represented by
- * @p dof_1 to the vector @p data_2
- * on FE space @p dof_2. The
- * interpolation on each cell is
- * represented by the matrix
- * @p transfer. Curved boundaries
- * are neglected so far.
- *
- * Note that you may have to call
- * <tt>hanging_nodes.distribute(data_2)</tt>
- * with the hanging nodes from
- * space @p dof_2 afterwards, to
- * make the result continuous
- * again.
- *
- * @note Instantiations for this template
- * are provided for some vector types
- * (see the general documentation of the
- * class), but only the same vector for
- * InVector and OutVector. Other
- * combinations must be instantiated by
- * hand.
- */
- template <int dim, class InVector, class OutVector, int spacedim>
- void interpolate (const DoFHandler<dim,spacedim> &dof_1,
- const DoFHandler<dim,spacedim> &dof_2,
- const FullMatrix<double> &transfer,
- const InVector &data_1,
- OutVector &data_2);
-
- /**
- * Gives the interpolation of a
- * @p dof1-function @p u1 to a
- * @p dof2-function @p u2, where @p
- * dof1 and @p dof2 represent
- * different triangulations with a
- * common coarse grid.
- *
- * dof1 and dof2 need to have the
- * same finite element
- * discretization.
- *
- * Note that for continuous
- * elements on grids with hanging
- * nodes (i.e. locally refined
- * grids) this function does not
- * give the expected output.
- * Indeed, the resulting output
- * vector does not necessarily
- * respect continuity
- * requirements at hanging nodes,
- * due to local cellwise
- * interpolation.
- *
- * For this case (continuous
- * elements on grids with hanging
- * nodes), please use the
- * interpolate_to_different_mesh
- * function with an additional
- * ConstraintMatrix argument,
- * see below, or make the field
- * conforming yourself by calling the
- * @p ConstraintsMatrix::distribute
- * function of your hanging node
- * constraints object.
- */
- template <int dim, int spacedim,
- template <int,int> class DH,
- class VECTOR>
- void
- interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
- const VECTOR &u1,
- const DH<dim, spacedim> &dof2,
- VECTOR &u2);
-
- /**
- * Gives the interpolation of a
- * @p dof1-function @p u1 to a
- * @p dof2-function @p u2, where @p
- * dof1 and @p dof2 represent
- * different triangulations with a
- * common coarse grid.
- *
- * dof1 and dof2 need to have the
- * same finite element
- * discretization.
- *
- * @p constraints is a hanging node
- * constraints object corresponding
- * to @p dof2. This object is
- * particularly important when
- * interpolating onto continuous
- * elements on grids with hanging
- * nodes (locally refined grids):
- * Without it - due to cellwise
- * interpolation - the resulting
- * output vector does not necessarily
- * respect continuity requirements
- * at hanging nodes.
- */
- template <int dim, int spacedim,
- template <int,int> class DH,
- class VECTOR>
- void
- interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
- const VECTOR &u1,
- const DH<dim, spacedim> &dof2,
- const ConstraintMatrix &constraints,
- VECTOR &u2);
-
-
- /**
- * The same function as above, but
- * takes an InterGridMap object
- * directly as a parameter. Useful
- * for interpolating several vectors
- * at the same time.
- *
- * @p intergridmap
- * has to be initialized via
- * InterGridMap::make_mapping pointing
- * from a source DoFHandler to a
- * destination DoFHandler.
- */
- template <int dim, int spacedim,
- template <int,int> class DH,
- class VECTOR>
- void
- interpolate_to_different_mesh (const InterGridMap<DH<dim, spacedim> > &intergridmap,
- const VECTOR &u1,
- const ConstraintMatrix &constraints,
- VECTOR &u2);
-
- /**
- * Compute the projection of
- * @p function to the finite element space.
- *
- * By default, projection to the boundary
- * and enforcement of zero boundary values
- * are disabled. The ordering of arguments
- * to this function is such that you need
- * not give a second quadrature formula if
- * you don't want to project to the
- * boundary first, but that you must if you
- * want to do so.
- *
- * This function needs the mass
- * matrix of the finite element
- * space on the present grid. To
- * this end, the mass matrix is
- * assembled exactly using
- * MatrixTools::create_mass_matrix. This
- * function performs numerical
- * quadrature using the given
- * quadrature rule; you should
- * therefore make sure that the
- * given quadrature formula is
- * also sufficient for the
- * integration of the mass
- * matrix.
- *
- * See the general documentation of this
- * class for further information.
- *
- * In 1d, the default value of
- * the boundary quadrature
- * formula is an invalid object
- * since integration on the
- * boundary doesn't happen in
- * 1d.
- */
- template <int dim, class VECTOR, int spacedim>
- void project (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const ConstraintMatrix &constraints,
- const Quadrature<dim> &quadrature,
- const Function<spacedim> &function,
- VECTOR &vec,
- const bool enforce_zero_boundary = false,
- const Quadrature<dim-1> &q_boundary = (dim > 1 ?
- QGauss<dim-1>(2) :
- Quadrature<dim-1>(0)),
- const bool project_to_boundary_first = false);
-
- /**
- * Calls the project()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, class VECTOR, int spacedim>
- void project (const DoFHandler<dim,spacedim> &dof,
- const ConstraintMatrix &constraints,
- const Quadrature<dim> &quadrature,
- const Function<spacedim> &function,
- VECTOR &vec,
- const bool enforce_zero_boundary = false,
- const Quadrature<dim-1> &q_boundary = (dim > 1 ?
- QGauss<dim-1>(2) :
- Quadrature<dim-1>(0)),
- const bool project_to_boundary_first = false);
-
- /**
- * Prepare Dirichlet boundary
- * conditions. Make up the list
- * of degrees of freedom subject
- * to Dirichlet boundary
- * conditions and the values to
- * be assigned to them, by
- * interpolation around the
- * boundary. If the
- * @p boundary_values contained
- * values before, the new ones
- * are added, or the old ones
- * overwritten if a node of the
- * boundary part to be used
- * was already in the
- * map of boundary values.
- *
- * The parameter
- * @p function_map argument
- * provides a list of boundary
- * indicators to be handled by
- * this function and corresponding
- * boundary value functions. The
- * keys of this map
- * correspond to the number
- * @p boundary_indicator of the
- * face. types::internal_face_boundary_id
- * is an illegal value for this key since
- * it is reserved for interior faces.
- *
- * The flags in the last
- * parameter, @p component_mask
- * denote which components of the
- * finite element space shall be
- * interpolated. If it is left as
- * specified by the default value
- * (i.e. an empty array), all
- * components are
- * interpolated. If it is
- * different from the default
- * value, it is assumed that the
- * number of entries equals the
- * number of components in the
- * boundary functions and the
- * finite element, and those
- * components in the given
- * boundary function will be used
- * for which the respective flag
- * was set in the component mask.
- * See also @ref GlossComponentMask.
- *
- * It is assumed that the number
- * of components of the function
- * in @p boundary_function matches that
- * of the finite element used by
- * @p dof.
- *
- * If the finite element used has
- * shape functions that are
- * non-zero in more than one
- * component (in deal.II speak:
- * they are non-primitive), then
- * these components can presently
- * not be used for interpolating
- * boundary values. Thus, the
- * elements in the component mask
- * corresponding to the
- * components of these
- * non-primitive shape functions
- * must be @p false.
- *
- * See the general doc for more
- * information.
- */
- template <class DH>
- void
- interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
- const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
- /**
- * @deprecated This function exists mainly
- * for backward compatibility.
- *
- * Same function as above, but
- * taking only one pair of
- * boundary indicator and
- * corresponding boundary
- * function. Calls the other
- * function with remapped
- * arguments.
- *
- */
- template <class DH>
- void
- interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
- const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
- /**
- * Calls the other
- * interpolate_boundary_values()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <class DH>
- void
- interpolate_boundary_values (const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
-
- /**
- * Calls the other
- * interpolate_boundary_values()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <class DH>
- void
- interpolate_boundary_values (const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
-
- /**
- * Insert the (algebraic) constraints due
- * to Dirichlet boundary conditions into
- * a ConstraintMatrix @p
- * constraints. This function identifies
- * the degrees of freedom subject to
- * Dirichlet boundary conditions, adds
- * them to the list of constrained DoFs
- * in @p constraints and sets the
- * respective inhomogeneity to the value
- * interpolated around the boundary. If
- * this routine encounters a DoF that
- * already is constrained (for instance
- * by a hanging node constraint, see
- * below, or any other type of
- * constraint, e.g. from periodic
- * boundary conditions), the old setting
- * of the constraint (dofs the entry is
- * constrained to, inhomogeneities) is
- * kept and nothing happens.
- *
- * @note When combining adaptively
- * refined meshes with hanging node
- * constraints and boundary conditions
- * like from the current function within
- * one ConstraintMatrix object, the
- * hanging node constraints should always
- * be set first, and then the boundary
- * conditions since boundary conditions
- * are not set in the second operation on
- * degrees of freedom that are already
- * constrained. This makes sure that the
- * discretization remains conforming as
- * is needed. See the discussion on
- * conflicting constraints in the module
- * on @ref constraints .
- *
- * The parameter @p boundary_component
- * corresponds to the number @p
- * boundary_indicator of the face.
- * types::internal_face_boundary_id
- * is an illegal value, since it is
- * reserved for interior faces.
- *
- * The flags in the last parameter, @p
- * component_mask (see @ref GlossComponentMask)
- * denote which
- * components of the finite element
- * space shall be interpolated. If it
- * is left as specified by the default
- * value (i.e. an empty array), all
- * components are interpolated. If it
- * is different from the default value,
- * it is assumed that the number of
- * entries equals the number of
- * components in the boundary functions
- * and the finite element, and those
- * components in the given boundary
- * function will be used for which the
- * respective flag was set in the
- * component mask.
- *
- * It is assumed that the number of
- * components of the function in @p
- * boundary_function matches that of
- * the finite element used by @p dof.
- *
- * If the finite element used has shape
- * functions that are non-zero in more
- * than one component (in deal.II
- * speak: they are non-primitive), then
- * these components can presently not
- * be used for interpolating boundary
- * values. Thus, the elements in the
- * component mask corresponding to the
- * components of these non-primitive
- * shape functions must be @p false.
- *
- * See the general doc for more
- * information.
- *
- * @ingroup constraints
- */
- template <class DH>
- void
- interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
- const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
- /**
- * @deprecated This function exists
- * only for backward compatibility.
- *
- * Same function as above, but taking
- * only one pair of boundary indicator
- * and corresponding boundary
- * function. Calls the other function
- * with remapped arguments.
- *
- * @ingroup constraints
- */
- template <class DH>
- void
- interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
- const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
- /**
- * Calls the other
- * interpolate_boundary_values()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- *
- * @ingroup constraints
- */
- template <class DH>
- void
- interpolate_boundary_values (const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
-
- /**
- * Calls the other
- * interpolate_boundary_values()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- *
- * @ingroup constraints
- */
- template <class DH>
- void
- interpolate_boundary_values (const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask = std::vector<bool>());
-
-
- /**
- * Project a function to the boundary
- * of the domain, using the given
- * quadrature formula for the faces. If
- * the @p boundary_values contained
- * values before, the new ones are
- * added, or the old one overwritten if
- * a node of the boundary part to be
- * projected on already was in the
- * variable.
- *
- * If @p component_mapping is empty, it
- * is assumed that the number of
- * components of @p boundary_function
- * matches that of the finite element
- * used by @p dof.
- *
- * In 1d, projection equals
- * interpolation. Therefore,
- * interpolate_boundary_values is
- * called.
- *
- * @arg @p boundary_values: the result
- * of this function, a map containing
- * all indices of degrees of freedom at
- * the boundary (as covered by the
- * boundary parts in @p
- * boundary_functions) and the computed
- * dof value for this degree of
- * freedom.
- *
- * @arg @p component_mapping: if the
- * components in @p boundary_functions
- * and @p dof do not coincide, this
- * vector allows them to be
- * remapped. If the vector is not
- * empty, it has to have one entry for
- * each component in @p dof. This entry
- * is the component number in @p
- * boundary_functions that should be
- * used for this component in @p
- * dof. By default, no remapping is
- * applied.
- */
- template <int dim, int spacedim>
- void project_boundary_values (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- const Quadrature<dim-1> &q,
- std::map<unsigned int,double> &boundary_values,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
- /**
- * Calls the project_boundary_values()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void project_boundary_values (const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_function,
- const Quadrature<dim-1> &q,
- std::map<unsigned int,double> &boundary_values,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
- /**
- * Project a function to the boundary of
- * the domain, using the given quadrature
- * formula for the faces. This function
- * identifies the degrees of freedom
- * subject to Dirichlet boundary
- * conditions, adds them to the list of
- * constrained DoFs in @p constraints and
- * sets the respective inhomogeneity to
- * the value resulting from the
- * projection operation. If this routine
- * encounters a DoF that already is
- * constrained (for instance by a hanging
- * node constraint, see below, or any
- * other type of constraint, e.g. from
- * periodic boundary conditions), the old
- * setting of the constraint (dofs the
- * entry is constrained to,
- * inhomogeneities) is kept and nothing
- * happens.
- *
- * @note When combining adaptively
- * refined meshes with hanging node
- * constraints and boundary conditions
- * like from the current function within
- * one ConstraintMatrix object, the
- * hanging node constraints should always
- * be set first, and then the boundary
- * conditions since boundary conditions
- * are not set in the second operation on
- * degrees of freedom that are already
- * constrained. This makes sure that the
- * discretization remains conforming as
- * is needed. See the discussion on
- * conflicting constraints in the module
- * on @ref constraints .
- *
- * If @p component_mapping is empty, it
- * is assumed that the number of
- * components of @p boundary_function
- * matches that of the finite element
- * used by @p dof.
- *
- * In 1d, projection equals
- * interpolation. Therefore,
- * interpolate_boundary_values is
- * called.
- *
- * @arg @p component_mapping: if the
- * components in @p boundary_functions
- * and @p dof do not coincide, this
- * vector allows them to be
- * remapped. If the vector is not
- * empty, it has to have one entry for
- * each component in @p dof. This entry
- * is the component number in @p
- * boundary_functions that should be
- * used for this component in @p
- * dof. By default, no remapping is
- * applied.
- *
- * @ingroup constraints
- */
- template <int dim, int spacedim>
- void project_boundary_values (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- const Quadrature<dim-1> &q,
- ConstraintMatrix &constraints,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
- /**
- * Calls the project_boundary_values()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- *
- * @ingroup constraints
- */
- template <int dim, int spacedim>
- void project_boundary_values (const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_function,
- const Quadrature<dim-1> &q,
- ConstraintMatrix &constraints,
- std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
-
-
- /**
- * Compute constraints that correspond to
- * boundary conditions of the form
- * $\vec{n}\times\vec{u}=\vec{n}\times\vec{f}$,
- * i.e. the tangential components of $u$
- * and $f$ shall coincide.
- *
- * If the ConstraintMatrix @p constraints
- * contained values or other
- * constraints before, the new ones are
- * added or the old ones overwritten,
- * if a node of the boundary part to be
- * used was already in the list of
- * constraints. This is handled by
- * using inhomogeneous constraints. Please
- * note that when combining adaptive meshes
- * and this kind of constraints, the
- * Dirichlet conditions should be set
- * first, and then completed by hanging
- * node constraints, in order to make sure
- * that the discretization remains
- * consistent. See the discussion on
- * conflicting constraints in the
- * module on @ref constraints .
- *
- * This function is explecitly written to
- * use with the FE_Nedelec elements. Thus
- * it throws an exception, if it is
- * called with other finite elements.
- *
- * The second argument of this function
- * denotes the first vector component in
- * the finite element that corresponds to
- * the vector function that you want to
- * constrain. For example, if we want to
- * solve Maxwell's equations in 3d and the
- * finite element has components
- * $(E_x,E_y,E_z,B_x,B_y,B_z)$ and we want
- * the boundary conditions
- * $\vec{n}\times\vec{B}=\vec{n}\times\vec{f}$,
- * then @p first_vector_component would
- * be 3. Vectors are implicitly assumed to
- * have exactly <code>dim</code> components
- * that are ordered in the same way as we
- * usually order the coordinate directions,
- * i.e. $x$-, $y$-, and finally
- * $z$-component.
- *
- * The parameter @p boundary_component
- * corresponds to the number
- * @p boundary_indicator of the face.
- * types::internal_face_boundary_id
- * is an illegal value, since it is
- * reserved for interior faces.
- *
- * The last argument is denoted to compute
- * the normal vector $\vec{n}$ at the
- * boundary points.
- *
- * <h4>Computing constraints</h4>
- *
- * To compute the constraints we use
- * projection-based interpolation as proposed
- * in Solin, Segeth and Dolezel
- * (Higher order finite elements, Chapman&Hall,
- * 2004) on every face located at the
- * boundary.
- *
- * First one projects $\vec{f}$ on the
- * lowest-order edge shape functions. Then the
- * remaining part $(I-P_0)\vec{f}$ of the
- * function is projected on the remaining
- * higher-order edge shape functions. In the
- * last step we project $(I-P_0-P_e)\vec{f}$
- * on the bubble shape functions defined on
- * the face.
- *
- * @ingroup constraints
- */
- template <int dim>
- void project_boundary_values_curl_conforming (const DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const Mapping<dim>& mapping = StaticMappingQ1<dim>::mapping);
-
- /**
- * Same as above for the hp-namespace.
- *
- * @ingroup constraints
- */
- template <int dim>
- void project_boundary_values_curl_conforming (const hp::DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const hp::MappingCollection<dim, dim>& mapping_collection = hp::StaticMappingQ1<dim>::mapping_collection);
-
-
- /**
- * Compute constraints that correspond to
- * boundary conditions of the form
- * $\vec{n}^T\vec{u}=\vec{n}^T\vec{f}$,
- * i.e. the normal components of $u$
- * and $f$ shall coincide.
- *
- * If the ConstraintMatrix @p constraints
- * contained values or other
- * constraints before, the new ones are
- * added or the old ones overwritten,
- * if a node of the boundary part to be
- * used was already in the list of
- * constraints. This is handled by
- * using inhomogeneous constraints. Please
- * note that when combining adaptive meshes
- * and this kind of constraints, the
- * Dirichlet conditions should be set
- * first, and then completed by hanging
- * node constraints, in order to make sure
- * that the discretization remains
- * consistent. See the discussion on
- * conflicting constraints in the
- * module on @ref constraints .
- *
- * This function is explecitly written to
- * use with the FE_RaviartThomas elements.
- * Thus it throws an exception, if it is
- * called with other finite elements.
- *
- * The second argument of this function
- * denotes the first vector component in
- * the finite element that corresponds to
- * the vector function that you want to
- * constrain. Vectors are implicitly
- * assumed to have exactly
- * <code>dim</code> components that are
- * ordered in the same way as we
- * usually order the coordinate directions,
- * i.e. $x$-, $y$-, and finally
- * $z$-component.
- *
- * The parameter @p boundary_component
- * corresponds to the number
- * @p boundary_indicator of the face.
- * types::internal_face_boundary_id
- * is an illegal value, since it is
- * reserved for interior faces.
- *
- * The last argument is denoted to compute
- * the normal vector $\vec{n}$ at the
- * boundary points.
- *
- * <h4>Computing constraints</h4>
- *
- * To compute the constraints we use
- * interpolation operator proposed
- * in Brezzi, Fortin (Mixed and Hybrid
- * (Finite Element Methods, Springer,
- * 1991) on every face located at the
- * boundary.
- *
- * @ingroup constraints
- */
- template<int dim>
- void project_boundary_values_div_conforming (const DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const Mapping<dim>& mapping = StaticMappingQ1<dim>::mapping);
-
- /**
- * Same as above for the hp-namespace.
- *
- * @ingroup constraints
- */
- template<int dim>
- void project_boundary_values_div_conforming (const hp::DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const hp::MappingCollection<dim, dim>& mapping_collection = hp::StaticMappingQ1<dim>::mapping_collection);
-
-
- /**
- * Compute the constraints that
- * correspond to boundary conditions of
- * the form $\vec n \cdot \vec u=0$,
- * i.e. no normal flux if $\vec u$ is a
- * vector-valued quantity. These
- * conditions have exactly the form
- * handled by the ConstraintMatrix class,
- * so instead of creating a map between
- * boundary degrees of freedom and
- * corresponding value, we here create a
- * list of constraints that are written
- * into a ConstraintMatrix. This object
- * may already have some content, for
- * example from hanging node constraints,
- * that remains untouched. These
- * constraints have to be applied to the
- * linear system like any other such
- * constraints, i.e. you have to condense
- * the linear system with the constraints
- * before solving, and you have to
- * distribute the solution vector
- * afterwards.
- *
- * The use of this function is
- * explained in more detail in
- * step-31. It
- * doesn't make much sense in 1d,
- * so the function throws an
- * exception in that case.
- *
- * The second argument of this
- * function denotes the first
- * vector component in the finite
- * element that corresponds to
- * the vector function that you
- * want to constrain. For
- * example, if we were solving a
- * Stokes equation in 2d and the
- * finite element had components
- * $(u,v,p)$, then @p
- * first_vector_component would
- * be zero. On the other hand, if
- * we solved the Maxwell
- * equations in 3d and the finite
- * element has components
- * $(E_x,E_y,E_z,B_x,B_y,B_z)$
- * and we want the boundary
- * condition $\vec n\cdot \vec
- * B=0$, then @p
- * first_vector_component would
- * be 3. Vectors are implicitly
- * assumed to have exactly
- * <code>dim</code> components
- * that are ordered in the same
- * way as we usually order the
- * coordinate directions,
- * i.e. $x$-, $y$-, and finally
- * $z$-component. The function
- * assumes, but can't check, that
- * the vector components in the
- * range
- * <code>[first_vector_component,first_vector_component+dim)</code>
- * come from the same base finite
- * element. For example, in the
- * Stokes example above, it would
- * not make sense to use a
- * <code>FESystem@<dim@>(FE_Q@<dim@>(2),
- * 1, FE_Q@<dim@>(1), dim)</code>
- * (note that the first velocity
- * vector component is a $Q_2$
- * element, whereas all the other
- * ones are $Q_1$ elements) as
- * there would be points on the
- * boundary where the
- * $x$-velocity is defined but no
- * corresponding $y$- or
- * $z$-velocities.
- *
- * The third argument denotes the set of
- * boundary indicators on which the
- * boundary condition is to be
- * enforced. Note that, as explained
- * below, this is one of the few
- * functions where it makes a difference
- * where we call the function multiple
- * times with only one boundary
- * indicator, or whether we call the
- * function onces with the whole set of
- * boundary indicators at once.
- *
- * The mapping argument is used to
- * compute the boundary points where the function
- * needs to request the normal vector $\vec n$
- * from the boundary description.
- *
- * @note When combining adaptively
- * refined meshes with hanging node
- * constraints and boundary conditions
- * like from the current function within
- * one ConstraintMatrix object, the
- * hanging node constraints should always
- * be set first, and then the boundary
- * conditions since boundary conditions
- * are not set in the second operation on
- * degrees of freedom that are already
- * constrained. This makes sure that the
- * discretization remains conforming as
- * is needed. See the discussion on
- * conflicting constraints in the module
- * on @ref constraints .
- *
- *
- * <h4>Computing constraints in 2d</h4>
- *
- * Computing these constraints requires
- * some smarts. The main question
- * revolves around the question what the
- * normal vector is. Consider the
- * following situation:
- * <p ALIGN="center">
- * @image html no_normal_flux_1.png
- * </p>
- *
- * Here, we have two cells that use a
- * bilinear mapping
- * (i.e. MappingQ1). Consequently, for
- * each of the cells, the normal vector
- * is perpendicular to the straight
- * edge. If the two edges at the top and
- * right are meant to approximate a
- * curved boundary (as indicated by the
- * dashed line), then neither of the two
- * computed normal vectors are equal to
- * the exact normal vector (though they
- * approximate it as the mesh is refined
- * further). What is worse, if we
- * constrain $\vec n \cdot \vec u=0$ at
- * the common vertex with the normal
- * vector from both cells, then we
- * constrain the vector $\vec u$ with
- * respect to two linearly independent
- * vectors; consequently, the constraint
- * would be $\vec u=0$ at this point
- * (i.e. <i>all</i> components of the
- * vector), which is not what we wanted.
- *
- * To deal with this situation, the
- * algorithm works in the following way:
- * at each point where we want to
- * constrain $\vec u$, we first collect
- * all normal vectors that adjacent cells
- * might compute at this point. We then
- * do not constrain $\vec n \cdot \vec
- * u=0$ for <i>each</i> of these normal
- * vectors but only for the
- * <i>average</i> of the normal
- * vectors. In the example above, we
- * therefore record only a single
- * constraint $\vec n \cdot \vec {\bar
- * u}=0$, where $\vec {\bar u}$ is the
- * average of the two indicated normal
- * vectors.
- *
- * Unfortunately, this is not quite
- * enough. Consider the situation here:
- *
- * <p ALIGN="center">
- * @image html no_normal_flux_2.png
- * </p>
- *
- * If again the top and right edges
- * approximate a curved boundary, and the
- * left boundary a separate boundary (for
- * example straight) so that the exact
- * boundary has indeed a corner at the
- * top left vertex, then the above
- * construction would not work: here, we
- * indeed want the constraint that $\vec
- * u$ at this point (because the normal
- * velocities with respect to both the
- * left normal as well as the top normal
- * vector should be zero), not that the
- * velocity in the direction of the
- * average normal vector is zero.
- *
- * Consequently, we use the following
- * heuristic to determine whether all
- * normal vectors computed at one point
- * are to be averaged: if two normal
- * vectors for the same point are
- * computed on <i>different</i> cells,
- * then they are to be averaged. This
- * covers the first example above. If
- * they are computed from the same cell,
- * then the fact that they are different
- * is considered indication that they
- * come from different parts of the
- * boundary that might be joined by a
- * real corner, and must not be averaged.
- *
- * There is one problem with this
- * scheme. If, for example, the same
- * domain we have considered above, is
- * discretized with the following mesh,
- * then we get into trouble:
- *
- * <p ALIGN="center">
- * @image html no_normal_flux_2.png
- * </p>
- *
- * Here, the algorithm assumes that the
- * boundary does not have a corner at the
- * point where faces $F1$ and $F2$ join
- * because at that point there are two
- * different normal vectors computed from
- * different cells. If you intend for
- * there to be a corner of the exact
- * boundary at this point, the only way
- * to deal with this is to assign the two
- * parts of the boundary different
- * boundary indicators and call this
- * function twice, once for each boundary
- * indicators; doing so will yield only
- * one normal vector at this point per
- * invocation (because we consider only
- * one boundary part at a time), with the
- * result that the normal vectors will
- * not be averaged.
- *
- *
- * <h4>Computing constraints in 3d</h4>
- *
- * The situation is more
- * complicated in 3d. Consider
- * the following case where we
- * want to compute the
- * constraints at the marked
- * vertex:
- *
- * <p ALIGN="center">
- * @image html no_normal_flux_4.png
- * </p>
- *
- * Here, we get four different
- * normal vectors, one from each
- * of the four faces that meet at
- * the vertex. Even though they
- * may form a complete set of
- * vectors, it is not our intent
- * to constrain all components of
- * the vector field at this
- * point. Rather, we would like
- * to still allow tangential
- * flow, where the term
- * "tangential" has to be
- * suitably defined.
- *
- * In a case like this, the
- * algorithm proceeds as follows:
- * for each cell that has
- * computed two tangential
- * vectors at this point, we
- * compute the unconstrained
- * direction as the outer product
- * of the two tangential vectors
- * (if necessary multiplied by
- * minus one). We then average
- * these tangential
- * vectors. Finally, we compute
- * constraints for the two
- * directions perpendicular to
- * this averaged tangential
- * direction.
- *
- * There are cases where one cell
- * contributes two tangential
- * directions and another one
- * only one; for example, this
- * would happen if both top and
- * front faces of the left cell
- * belong to the boundary
- * selected whereas only the top
- * face of the right cell belongs
- * to it. This case is not
- * currently implemented.
- *
- *
- * <h4>Results</h4>
- *
- * Because it makes for good
- * pictures, here are two images
- * of vector fields on a circle
- * and on a sphere to which the
- * constraints computed by this
- * function have been applied:
- *
- * <p ALIGN="center">
- * @image html no_normal_flux_5.png
- * @image html no_normal_flux_6.png
- * </p>
- *
- * The vectors fields are not
- * physically reasonable but the
- * tangentiality constraint is
- * clearly enforced. The fact
- * that the vector fields are
- * zero at some points on the
- * boundary is an artifact of the
- * way it is created, it is not
- * constrained to be zero at
- * these points.
- *
- * @ingroup constraints
- */
- template <int dim, template <int, int> class DH, int spacedim>
-
- void
- compute_no_normal_flux_constraints (const DH<dim,spacedim> &dof_handler,
- const unsigned int first_vector_component,
- const std::set<types::boundary_id_t> &boundary_ids,
- ConstraintMatrix &constraints,
- const Mapping<dim, spacedim> &mapping = StaticMappingQ1<dim>::mapping);
+//this file is deprecated, use vector_tools.h instead
- //@}
- /**
- * @name Assembling of right hand sides
- */
- //@{
-
- /**
- * Create a right hand side
- * vector. Prior content of the
- * given @p rhs_vector vector is
- * deleted.
- *
- * See the general documentation of this
- * class for further information.
- */
- template <int dim, int spacedim>
- void create_right_hand_side (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector);
-
- /**
- * Calls the create_right_hand_side()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void create_right_hand_side (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector);
-
- /**
- * Like the previous set of functions,
- * but for hp objects.
- */
- template <int dim, int spacedim>
- void create_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector);
-
- /**
- * Like the previous set of functions,
- * but for hp objects.
- */
- template <int dim, int spacedim>
- void create_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector);
-
- /**
- * Create a right hand side
- * vector for a point source at point @p p.
- * Prior content of the
- * given @p rhs_vector vector is
- * deleted.
- *
- * See the general documentation of this
- * class for further information.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const Mapping<dim,spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector);
-
- /**
- * Calls the create_point_source_vector()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector);
-
- /**
- * Like the previous set of functions,
- * but for hp objects.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector);
-
- /**
- * Like the previous set of functions,
- * but for hp objects. The function uses
- * the default Q1 mapping object. Note
- * that if your hp::DoFHandler uses any
- * active fe index other than zero, then
- * you need to call the function above
- * that provides a mapping object for
- * each active fe index.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const hp::DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector);
-
- /**
- * Create a right hand side
- * vector for a point source at point @p p
- * for vector-valued finite elements.
- * Prior content of the
- * given @p rhs_vector vector is
- * deleted.
- *
- * See the general documentation of this
- * class for further information.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const Mapping<dim,spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector);
-
- /**
- * Calls the create_point_source_vector()
- * function for vector-valued finite elements,
- * see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector);
-
- /**
- * Like the previous set of functions,
- * but for hp objects.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector);
-
- /**
- * Like the previous set of functions,
- * but for hp objects. The function uses
- * the default Q1 mapping object. Note
- * that if your hp::DoFHandler uses any
- * active fe index other than zero, then
- * you need to call the function above
- * that provides a mapping object for
- * each active fe index.
- */
- template <int dim, int spacedim>
- void create_point_source_vector(const hp::DoFHandler<dim,spacedim> &dof,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector);
-
- /**
- * Create a right hand side
- * vector from boundary
- * forces. Prior content of the
- * given @p rhs_vector vector is
- * deleted.
- *
- * See the general documentation of this
- * class for further information.
- */
- template <int dim, int spacedim>
- void create_boundary_right_hand_side (const Mapping<dim,spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim-1> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
-
- /**
- * Calls the
- * create_boundary_right_hand_side()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, int spacedim>
- void create_boundary_right_hand_side (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim-1> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
-
- /**
- * Same as the set of functions above,
- * but for hp objects.
- */
- template <int dim, int spacedim>
- void create_boundary_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim-1> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
-
- /**
- * Calls the
- * create_boundary_right_hand_side()
- * function, see above, with a
- * single Q1 mapping as
- * collection. This function
- * therefore will only work if
- * the only active fe index in
- * use is zero.
- */
- template <int dim, int spacedim>
- void create_boundary_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof,
- const hp::QCollection<dim-1> &q,
- const Function<spacedim> &rhs,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
-
- //@}
- /**
- * @name Evaluation of functions
- * and errors
- */
- //@{
-
- /**
- * Compute the error of the
- * finite element solution.
- * Integrate the difference
- * between a reference function
- * which is given as a continuous
- * function object, and a finite
- * element function.
- *
- * The value of @p exponent is
- * used for computing $L^p$-norms
- * and $W^{1,p}$-norms.
- *
- * The additional argument @p
- * weight allows to evaluate
- * weighted norms. The weight
- * function may be scalar,
- * establishing a weight in the
- * domain for all components
- * equally. This may be used, for
- * instance, to only integrates
- * over parts of the domain.
- *
- * The weight function may also
- * be vector-valued, with as many
- * components as the finite
- * element function: Then,
- * different components get
- * different weights. A typical
- * application is when the error
- * with respect to only one or a
- * subset of the solution
- * variables is to be computed,
- * in which the other components
- * would have weight values equal
- * to zero. The
- * ComponentSelectFunction class
- * is particularly useful for
- * this purpose.
- *
- * The weight function is
- * expected to be positive, but
- * negative values are not
- * filtered. By default, no
- * weighting function is given,
- * i.e. weight=1 in the whole
- * domain for all vector
- * components uniformly. Note that
- * one often wants to compute the
- * error in only one component of
- * a solution vector (e.g. for the
- * pressure in the Stokes system,
- * when the solution vector also
- * contains the velocity components).
- * In these cases, the weight should
- * be a <i>mask</i>, i.e., be a
- * vector function for which individual
- * components are either zero or one.
- * This can easily be achieved using
- * the ComponentSelectFunction
- * class.
- *
- * It is assumed that the number
- * of components of the function
- * @p exact_solution matches that
- * of the finite element used by
- * @p dof.
- *
- * See the general documentation of this
- * class for more information.
- *
- * @note Instantiations for this template
- * are provided for some vector types
- * (see the general documentation of the
- * class), but only for InVectors as in
- * the documentation of the class,
- * OutVector only Vector<double> and
- * Vector<float>.
- */
- template <int dim, class InVector, class OutVector, int spacedim>
- void integrate_difference (const Mapping<dim,spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const Quadrature<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight=0,
- const double exponent = 2.);
-
- /**
- * Calls the integrate_difference()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, class InVector, class OutVector, int spacedim>
- void integrate_difference (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const Quadrature<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight=0,
- const double exponent = 2.);
-
- template <int dim, class InVector, class OutVector, int spacedim>
- void integrate_difference (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const hp::QCollection<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight=0,
- const double exponent = 2.);
-
- /**
- * Calls the integrate_difference()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, class InVector, class OutVector, int spacedim>
- void integrate_difference (const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const hp::QCollection<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight=0,
- const double exponent = 2.);
-
- /**
- * Point error evaluation. Find
- * the first cell containing the
- * given point and compute the
- * difference of a (possibly
- * vector-valued) finite element
- * function and a continuous
- * function (with as many vector
- * components as the finite
- * element) at this point.
- *
- * This is a wrapper function
- * using a Q1-mapping for cell
- * boundaries to call the other
- * point_difference() function.
- */
- template <int dim, class InVector, int spacedim>
- void point_difference (const DoFHandler<dim,spacedim>& dof,
- const InVector& fe_function,
- const Function<spacedim>& exact_solution,
- Vector<double>& difference,
- const Point<spacedim>& point);
-
- /**
- * Point error evaluation. Find
- * the first cell containing the
- * given point and compute the
- * difference of a (possibly
- * vector-valued) finite element
- * function and a continuous
- * function (with as many vector
- * components as the finite
- * element) at this point.
- *
- * Compared with the other
- * function of the same name,
- * this function uses an
- * arbitrary mapping to evaluate
- * the difference.
- */
- template <int dim, class InVector, int spacedim>
- void point_difference (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim>& dof,
- const InVector& fe_function,
- const Function<spacedim>& exact_solution,
- Vector<double>& difference,
- const Point<spacedim>& point);
-
- /**
- * Evaluate a possibly
- * vector-valued finite element
- * function defined by the given
- * DoFHandler and nodal vector at
- * the given point, and return
- * the (vector) value of this
- * function through the last
- * argument.
- *
- * This is a wrapper function
- * using a Q1-mapping for cell
- * boundaries to call the other
- * point_difference() function.
- */
- template <int dim, class InVector, int spacedim>
- void
- point_value (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value);
-
- /**
- * Same as above for hp.
- */
-
- template <int dim, class InVector, int spacedim>
- void
- point_value (const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value);
-
-
- /**
- * Evaluate a scalar finite
- * element function defined by
- * the given DoFHandler and nodal
- * vector at the given point, and
- * return the value of this
- * function.
- *
- * Compared with the other
- * function of the same name,
- * this is a wrapper function using
- * a Q1-mapping for cells.
- *
- * This function is used in the
- * "Possibilities for extensions" part of
- * the results section of @ref step_3
- * "step-3".
- */
- template <int dim, class InVector, int spacedim>
- double
- point_value (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point);
-
- /**
- * Same as above for hp.
- */
-
- template <int dim, class InVector, int spacedim>
- double
- point_value (const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point);
-
- /**
- * Evaluate a possibly
- * vector-valued finite element
- * function defined by the given
- * DoFHandler and nodal vector at
- * the given point, and return
- * the (vector) value of this
- * function through the last
- * argument.
- *
- * Compared with the other
- * function of the same name,
- * this function uses an arbitrary
- * mapping to evaluate the difference.
- */
- template <int dim, class InVector, int spacedim>
- void
- point_value (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value);
-
- /**
- * Same as above for hp.
- */
-
- template <int dim, class InVector, int spacedim>
- void
- point_value (const hp::MappingCollection<dim, spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value);
-
- /**
- * Evaluate a scalar finite
- * element function defined by
- * the given DoFHandler and nodal
- * vector at the given point, and
- * return the value of this
- * function.
- *
- * Compared with the other
- * function of the same name,
- * this function uses an arbitrary
- * mapping to evaluate the difference.
- */
- template <int dim, class InVector, int spacedim>
- double
- point_value (const Mapping<dim,spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point);
-
- /**
- * Same as above for hp.
- */
-
- template <int dim, class InVector, int spacedim>
- double
- point_value (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point);
-
- //@}
- /**
- * Mean value operations
- */
- //@{
-
- /**
- * Subtract the (algebraic) mean value
- * from a vector. This function is most
- * frequently used as a mean-value filter
- * for Stokes: The pressure in Stokes'
- * equations with only Dirichlet
- * boundaries for the velocities is only
- * determined up to a constant. This
- * function allows to subtract the mean
- * value of the pressure. It is usually
- * called in a preconditioner and
- * generates updates with mean value
- * zero. The mean value is computed as
- * the mean value of the degrees of
- * freedom values as given by the input
- * vector; they are not weighted by the
- * area of cells, i.e. the mean is
- * computed as $\sum_i v_i$, rather than
- * as $\int_\Omega v(x) = \int_\Omega
- * \sum_i v_i \phi_i(x)$. The latter can
- * be obtained from the
- * VectorTools::compute_mean_function,
- * however.
- *
- * Apart from the vector @p v to operate
- * on, this function takes a boolean mask
- * that has a true entry for
- * every component for which the mean
- * value shall be computed and later
- * subtracted. The argument is used to
- * denote which components of the
- * solution vector correspond to the
- * pressure, and avoid touching all other
- * components of the vector, such as the
- * velocity components.
- *
- * @note In the context of using this
- * function to filter out the kernel of
- * an operator (such as the null space of
- * the Stokes operator that consists of
- * the constant pressures), this function
- * only makes sense for finite elements
- * for which the null space indeed
- * consists of the vector
- * $(1,1,\ldots,1)^T$. This is the case
- * for example for the usual Lagrange
- * elements where the sum of all shape
- * functions equals the function that is
- * constant one. However, it is not true
- * for some other functions: for example,
- * for the FE_DGP element (another valid
- * choice for the pressure in Stokes
- * discretizations), the first shape
- * function on each cell is constant
- * while further elements are $L_2$
- * orthogonal to it (on the reference
- * cell); consequently, the sum of all
- * shape functions is not equal to one,
- * and the vector that is associated with
- * the constant mode is not equal to
- * $(1,1,\ldots,1)^T$. For such elements,
- * a different procedure has to be used
- * when subtracting the mean value.
- */
- void subtract_mean_value(Vector<double> &v,
- const std::vector<bool> &p_select);
-
- /**
- * Compute the mean value of one
- * component of the solution.
- *
- * This function integrates the
- * chosen component over the
- * whole domain and returns the
- * result, i.e. it computes
- * $\int_\Omega [u_h(x)]_c \; dx$
- * where $c$ is the vector component
- * and $u_h$ is the function
- * representation of the nodal
- * vector given as fourth
- * argument. The integral is evaluated
- * numerically using the quadrature
- * formula given as third argument.
- *
- * This function is used in the
- * "Possibilities for extensions" part of
- * the results section of @ref step_3
- * "step-3".
- *
- * @note The function is most often used
- * when solving a problem whose solution
- * is only defined up to a constant, for
- * example a pure Neumann problem or the
- * pressure in a Stokes or Navier-Stokes
- * problem. In both cases, subtracting
- * the mean value as computed by the
- * current function, from the nodal
- * vector does not generally yield the
- * desired result of a finite element
- * function with mean value zero. In
- * fact, it only works for Lagrangian
- * elements. For all other elements, you
- * will need to compute the mean value
- * and subtract it right inside the
- * evaluation routine.
- */
- template <int dim, class InVector, int spacedim>
- double compute_mean_value (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &quadrature,
- const InVector &v,
- const unsigned int component);
-
- /**
- * Calls the other compute_mean_value()
- * function, see above, with
- * <tt>mapping=MappingQ1@<dim@>()</tt>.
- */
- template <int dim, class InVector, int spacedim>
- double compute_mean_value (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &quadrature,
- const InVector &v,
- const unsigned int component);
- //@}
-
- /**
- * Exception
- */
- DeclException0 (ExcInvalidBoundaryIndicator);
- /**
- * Exception
- */
- DeclException0 (ExcNonInterpolatingFE);
- /**
- * Exception
- */
- DeclException0 (ExcNoComponentSelected);
-}
-
+#ifndef __deal2__vectors_h
+#define __deal2__vectors_h
-DEAL_II_NAMESPACE_CLOSE
+#include <deal.II/numerics/vector_tools.h>
#endif
//
//---------------------------------------------------------------------------
+//this file is deprecated, use vector_tools.templates.h instead
+
#ifndef _deal2__vectors_templates_h
#define _deal2__vectors_templates_h
-#include <deal.II/base/derivative_form.h>
-#include <deal.II/base/function.h>
-#include <deal.II/base/quadrature.h>
-#include <deal.II/lac/vector.h>
-#include <deal.II/lac/block_vector.h>
-#include <deal.II/lac/parallel_vector.h>
-#include <deal.II/lac/parallel_block_vector.h>
-#include <deal.II/lac/petsc_vector.h>
-#include <deal.II/lac/petsc_block_vector.h>
-#include <deal.II/lac/trilinos_vector.h>
-#include <deal.II/lac/trilinos_block_vector.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/vector_memory.h>
-#include <deal.II/lac/filtered_matrix.h>
-#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/grid/tria_iterator.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_boundary.h>
-#include <deal.II/grid/grid_tools.h>
-#include <deal.II/grid/intergrid_map.h>
-#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/fe/fe.h>
-#include <deal.II/fe/fe_nedelec.h>
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-#include <deal.II/fe/fe_tools.h>
-#include <deal.II/fe/fe_values.h>
-#include <deal.II/fe/fe_nothing.h>
-#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/hp/dof_handler.h>
-#include <deal.II/hp/fe_values.h>
-#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
-
-#include <numeric>
-#include <algorithm>
-#include <vector>
-#include <cmath>
-#include <limits>
-#include <set>
-
-DEAL_II_NAMESPACE_OPEN
-
-
-namespace VectorTools
-{
-
- template <class VECTOR, class DH>
- void interpolate (const Mapping<DH::dimension,DH::space_dimension> &mapping,
- const DH &dof,
- const Function<DH::space_dimension> &function,
- VECTOR &vec)
- {
- const unsigned int dim=DH::dimension;
-
- Assert (dof.get_fe().n_components() == function.n_components,
- ExcDimensionMismatch(dof.get_fe().n_components(),
- function.n_components));
-
- const hp::FECollection<DH::dimension,DH::space_dimension> fe (dof.get_fe());
- const unsigned int n_components = fe.n_components();
- const bool fe_is_system = (n_components != 1);
-
- typename DH::active_cell_iterator cell = dof.begin_active(),
- endc = dof.end();
-
- // For FESystems many of the
- // unit_support_points will appear
- // multiple times, as a point may be
- // unit_support_point for several of the
- // components of the system. The following
- // is rather complicated, but at least
- // attempts to avoid evaluating the
- // vectorfunction multiple times at the
- // same point on a cell.
- //
- // note that we have to set up all of the
- // following arrays for each of the
- // elements in the FECollection (which
- // means only once if this is for a regular
- // DoFHandler)
- std::vector<std::vector<Point<dim> > > unit_support_points (fe.size());
- for (unsigned int fe_index=0; fe_index<fe.size(); ++fe_index)
- {
- unit_support_points[fe_index] = fe[fe_index].get_unit_support_points();
- Assert (unit_support_points[fe_index].size() != 0,
- ExcNonInterpolatingFE());
- }
-
-
- // Find the support points on a cell that
- // are mentioned multiple times in
- // unit_support_points. Mark the first
- // representative of each support point
- // mentioned multiple times by appending
- // its dof index to dofs_of_rep_points.
- // Each multiple point gets to know the dof
- // index of its representative point by the
- // dof_to_rep_dof_table.
-
- // the following vector collects all dofs i,
- // 0<=i<fe.dofs_per_cell, for that
- // unit_support_points[i]
- // is a representative one. i.e.
- // the following vector collects all rep dofs.
- // the position of a rep dof within this vector
- // is called rep index.
- std::vector<std::vector<unsigned int> > dofs_of_rep_points(fe.size());
- // the following table converts a dof i
- // to the rep index.
- std::vector<std::vector<unsigned int> > dof_to_rep_index_table(fe.size());
-
- std::vector<unsigned int> n_rep_points (fe.size(), 0);
-
- for (unsigned int fe_index=0; fe_index<fe.size(); ++fe_index)
- {
- for (unsigned int i=0; i<fe[fe_index].dofs_per_cell; ++i)
- {
- bool representative=true;
- // the following loop is looped
- // the other way round to get
- // the minimal effort of
- // O(fe.dofs_per_cell) for multiple
- // support points that are placed
- // one after the other.
- for (unsigned int j=dofs_of_rep_points[fe_index].size(); j>0; --j)
- if (unit_support_points[fe_index][i]
- == unit_support_points[fe_index][dofs_of_rep_points[fe_index][j-1]])
- {
- dof_to_rep_index_table[fe_index].push_back(j-1);
- representative=false;
- break;
- }
-
- if (representative)
- {
- // rep_index=dofs_of_rep_points.size()
- dof_to_rep_index_table[fe_index].push_back(dofs_of_rep_points[fe_index].size());
- // dofs_of_rep_points[rep_index]=i
- dofs_of_rep_points[fe_index].push_back(i);
- ++n_rep_points[fe_index];
- }
- }
-
- Assert(dofs_of_rep_points[fe_index].size()==n_rep_points[fe_index],
- ExcInternalError());
- Assert(dof_to_rep_index_table[fe_index].size()==fe[fe_index].dofs_per_cell,
- ExcInternalError());
- }
-
- const unsigned int max_rep_points = *std::max_element (n_rep_points.begin(),
- n_rep_points.end());
- std::vector<unsigned int> dofs_on_cell (fe.max_dofs_per_cell());
- std::vector<Point<DH::space_dimension> > rep_points (max_rep_points);
-
- // get space for the values of the
- // function at the rep support points.
- //
- // have two versions, one for system fe
- // and one for scalar ones, to take the
- // more efficient one respectively
- std::vector<std::vector<double> > function_values_scalar(fe.size());
- std::vector<std::vector<Vector<double> > > function_values_system(fe.size());
-
- // Make a quadrature rule from support points
- // to feed it into FEValues
- hp::QCollection<dim> support_quadrature;
- for (unsigned int fe_index=0; fe_index<fe.size(); ++fe_index)
- support_quadrature.push_back (Quadrature<dim>(unit_support_points[fe_index]));
-
- // Transformed support points are computed by
- // FEValues
- hp::MappingCollection<dim,DH::space_dimension> mapping_collection (mapping);
-
- hp::FEValues<dim, DH::space_dimension> fe_values (mapping_collection,
- fe, support_quadrature, update_quadrature_points);
-
- for (; cell!=endc; ++cell)
- if (cell->is_locally_owned())
- {
- const unsigned int fe_index = cell->active_fe_index();
-
- // for each cell:
- // get location of finite element
- // support_points
- fe_values.reinit(cell);
- const std::vector<Point<DH::space_dimension> >& support_points =
- fe_values.get_present_fe_values().get_quadrature_points();
-
- // pick out the representative
- // support points
- rep_points.resize (dofs_of_rep_points[fe_index].size());
- for (unsigned int j=0; j<dofs_of_rep_points[fe_index].size(); ++j)
- rep_points[j] = support_points[dofs_of_rep_points[fe_index][j]];
-
- // get indices of the dofs on this cell
- dofs_on_cell.resize (fe[fe_index].dofs_per_cell);
- cell->get_dof_indices (dofs_on_cell);
-
-
- if (fe_is_system)
- {
- // get function values at
- // these points. Here: get
- // all components
- function_values_system[fe_index]
- .resize (n_rep_points[fe_index],
- Vector<double> (fe[fe_index].n_components()));
- function.vector_value_list (rep_points,
- function_values_system[fe_index]);
- // distribute the function
- // values to the global
- // vector
- for (unsigned int i=0; i<fe[fe_index].dofs_per_cell; ++i)
- {
- const unsigned int component
- = fe[fe_index].system_to_component_index(i).first;
- const unsigned int rep_dof=dof_to_rep_index_table[fe_index][i];
- vec(dofs_on_cell[i])
- = function_values_system[fe_index][rep_dof](component);
- }
- }
- else
- {
- // get first component only,
- // which is the only component
- // in the function anyway
- function_values_scalar[fe_index].resize (n_rep_points[fe_index]);
- function.value_list (rep_points,
- function_values_scalar[fe_index],
- 0);
- // distribute the function
- // values to the global
- // vector
- for (unsigned int i=0; i<fe[fe_index].dofs_per_cell; ++i)
- vec(dofs_on_cell[i])
- = function_values_scalar[fe_index][dof_to_rep_index_table[fe_index][i]];
- }
- }
- }
-
-
- template <class VECTOR, class DH>
- void interpolate (const DH &dof,
- const Function<DH::space_dimension> &function,
- VECTOR &vec)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- interpolate(StaticMappingQ1<DH::dimension, DH::space_dimension>::mapping,
- dof, function, vec);
- }
-
-
-
-
- template <int dim, class InVector, class OutVector, int spacedim>
- void
- interpolate (const DoFHandler<dim,spacedim> &dof_1,
- const DoFHandler<dim,spacedim> &dof_2,
- const FullMatrix<double> &transfer,
- const InVector &data_1,
- OutVector &data_2)
- {
- Vector<double> cell_data_1(dof_1.get_fe().dofs_per_cell);
- Vector<double> cell_data_2(dof_2.get_fe().dofs_per_cell);
-
- std::vector<short unsigned int> touch_count (dof_2.n_dofs(), 0);
- std::vector<unsigned int> local_dof_indices (dof_2.get_fe().dofs_per_cell);
-
- typename DoFHandler<dim,spacedim>::active_cell_iterator h = dof_1.begin_active();
- typename DoFHandler<dim,spacedim>::active_cell_iterator l = dof_2.begin_active();
- const typename DoFHandler<dim,spacedim>::cell_iterator endh = dof_1.end();
-
- for(; h != endh; ++h, ++l)
- {
- h->get_dof_values(data_1, cell_data_1);
- transfer.vmult(cell_data_2, cell_data_1);
-
- l->get_dof_indices (local_dof_indices);
-
- // distribute cell vector
- for (unsigned int j=0; j<dof_2.get_fe().dofs_per_cell; ++j)
- {
- data_2(local_dof_indices[j]) += cell_data_2(j);
-
- // count, how often we have
- // added to this dof
- Assert (touch_count[local_dof_indices[j]] < types::internal_face_boundary_id,
- ExcInternalError());
- ++touch_count[local_dof_indices[j]];
- };
- };
-
- // compute the mean value of the
- // sum which we have placed in each
- // entry of the output vector
- for (unsigned int i=0; i<dof_2.n_dofs(); ++i)
- {
- Assert (touch_count[i] != 0,
- ExcInternalError());
-
- data_2(i) /= touch_count[i];
- };
- }
-
-
- namespace internal
- {
- void
- interpolate_zero_boundary_values (const dealii::DoFHandler<1> &dof_handler,
- std::map<unsigned int,double> &boundary_values)
- {
- // we only need to find the
- // left-most and right-most
- // vertex and query its vertex
- // dof indices. that's easy :-)
- for (unsigned direction=0; direction<2; ++direction)
- {
- dealii::DoFHandler<1>::cell_iterator
- cell = dof_handler.begin(0);
- while (!cell->at_boundary(direction))
- cell = cell->neighbor(direction);
-
- for (unsigned int i=0; i<dof_handler.get_fe().dofs_per_vertex; ++i)
- boundary_values[cell->vertex_dof_index (direction, i)] = 0.;
- }
- }
-
-
-
- // codimension 1
- void
- interpolate_zero_boundary_values (const dealii::DoFHandler<1,2> &dof_handler,
- std::map<unsigned int,double> &boundary_values)
- {
- // we only need to find the
- // left-most and right-most
- // vertex and query its vertex
- // dof indices. that's easy :-)
- for (unsigned direction=0; direction<2; ++direction)
- {
- dealii::DoFHandler<1,2>::cell_iterator
- cell = dof_handler.begin(0);
- while (!cell->at_boundary(direction))
- cell = cell->neighbor(direction);
-
- for (unsigned int i=0; i<dof_handler.get_fe().dofs_per_vertex; ++i)
- boundary_values[cell->vertex_dof_index (direction, i)] = 0.;
- }
- }
-
-
-
- template <int dim, int spacedim>
- void
- interpolate_zero_boundary_values (const dealii::DoFHandler<dim,spacedim> &dof_handler,
- std::map<unsigned int,double> &boundary_values)
- {
- const FiniteElement<dim,spacedim> &fe = dof_handler.get_fe();
-
- // loop over all boundary faces
- // to get all dof indices of
- // dofs on the boundary. note
- // that in 3d there are cases
- // where a face is not at the
- // boundary, yet one of its
- // lines is, and we should
- // consider the degrees of
- // freedom on it as boundary
- // nodes. likewise, in 2d and
- // 3d there are cases where a
- // cell is only at the boundary
- // by one vertex. nevertheless,
- // since we do not support
- // boundaries with dimension
- // less or equal to dim-2, each
- // such boundary dof is also
- // found from some other face
- // that is actually wholly on
- // the boundary, not only by
- // one line or one vertex
- typename dealii::DoFHandler<dim,spacedim>::active_face_iterator
- face = dof_handler.begin_active_face(),
- endf = dof_handler.end_face();
- std::vector<unsigned int> face_dof_indices (fe.dofs_per_face);
- for (; face!=endf; ++face)
- if (face->at_boundary())
- {
- face->get_dof_indices (face_dof_indices);
- for (unsigned int i=0; i<fe.dofs_per_face; ++i)
- // enter zero boundary values
- // for all boundary nodes
- //
- // we need not care about
- // vector valued elements here,
- // since we set all components
- boundary_values[face_dof_indices[i]] = 0.;
- }
- }
- }
-
-
-
- template <int dim, int spacedim,
- template <int,int> class DH,
- class Vector>
- void
- interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
- const Vector &u1,
- const DH<dim, spacedim> &dof2,
- Vector &u2)
- {
- Assert(GridTools::have_same_coarse_mesh(dof1, dof2),
- ExcMessage ("The two containers must represent triangulations that "
- "have the same coarse meshes"));
-
- InterGridMap<DH<dim, spacedim> > intergridmap;
- intergridmap.make_mapping(dof1, dof2);
-
- ConstraintMatrix dummy;
- dummy.close();
-
- interpolate_to_different_mesh(intergridmap, u1, dummy, u2);
- }
-
-
-
- template <int dim, int spacedim,
- template <int,int> class DH,
- class Vector>
- void
- interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
- const Vector &u1,
- const DH<dim, spacedim> &dof2,
- const ConstraintMatrix &constraints,
- Vector &u2)
- {
- Assert(GridTools::have_same_coarse_mesh(dof1, dof2),
- ExcMessage ("The two containers must represent triangulations that "
- "have the same coarse meshes"));
-
- InterGridMap<DH<dim, spacedim> > intergridmap;
- intergridmap.make_mapping(dof1, dof2);
-
- interpolate_to_different_mesh(intergridmap, u1, constraints, u2);
- }
-
-
-
- template <int dim, int spacedim,
- template <int,int> class DH,
- class Vector>
- void
- interpolate_to_different_mesh (const InterGridMap<DH<dim, spacedim> > &intergridmap,
- const Vector &u1,
- const ConstraintMatrix &constraints,
- Vector &u2)
- {
- const DH<dim, spacedim> &dof1 = intergridmap.get_source_grid();
- const DH<dim, spacedim> &dof2 = intergridmap.get_destination_grid();
-
- Assert(u1.size()==dof1.n_dofs(),
- ExcDimensionMismatch(u1.size(), dof1.n_dofs()));
- Assert(u2.size()==dof2.n_dofs(),
- ExcDimensionMismatch(u2.size(),dof2.n_dofs()));
-
- Vector cache;
-
- // Looping over the finest common
- // mesh, this means that source and
- // destination cells have to be on the
- // same level and at least one has to
- // be active.
- //
- // Therefor, loop over all cells
- // (active and inactive) of the source
- // grid ..
- typename DH<dim,spacedim>::cell_iterator cell1 = dof1.begin();
- const typename DH<dim,spacedim>::cell_iterator endc1 = dof1.end();
-
- for (; cell1 != endc1; ++cell1) {
- const typename DH<dim,spacedim>::cell_iterator cell2 = intergridmap[cell1];
-
- // .. and skip if source and destination
- // cells are not on the same level ..
- if (cell1->level() != cell2->level())
- continue;
- // .. or none of them is active.
- if (!cell1->active() && !cell2->active())
- continue;
-
- Assert(cell1->get_fe().get_name() ==
- cell2->get_fe().get_name(),
- ExcMessage ("Source and destination cells need to use the same finite element"));
-
- cache.reinit(cell1->get_fe().dofs_per_cell);
-
- // Get and set the corresponding
- // dof_values by interpolation.
- cell1->get_interpolated_dof_values(u1, cache);
- cell2->set_dof_values_by_interpolation(cache, u2);
- }
-
- // Apply hanging node constraints.
- constraints.distribute(u2);
- }
-
-
-
- template <int dim, class VECTOR, int spacedim>
- void project (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const ConstraintMatrix &constraints,
- const Quadrature<dim> &quadrature,
- const Function<spacedim> &function,
- VECTOR &vec_result,
- const bool enforce_zero_boundary,
- const Quadrature<dim-1> &q_boundary,
- const bool project_to_boundary_first)
- {
- Assert (dof.get_fe().n_components() == function.n_components,
- ExcDimensionMismatch(dof.get_fe().n_components(),
- function.n_components));
-
- Assert (vec_result.size() == dof.n_dofs(),
- ExcDimensionMismatch (vec_result.size(), dof.n_dofs()));
-
- // make up boundary values
- std::map<unsigned int,double> boundary_values;
-
- if (enforce_zero_boundary == true)
- // no need to project boundary
- // values, but enforce
- // homogeneous boundary values
- // anyway
- internal::
- interpolate_zero_boundary_values (dof, boundary_values);
-
- else
- // no homogeneous boundary values
- if (project_to_boundary_first == true)
- // boundary projection required
- {
- // set up a list of boundary
- // functions for the
- // different boundary
- // parts. We want the
- // function to hold on
- // all parts of the boundary
- typename FunctionMap<spacedim>::type boundary_functions;
- for (types::boundary_id_t c=0; c<types::internal_face_boundary_id; ++c)
- boundary_functions[c] = &function;
- project_boundary_values (dof, boundary_functions, q_boundary,
- boundary_values);
- }
-
- // set up mass matrix and right hand side
- Vector<double> vec (dof.n_dofs());
- SparsityPattern sparsity;
-
- // use csp to consume less memory and to
- // still be fast
- {
- CompressedSimpleSparsityPattern csp (dof.n_dofs(), dof.n_dofs());
- DoFTools::make_sparsity_pattern (dof, csp, constraints);
-
- sparsity.copy_from (csp);
- }
-
- SparseMatrix<double> mass_matrix (sparsity);
- Vector<double> tmp (mass_matrix.n());
-
- // create mass matrix and rhs at once,
- // which is faster.
- MatrixCreator::create_mass_matrix (mapping, dof, quadrature, mass_matrix,
- function, tmp);
-
- constraints.condense (mass_matrix);
- constraints.condense (tmp);
- if (boundary_values.size() != 0)
- MatrixTools::apply_boundary_values (boundary_values,
- mass_matrix, vec, tmp,
- true);
- // Allow for a maximum of 5*n
- // steps to reduce the residual by
- // 10^-12. n steps may not be
- // sufficient, since roundoff
- // errors may accumulate for badly
- // conditioned matrices
- ReductionControl control(5*tmp.size(), 0., 1e-12, false, false);
- GrowingVectorMemory<> memory;
- SolverCG<> cg(control,memory);
-
- PreconditionSSOR<> prec;
- prec.initialize(mass_matrix, 1.2);
- // solve
- cg.solve (mass_matrix, vec, tmp, prec);
-
- // distribute solution
- constraints.distribute (vec);
-
- // copy vec into vec_result. we
- // can't use ve_result itself
- // above, since it may be of
- // another type than Vector<double>
- // and that wouldn't necessarily go
- // together with the matrix and
- // other functions
- for (unsigned int i=0; i<vec.size(); ++i)
- vec_result(i) = vec(i);
- }
-
-
- template <int dim, class VECTOR, int spacedim>
- void project (const DoFHandler<dim,spacedim> &dof,
- const ConstraintMatrix &constraints,
- const Quadrature<dim> &quadrature,
- const Function<spacedim> &function,
- VECTOR &vec,
- const bool enforce_zero_boundary,
- const Quadrature<dim-1> &q_boundary,
- const bool project_to_boundary_first)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- project(StaticMappingQ1<dim,spacedim>::mapping, dof, constraints, quadrature, function, vec,
- enforce_zero_boundary, q_boundary, project_to_boundary_first);
- }
-
-
-
-
- template <int dim, int spacedim>
- void create_right_hand_side (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof_handler,
- const Quadrature<dim> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector)
- {
- const FiniteElement<dim,spacedim> &fe = dof_handler.get_fe();
- Assert (fe.n_components() == rhs_function.n_components,
- ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
- rhs_vector = 0;
-
- UpdateFlags update_flags = UpdateFlags(update_values |
- update_quadrature_points |
- update_JxW_values);
- FEValues<dim,spacedim> fe_values (mapping, fe, quadrature, update_flags);
-
- const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
- n_q_points = fe_values.n_quadrature_points,
- n_components = fe.n_components();
-
- std::vector<unsigned int> dofs (dofs_per_cell);
- Vector<double> cell_vector (dofs_per_cell);
-
- typename DoFHandler<dim,spacedim>::active_cell_iterator
- cell = dof_handler.begin_active(),
- endc = dof_handler.end();
-
- if (n_components==1)
- {
- std::vector<double> rhs_values(n_q_points);
-
- for (; cell!=endc; ++cell)
- {
- fe_values.reinit(cell);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.value_list (fe_values.get_quadrature_points(),
- rhs_values);
-
- cell_vector = 0;
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_vector(i) += rhs_values[point] *
- fe_values.shape_value(i,point) *
- weights[point];
-
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
-
- }
- else
- {
- std::vector<Vector<double> > rhs_values(n_q_points,
- Vector<double>(n_components));
-
- for (; cell!=endc; ++cell)
- {
- fe_values.reinit(cell);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.vector_value_list (fe_values.get_quadrature_points(),
- rhs_values);
-
- cell_vector = 0;
- // Use the faster code if the
- // FiniteElement is primitive
- if (fe.is_primitive ())
- {
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- {
- const unsigned int component
- = fe.system_to_component_index(i).first;
-
- cell_vector(i) += rhs_values[point](component) *
- fe_values.shape_value(i,point) *
- weights[point];
- }
- }
- else
- {
- // Otherwise do it the way
- // proposed for vector valued
- // elements
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
- if (fe.get_nonzero_components(i)[comp_i])
- {
- cell_vector(i) += rhs_values[point](comp_i) *
- fe_values.shape_value_component(i,point,comp_i) *
- weights[point];
- }
- }
-
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
- }
- }
-
-
-
- template <int dim, int spacedim>
- void create_right_hand_side (const DoFHandler<dim,spacedim> &dof_handler,
- const Quadrature<dim> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_right_hand_side(StaticMappingQ1<dim,spacedim>::mapping, dof_handler, quadrature,
- rhs_function, rhs_vector);
- }
-
-
-
-
- template <int dim, int spacedim>
- void create_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof_handler,
- const hp::QCollection<dim> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector)
- {
- const hp::FECollection<dim,spacedim> &fe = dof_handler.get_fe();
- Assert (fe.n_components() == rhs_function.n_components,
- ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
- rhs_vector = 0;
-
- UpdateFlags update_flags = UpdateFlags(update_values |
- update_quadrature_points |
- update_JxW_values);
- hp::FEValues<dim,spacedim> x_fe_values (mapping, fe, quadrature, update_flags);
-
- const unsigned int n_components = fe.n_components();
-
- std::vector<unsigned int> dofs (fe.max_dofs_per_cell());
- Vector<double> cell_vector (fe.max_dofs_per_cell());
-
- typename hp::DoFHandler<dim,spacedim>::active_cell_iterator
- cell = dof_handler.begin_active(),
- endc = dof_handler.end();
-
- if (n_components==1)
- {
- std::vector<double> rhs_values;
-
- for (; cell!=endc; ++cell)
- {
- x_fe_values.reinit(cell);
-
- const FEValues<dim,spacedim> &fe_values = x_fe_values.get_present_fe_values();
-
- const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
- n_q_points = fe_values.n_quadrature_points;
- rhs_values.resize (n_q_points);
- dofs.resize (dofs_per_cell);
- cell_vector.reinit (dofs_per_cell);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.value_list (fe_values.get_quadrature_points(),
- rhs_values);
-
- cell_vector = 0;
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_vector(i) += rhs_values[point] *
- fe_values.shape_value(i,point) *
- weights[point];
-
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
-
- }
- else
- {
- std::vector<Vector<double> > rhs_values;
-
- for (; cell!=endc; ++cell)
- {
- x_fe_values.reinit(cell);
-
- const FEValues<dim,spacedim> &fe_values = x_fe_values.get_present_fe_values();
-
- const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
- n_q_points = fe_values.n_quadrature_points;
- rhs_values.resize (n_q_points,
- Vector<double>(n_components));
- dofs.resize (dofs_per_cell);
- cell_vector.reinit (dofs_per_cell);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.vector_value_list (fe_values.get_quadrature_points(),
- rhs_values);
-
- cell_vector = 0;
-
- // Use the faster code if the
- // FiniteElement is primitive
- if (cell->get_fe().is_primitive ())
- {
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- {
- const unsigned int component
- = cell->get_fe().system_to_component_index(i).first;
-
- cell_vector(i) += rhs_values[point](component) *
- fe_values.shape_value(i,point) *
- weights[point];
- }
- }
- else
- {
- // Otherwise do it the way proposed
- // for vector valued elements
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
- if (cell->get_fe().get_nonzero_components(i)[comp_i])
- {
- cell_vector(i) += rhs_values[point](comp_i) *
- fe_values.shape_value_component(i,point,comp_i) *
- weights[point];
- }
- }
-
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
- }
- }
-
-
-
- template <int dim, int spacedim>
- void create_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof_handler,
- const hp::QCollection<dim> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_right_hand_side(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
- dof_handler, quadrature,
- rhs_function, rhs_vector);
- }
-
-
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector)
- {
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
- Assert (dof_handler.get_fe().n_components() == 1,
- ExcMessage ("This function only works for scalar finite elements"));
-
- rhs_vector = 0;
-
- std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point =
- GridTools::find_active_cell_around_point (mapping, dof_handler, p);
-
- Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
-
- FEValues<dim,spacedim> fe_values(mapping, dof_handler.get_fe(),
- q, UpdateFlags(update_values));
- fe_values.reinit(cell_point.first);
-
- const unsigned int dofs_per_cell = dof_handler.get_fe().dofs_per_cell;
-
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
- cell_point.first->get_dof_indices (local_dof_indices);
-
- for(unsigned int i=0; i<dofs_per_cell; i++)
- rhs_vector(local_dof_indices[i]) = fe_values.shape_value(i,0);
- }
-
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_point_source_vector(StaticMappingQ1<dim,spacedim>::mapping, dof_handler,
- p, rhs_vector);
- }
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector)
- {
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
- Assert (dof_handler.get_fe().n_components() == 1,
- ExcMessage ("This function only works for scalar finite elements"));
-
- rhs_vector = 0;
-
- std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point =
- GridTools::find_active_cell_around_point (mapping, dof_handler, p);
-
- Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
-
- FEValues<dim> fe_values(mapping[cell_point.first->active_fe_index()],
- cell_point.first->get_fe(), q, UpdateFlags(update_values));
- fe_values.reinit(cell_point.first);
-
- const unsigned int dofs_per_cell = cell_point.first->get_fe().dofs_per_cell;
-
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
- cell_point.first->get_dof_indices (local_dof_indices);
-
- for(unsigned int i=0; i<dofs_per_cell; i++)
- rhs_vector(local_dof_indices[i]) = fe_values.shape_value(i,0);
- }
-
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const hp::DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- Vector<double> &rhs_vector)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_point_source_vector(hp::StaticMappingQ1<dim>::mapping_collection,
- dof_handler,
- p, rhs_vector);
- }
-
-
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector)
- {
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
- Assert (dof_handler.get_fe().n_components() == dim,
- ExcMessage ("This function only works for vector-valued finite elements."));
-
- rhs_vector = 0;
-
- std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point =
- GridTools::find_active_cell_around_point (mapping, dof_handler, p);
-
- Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
-
- const FEValuesExtractors::Vector vec (0);
- FEValues<dim,spacedim> fe_values(mapping, dof_handler.get_fe(),
- q, UpdateFlags(update_values));
- fe_values.reinit(cell_point.first);
-
- const unsigned int dofs_per_cell = dof_handler.get_fe().dofs_per_cell;
-
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
- cell_point.first->get_dof_indices (local_dof_indices);
-
- for(unsigned int i=0; i<dofs_per_cell; i++)
- rhs_vector(local_dof_indices[i]) = orientation * fe_values[vec].value(i,0);
- }
-
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_point_source_vector(StaticMappingQ1<dim,spacedim>::mapping, dof_handler,
- p, orientation, rhs_vector);
- }
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector)
- {
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
- Assert (dof_handler.get_fe().n_components() == dim,
- ExcMessage ("This function only works for vector-valued finite elements."));
-
- rhs_vector = 0;
-
- std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point =
- GridTools::find_active_cell_around_point (mapping, dof_handler, p);
-
- Quadrature<dim> q(GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
-
- const FEValuesExtractors::Vector vec (0);
- FEValues<dim> fe_values(mapping[cell_point.first->active_fe_index()],
- cell_point.first->get_fe(), q, UpdateFlags(update_values));
- fe_values.reinit(cell_point.first);
-
- const unsigned int dofs_per_cell = cell_point.first->get_fe().dofs_per_cell;
-
- std::vector<unsigned int> local_dof_indices (dofs_per_cell);
- cell_point.first->get_dof_indices (local_dof_indices);
-
- for(unsigned int i=0; i<dofs_per_cell; i++)
- rhs_vector(local_dof_indices[i]) = orientation * fe_values[vec].value(i,0);
- }
-
-
-
- template <int dim, int spacedim>
- void create_point_source_vector (const hp::DoFHandler<dim,spacedim> &dof_handler,
- const Point<spacedim> &p,
- const Point<dim> &orientation,
- Vector<double> &rhs_vector)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_point_source_vector(hp::StaticMappingQ1<dim>::mapping_collection,
- dof_handler,
- p, orientation, rhs_vector);
- }
-
-
-
-// separate implementation for 1D because otherwise we get linker errors since
-// FEFaceValues<1> is not compiled
- template <>
- void
- create_boundary_right_hand_side (const Mapping<1,1> &,
- const DoFHandler<1,1> &,
- const Quadrature<0> &,
- const Function<1> &,
- Vector<double> &,
- const std::set<types::boundary_id_t> &)
- {
- Assert (false, ExcImpossibleInDim(1));
- }
-
-
-
- template <>
- void
- create_boundary_right_hand_side (const Mapping<1,2> &,
- const DoFHandler<1,2> &,
- const Quadrature<0> &,
- const Function<2> &,
- Vector<double> &,
- const std::set<types::boundary_id_t> &)
- {
- Assert (false, ExcImpossibleInDim(1));
- }
-
-
-
- template <int dim, int spacedim>
- void
- create_boundary_right_hand_side (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof_handler,
- const Quadrature<dim-1> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators)
- {
- const FiniteElement<dim> &fe = dof_handler.get_fe();
- Assert (fe.n_components() == rhs_function.n_components,
- ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
-
- rhs_vector = 0;
-
- UpdateFlags update_flags = UpdateFlags(update_values |
- update_quadrature_points |
- update_JxW_values);
- FEFaceValues<dim> fe_values (mapping, fe, quadrature, update_flags);
-
- const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
- n_q_points = fe_values.n_quadrature_points,
- n_components = fe.n_components();
-
- std::vector<unsigned int> dofs (dofs_per_cell);
- Vector<double> cell_vector (dofs_per_cell);
-
- typename DoFHandler<dim,spacedim>::active_cell_iterator cell = dof_handler.begin_active(),
- endc = dof_handler.end();
-
- if (n_components==1)
- {
- std::vector<double> rhs_values(n_q_points);
-
- for (; cell!=endc; ++cell)
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face(face)->at_boundary () &&
- (boundary_indicators.empty() ||
- (boundary_indicators.find (cell->face(face)->boundary_indicator())
- !=
- boundary_indicators.end())))
- {
- fe_values.reinit(cell, face);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.value_list (fe_values.get_quadrature_points(), rhs_values);
-
- cell_vector = 0;
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_vector(i) += rhs_values[point] *
- fe_values.shape_value(i,point) *
- weights[point];
-
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
- }
- else
- {
- std::vector<Vector<double> > rhs_values(n_q_points, Vector<double>(n_components));
-
- for (; cell!=endc; ++cell)
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face(face)->at_boundary () &&
- (boundary_indicators.empty() ||
- (boundary_indicators.find (cell->face(face)->boundary_indicator())
- !=
- boundary_indicators.end())))
- {
- fe_values.reinit(cell, face);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values);
-
- cell_vector = 0;
-
- // Use the faster code if the
- // FiniteElement is primitive
- if (fe.is_primitive ())
- {
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- {
- const unsigned int component
- = fe.system_to_component_index(i).first;
-
- cell_vector(i) += rhs_values[point](component) *
- fe_values.shape_value(i,point) *
- weights[point];
- }
- }
- else
- {
- // And the full featured
- // code, if vector valued
- // FEs are used
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
- if (fe.get_nonzero_components(i)[comp_i])
- {
- cell_vector(i)
- += rhs_values[point](comp_i) *
- fe_values.shape_value_component(i,point,comp_i) *
- weights[point];
- }
- }
-
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
- }
- }
-
-
-
- template <int dim, int spacedim>
- void
- create_boundary_right_hand_side (const DoFHandler<dim,spacedim> &dof_handler,
- const Quadrature<dim-1> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
-
- create_boundary_right_hand_side(StaticMappingQ1<dim>::mapping, dof_handler,
- quadrature,
- rhs_function, rhs_vector,
- boundary_indicators);
- }
-
-
-
-// separate implementation for 1D because otherwise we get linker errors since
-// hp::FEFaceValues<1> is not compiled
- template <>
- void
- create_boundary_right_hand_side (const hp::MappingCollection<1,1> &,
- const hp::DoFHandler<1,1> &,
- const hp::QCollection<0> &,
- const Function<1> &,
- Vector<double> &,
- const std::set<types::boundary_id_t> &)
- {
- Assert (false, ExcImpossibleInDim(1));
- }
-
-
-
- template <>
- void
- create_boundary_right_hand_side (const hp::MappingCollection<1,2> &,
- const hp::DoFHandler<1,2> &,
- const hp::QCollection<0> &,
- const Function<2> &,
- Vector<double> &,
- const std::set<types::boundary_id_t> &)
- {
- Assert (false, ExcImpossibleInDim(1));
- }
-
-
-
- template <int dim, int spacedim>
- void
- create_boundary_right_hand_side (const hp::MappingCollection<dim,spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof_handler,
- const hp::QCollection<dim-1> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators)
- {
- const hp::FECollection<dim> &fe = dof_handler.get_fe();
- Assert (fe.n_components() == rhs_function.n_components,
- ExcDimensionMismatch(fe.n_components(), rhs_function.n_components));
- Assert (rhs_vector.size() == dof_handler.n_dofs(),
- ExcDimensionMismatch(rhs_vector.size(), dof_handler.n_dofs()));
-
- rhs_vector = 0;
-
- UpdateFlags update_flags = UpdateFlags(update_values |
- update_quadrature_points |
- update_JxW_values);
- hp::FEFaceValues<dim> x_fe_values (mapping, fe, quadrature, update_flags);
-
- const unsigned int n_components = fe.n_components();
-
- std::vector<unsigned int> dofs (fe.max_dofs_per_cell());
- Vector<double> cell_vector (fe.max_dofs_per_cell());
-
- typename hp::DoFHandler<dim,spacedim>::active_cell_iterator
- cell = dof_handler.begin_active(),
- endc = dof_handler.end();
-
- if (n_components==1)
- {
- std::vector<double> rhs_values;
-
- for (; cell!=endc; ++cell)
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face(face)->at_boundary () &&
- (boundary_indicators.empty() ||
- (boundary_indicators.find (cell->face(face)->boundary_indicator())
- !=
- boundary_indicators.end())))
- {
- x_fe_values.reinit(cell, face);
-
- const FEFaceValues<dim> &fe_values = x_fe_values.get_present_fe_values();
-
- const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
- n_q_points = fe_values.n_quadrature_points;
- rhs_values.resize (n_q_points);
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.value_list (fe_values.get_quadrature_points(), rhs_values);
-
- cell_vector = 0;
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- cell_vector(i) += rhs_values[point] *
- fe_values.shape_value(i,point) *
- weights[point];
-
- dofs.resize(dofs_per_cell);
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
- }
- else
- {
- std::vector<Vector<double> > rhs_values;
-
- for (; cell!=endc; ++cell)
- for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face(face)->at_boundary () &&
- (boundary_indicators.empty() ||
- (boundary_indicators.find (cell->face(face)->boundary_indicator())
- !=
- boundary_indicators.end())))
- {
- x_fe_values.reinit(cell, face);
-
- const FEFaceValues<dim> &fe_values = x_fe_values.get_present_fe_values();
-
- const unsigned int dofs_per_cell = fe_values.dofs_per_cell,
- n_q_points = fe_values.n_quadrature_points;
- rhs_values.resize (n_q_points, Vector<double>(n_components));
-
- const std::vector<double> &weights = fe_values.get_JxW_values ();
- rhs_function.vector_value_list (fe_values.get_quadrature_points(), rhs_values);
-
- cell_vector = 0;
-
- // Use the faster code if the
- // FiniteElement is primitive
- if (cell->get_fe().is_primitive ())
- {
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- {
- const unsigned int component
- = cell->get_fe().system_to_component_index(i).first;
-
- cell_vector(i) += rhs_values[point](component) *
- fe_values.shape_value(i,point) *
- weights[point];
- }
- }
- else
- {
- // And the full featured
- // code, if vector valued
- // FEs are used
- for (unsigned int point=0; point<n_q_points; ++point)
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- for (unsigned int comp_i = 0; comp_i < n_components; ++comp_i)
- if (cell->get_fe().get_nonzero_components(i)[comp_i])
- {
- cell_vector(i)
- += rhs_values[point](comp_i) *
- fe_values.shape_value_component(i,point,comp_i) *
- weights[point];
- }
- }
- dofs.resize(dofs_per_cell);
- cell->get_dof_indices (dofs);
-
- for (unsigned int i=0; i<dofs_per_cell; ++i)
- rhs_vector(dofs[i]) += cell_vector(i);
- }
- }
- }
-
-
-
- template <int dim, int spacedim>
- void
- create_boundary_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof_handler,
- const hp::QCollection<dim-1> &quadrature,
- const Function<spacedim> &rhs_function,
- Vector<double> &rhs_vector,
- const std::set<types::boundary_id_t> &boundary_indicators)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- create_boundary_right_hand_side(hp::StaticMappingQ1<dim>::mapping_collection,
- dof_handler, quadrature,
- rhs_function, rhs_vector,
- boundary_indicators);
- }
-
-
-
-// ----------- interpolate_boundary_values for std::map --------------------
-
- namespace internal
- {
- // interpolate boundary values in
- // 1d. in higher dimensions, we
- // use FEValues to figure out
- // what to do on faces, but in 1d
- // faces are points and it is far
- // easier to simply work on
- // individual vertices
- template <class DH>
- static inline
- void interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &,
- const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask_,
- const dealii::internal::int2type<1>)
- {
- const unsigned int dim = DH::dimension;
- const unsigned int spacedim=DH::space_dimension;
-
- Assert ((component_mask_.size() == 0) ||
- (component_mask_.size() == dof.get_fe().n_components()),
- ExcMessage ("The number of components in the mask has to be either "
- "zero or equal to the number of components in the finite "
- "element."));
-
- // if for whatever reason we were
- // passed an empty map, return
- // immediately
- if (function_map.size() == 0)
- return;
-
- for (typename FunctionMap<spacedim>::type::const_iterator i=function_map.begin();
- i!=function_map.end(); ++i)
- Assert (i->first < 2,
- ExcInvalidBoundaryIndicator());
-
- for (typename DH::active_cell_iterator cell = dof.begin_active();
- cell != dof.end(); ++cell)
- for (unsigned int direction=0;
- direction<GeometryInfo<dim>::faces_per_cell; ++direction)
- if (cell->at_boundary(direction)
- &&
- (function_map.find(direction) != function_map.end()))
- {
- const Function<DH::space_dimension> & boundary_function
- = *function_map.find(direction)->second;
-
- // get the FE corresponding to this
- // cell
- const FiniteElement<dim,spacedim> &fe = cell->get_fe();
- Assert (fe.n_components() == boundary_function.n_components,
- ExcDimensionMismatch(fe.n_components(),
- boundary_function.n_components));
-
- // set the component mask to either
- // the original value or a vector
- // of trues
- const std::vector<bool> component_mask ((component_mask_.size() == 0) ?
- std::vector<bool> (fe.n_components(), true) :
- component_mask_);
- Assert (std::count(component_mask.begin(), component_mask.end(), true) > 0,
- ExcNoComponentSelected());
-
- // now set the value of
- // the vertex degree of
- // freedom. setting
- // also creates the
- // entry in the map if
- // it did not exist
- // beforehand
- //
- // save some time by
- // requesting values
- // only once for each
- // point, irrespective
- // of the number of
- // components of the
- // function
- dealii::Vector<double> function_values (fe.n_components());
- if (fe.n_components() == 1)
- function_values(0)
- = boundary_function.value (cell->vertex(direction));
- else
- boundary_function.vector_value (cell->vertex(direction),
- function_values);
-
- for (unsigned int i=0; i<fe.dofs_per_vertex; ++i)
- if (component_mask[fe.face_system_to_component_index(i).first])
- boundary_values[cell->
- vertex_dof_index(direction,i,
- cell->active_fe_index())]
- = function_values(fe.face_system_to_component_index(i).first);
- }
- }
-
-
-
- template <class DH>
- static inline
- void
- interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &mapping,
- const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask_,
- const dealii::internal::int2type<DH::dimension>)
- {
- const unsigned int dim = DH::dimension;
- const unsigned int spacedim=DH::space_dimension;
-
- Assert ((component_mask_.size() == 0) ||
- (component_mask_.size() == dof.get_fe().n_components()),
- ExcMessage ("The number of components in the mask has to be either "
- "zero or equal to the number of components in the finite "
- "element."));
-
-
- // if for whatever reason we were
- // passed an empty map, return
- // immediately
- if (function_map.size() == 0)
- return;
-
- Assert (function_map.find(types::internal_face_boundary_id) == function_map.end(),
- ExcInvalidBoundaryIndicator());
-
- const unsigned int n_components = DoFTools::n_components(dof);
- const bool fe_is_system = (n_components != 1);
-
- for (typename FunctionMap<spacedim>::type::const_iterator i=function_map.begin();
- i!=function_map.end(); ++i)
- Assert (n_components == i->second->n_components,
- ExcDimensionMismatch(n_components, i->second->n_components));
-
- // set the component mask to either
- // the original value or a vector
- // of trues
- const std::vector<bool> component_mask ((component_mask_.size() == 0) ?
- std::vector<bool> (n_components, true) :
- component_mask_);
- Assert (std::count(component_mask.begin(), component_mask.end(), true) > 0,
- ExcNoComponentSelected());
-
- // field to store the indices
- std::vector<unsigned int> face_dofs;
- face_dofs.reserve (DoFTools::max_dofs_per_face(dof));
-
- std::vector<Point<spacedim> > dof_locations;
- dof_locations.reserve (DoFTools::max_dofs_per_face(dof));
-
- // array to store the values of
- // the boundary function at the
- // boundary points. have two arrays
- // for scalar and vector functions
- // to use the more efficient one
- // respectively
- std::vector<double> dof_values_scalar;
- std::vector<dealii::Vector<double> > dof_values_system;
- dof_values_scalar.reserve (DoFTools::max_dofs_per_face (dof));
- dof_values_system.reserve (DoFTools::max_dofs_per_face (dof));
-
- // before we start with the loop
- // over all cells create an
- // hp::FEValues object that holds
- // the interpolation points of all
- // finite elements that may ever be
- // in use
- dealii::hp::FECollection<dim,spacedim> finite_elements (dof.get_fe());
- dealii::hp::QCollection<dim-1> q_collection;
- for (unsigned int f=0; f<finite_elements.size(); ++f)
- {
- const FiniteElement<dim,spacedim> &fe = finite_elements[f];
-
- // generate a quadrature rule
- // on the face from the unit
- // support points. this will be
- // used to obtain the
- // quadrature points on the
- // real cell's face
- //
- // to do this, we check whether
- // the FE has support points on
- // the face at all:
- if (fe.has_face_support_points())
- q_collection.push_back (Quadrature<dim-1>(fe.get_unit_face_support_points()));
- else
- {
- // if not, then we should
- // try a more clever
- // way. the idea is that a
- // finite element may not
- // offer support points for
- // all its shape functions,
- // but maybe only some. if
- // it offers support points
- // for the components we
- // are interested in in
- // this function, then
- // that's fine. if not, the
- // function we call in the
- // finite element will
- // raise an exception. the
- // support points for the
- // other shape functions
- // are left uninitialized
- // (well, initialized by
- // the default
- // constructor), since we
- // don't need them anyway.
- //
- // As a detour, we must
- // make sure we only query
- // face_system_to_component_index
- // if the index corresponds
- // to a primitive shape
- // function. since we know
- // that all the components
- // we are interested in are
- // primitive (by the above
- // check), we can safely
- // put such a check in
- // front
- std::vector<Point<dim-1> > unit_support_points (fe.dofs_per_face);
-
- for (unsigned int i=0; i<fe.dofs_per_face; ++i)
- if (fe.is_primitive (fe.face_to_equivalent_cell_index(i)))
- if (component_mask[fe.face_system_to_component_index(i).first]
- == true)
- unit_support_points[i] = fe.unit_face_support_point(i);
-
- q_collection.push_back (Quadrature<dim-1>(unit_support_points));
- }
- }
- // now that we have a q_collection
- // object with all the right
- // quadrature points, create an
- // hp::FEFaceValues object that we
- // can use to evaluate the boundary
- // values at
- dealii::hp::MappingCollection<dim,spacedim> mapping_collection (mapping);
- dealii::hp::FEFaceValues<dim,spacedim> x_fe_values (mapping_collection, finite_elements, q_collection,
- update_quadrature_points);
-
- typename DH::active_cell_iterator cell = dof.begin_active(),
- endc = dof.end();
- for (; cell!=endc; ++cell)
- if (!cell->is_artificial())
- for (unsigned int face_no = 0; face_no < GeometryInfo<dim>::faces_per_cell;
- ++face_no)
- {
- const FiniteElement<dim,spacedim> &fe = cell->get_fe();
-
- // we can presently deal only with
- // primitive elements for boundary
- // values. this does not preclude
- // us using non-primitive elements
- // in components that we aren't
- // interested in, however. make
- // sure that all shape functions
- // that are non-zero for the
- // components we are interested in,
- // are in fact primitive
- for (unsigned int i=0; i<cell->get_fe().dofs_per_cell; ++i)
- {
- const std::vector<bool> &nonzero_component_array
- = cell->get_fe().get_nonzero_components (i);
- for (unsigned int c=0; c<n_components; ++c)
- if ((nonzero_component_array[c] == true)
- &&
- (component_mask[c] == true))
- Assert (cell->get_fe().is_primitive (i),
- ExcMessage ("This function can only deal with requested boundary "
- "values that correspond to primitive (scalar) base "
- "elements"));
- }
-
- const typename DH::face_iterator face = cell->face(face_no);
- const types::boundary_id_t boundary_component = face->boundary_indicator();
-
- // see if this face is
- // part of the
- // boundaries for which
- // we are supposed to
- // do something, and
- // also see if the
- // finite element in
- // use here has DoFs on
- // the face at all
- if ((function_map.find(boundary_component) != function_map.end())
- &&
- (cell->get_fe().dofs_per_face > 0))
- {
- // face is of the right component
- x_fe_values.reinit(cell, face_no);
- const dealii::FEFaceValues<dim,spacedim> &fe_values =
- x_fe_values.get_present_fe_values();
-
- // get indices, physical location and
- // boundary values of dofs on this
- // face
- face_dofs.resize (fe.dofs_per_face);
- face->get_dof_indices (face_dofs, cell->active_fe_index());
- const std::vector<Point<spacedim> > &dof_locations
- = fe_values.get_quadrature_points ();
-
- if (fe_is_system)
- {
- // resize
- // array. avoid
- // construction of a
- // memory allocating
- // temporary if
- // possible
- if (dof_values_system.size() < fe.dofs_per_face)
- dof_values_system.resize (fe.dofs_per_face,
- dealii::Vector<double>(fe.n_components()));
- else
- dof_values_system.resize (fe.dofs_per_face);
-
- function_map.find(boundary_component)->second
- ->vector_value_list (dof_locations, dof_values_system);
-
- // enter those dofs
- // into the list that
- // match the
- // component
- // signature. avoid
- // the usual
- // complication that
- // we can't just use
- // *_system_to_component_index
- // for non-primitive
- // FEs
- for (unsigned int i=0; i<face_dofs.size(); ++i)
- {
- unsigned int component;
- if (fe.is_primitive())
- component = fe.face_system_to_component_index(i).first;
- else
- {
- // non-primitive
- // case. make
- // sure that
- // this
- // particular
- // shape
- // function
- // _is_
- // primitive,
- // and get at
- // it's
- // component. use
- // usual
- // trick to
- // transfer
- // face dof
- // index to
- // cell dof
- // index
- const unsigned int cell_i
- = (dim == 1 ?
- i
- :
- (dim == 2 ?
- (i<2*fe.dofs_per_vertex ? i : i+2*fe.dofs_per_vertex)
- :
- (dim == 3 ?
- (i<4*fe.dofs_per_vertex ?
- i
- :
- (i<4*fe.dofs_per_vertex+4*fe.dofs_per_line ?
- i+4*fe.dofs_per_vertex
- :
- i+4*fe.dofs_per_vertex+8*fe.dofs_per_line))
- :
- numbers::invalid_unsigned_int)));
- Assert (cell_i < fe.dofs_per_cell, ExcInternalError());
-
- // make sure
- // that if
- // this is
- // not a
- // primitive
- // shape function,
- // then all
- // the
- // corresponding
- // components
- // in the
- // mask are
- // not set
- if (!fe.is_primitive(cell_i))
- for (unsigned int c=0; c<n_components; ++c)
- if (fe.get_nonzero_components(cell_i)[c])
- Assert (component_mask[c] == false,
- FETools::ExcFENotPrimitive());
-
- // let's pick
- // the first
- // of
- // possibly
- // more than
- // one
- // non-zero
- // components. if
- // shape
- // function
- // is
- // non-primitive,
- // then we
- // will
- // ignore the
- // result in
- // the
- // following
- // anyway,
- // otherwise
- // there's
- // only one
- // non-zero
- // component
- // which we
- // will use
- component = (std::find (fe.get_nonzero_components(cell_i).begin(),
- fe.get_nonzero_components(cell_i).end(),
- true)
- -
- fe.get_nonzero_components(cell_i).begin());
- }
-
- if (component_mask[component] == true)
- boundary_values[face_dofs[i]] = dof_values_system[i](component);
- }
- }
- else
- // fe has only one component,
- // so save some computations
- {
- // get only the one component that
- // this function has
- dof_values_scalar.resize (fe.dofs_per_face);
- function_map.find(boundary_component)->second
- ->value_list (dof_locations, dof_values_scalar, 0);
-
- // enter into list
-
- for (unsigned int i=0; i<face_dofs.size(); ++i)
- boundary_values[face_dofs[i]] = dof_values_scalar[i];
- }
- }
- }
- } // end of interpolate_boundary_values
- } // end of namespace internal
-
-
-
- template <class DH>
- void
-
- interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &mapping,
- const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask_)
- {
- internal::
- interpolate_boundary_values (mapping, dof, function_map, boundary_values,
- component_mask_,
- dealii::internal::int2type<DH::dimension>());
- }
-
-
-
- template <class DH>
- void
- interpolate_boundary_values (const Mapping<DH::dimension, DH::space_dimension> &mapping,
- const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask)
- {
- typename FunctionMap<DH::space_dimension>::type function_map;
- function_map[boundary_component] = &boundary_function;
- interpolate_boundary_values (mapping, dof, function_map, boundary_values,
- component_mask);
- }
-
-
-
- template <class DH>
- void
- interpolate_boundary_values (const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
- dof, boundary_component,
- boundary_function, boundary_values, component_mask);
- }
-
-
-
- template <class DH>
- void
- interpolate_boundary_values (const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- std::map<unsigned int,double> &boundary_values,
- const std::vector<bool> &component_mask)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
- dof, function_map,
- boundary_values, component_mask);
- }
-
-
-
-
-// ----------- interpolate_boundary_values for ConstraintMatrix --------------
-
-
-
- template <class DH>
- void
- interpolate_boundary_values
- (const Mapping<DH::dimension, DH::space_dimension> &mapping,
- const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask_)
- {
- std::map<unsigned int,double> boundary_values;
- interpolate_boundary_values (mapping, dof, function_map,
- boundary_values, component_mask_);
- std::map<unsigned int,double>::const_iterator boundary_value =
- boundary_values.begin();
- for ( ; boundary_value !=boundary_values.end(); ++boundary_value)
- {
- if (constraints.can_store_line (boundary_value->first)
- &&
- !constraints.is_constrained(boundary_value->first))
- {
- constraints.add_line (boundary_value->first);
- constraints.set_inhomogeneity (boundary_value->first,
- boundary_value->second);
- }
- }
- }
-
-
-
- template <class DH>
- void
- interpolate_boundary_values
- (const Mapping<DH::dimension, DH::space_dimension> &mapping,
- const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask)
- {
- typename FunctionMap<DH::space_dimension>::type function_map;
- function_map[boundary_component] = &boundary_function;
- interpolate_boundary_values (mapping, dof, function_map, constraints,
- component_mask);
- }
-
-
-
- template <class DH>
- void
- interpolate_boundary_values
- (const DH &dof,
- const types::boundary_id_t boundary_component,
- const Function<DH::space_dimension> &boundary_function,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
- dof, boundary_component,
- boundary_function, constraints, component_mask);
- }
-
-
-
- template <class DH>
- void
- interpolate_boundary_values
- (const DH &dof,
- const typename FunctionMap<DH::space_dimension>::type &function_map,
- ConstraintMatrix &constraints,
- const std::vector<bool> &component_mask)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- interpolate_boundary_values(StaticMappingQ1<DH::dimension,DH::space_dimension>::mapping,
- dof, function_map,
- constraints, component_mask);
- }
-
-
-
-
-// -------- implementation for project_boundary_values with std::map --------
-
-// separate implementations for 1D because otherwise we get linking errors
-// because create_boundary_mass_matrix is not compiled for 1D
- template <>
- void
- project_boundary_values (const Mapping<1,1> &mapping,
- const DoFHandler<1,1> &dof,
- const FunctionMap<1>::type &boundary_functions,
- const Quadrature<0> &,
- std::map<unsigned int,double> &boundary_values,
- std::vector<unsigned int> component_mapping)
- {
- Assert (component_mapping.size() == 0, ExcNotImplemented());
- // projection in 1d is equivalent
- // to interpolation
- interpolate_boundary_values (mapping, dof, boundary_functions,
- boundary_values, std::vector<bool>());
- }
-
-
-
- template <>
- void
- project_boundary_values (const Mapping<1,2> &mapping,
- const DoFHandler<1,2> &dof,
- const FunctionMap<2>::type &boundary_functions,
- const Quadrature<0> &,
- std::map<unsigned int,double> &boundary_values,
- std::vector<unsigned int> component_mapping)
- {
- Assert (component_mapping.size() == 0, ExcNotImplemented());
- // projection in 1d is equivalent
- // to interpolation
- interpolate_boundary_values (mapping, dof, boundary_functions,
- boundary_values, std::vector<bool>());
- }
-
-
-
-
- template <int dim, int spacedim>
- void
- project_boundary_values (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim, spacedim>&dof,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- const Quadrature<dim-1> &q,
- std::map<unsigned int,double> &boundary_values,
- std::vector<unsigned int> component_mapping)
- {
-//TODO:[?] In project_boundary_values, no condensation of sparsity
-// structures, matrices and right hand sides or distribution of
-// solution vectors is performed. This is ok for dim<3 because then
-// there are no constrained nodes on the boundary, but is not
-// acceptable for higher dimensions. Fix this.
-
- if (component_mapping.size() == 0)
- {
- AssertDimension (dof.get_fe().n_components(), boundary_functions.begin()->second->n_components);
- // I still do not see why i
- // should create another copy
- // here
- component_mapping.resize(dof.get_fe().n_components());
- for (unsigned int i= 0 ;i < component_mapping.size() ; ++i)
- component_mapping[i] = i;
- }
- else
- AssertDimension (dof.get_fe().n_components(), component_mapping.size());
-
- std::vector<unsigned int> dof_to_boundary_mapping;
- std::set<types::boundary_id_t> selected_boundary_components;
- for (typename FunctionMap<spacedim>::type::const_iterator i=boundary_functions.begin();
- i!=boundary_functions.end(); ++i)
- selected_boundary_components.insert (i->first);
-
- DoFTools::map_dof_to_boundary_indices (dof, selected_boundary_components,
- dof_to_boundary_mapping);
-
- // Done if no degrees of freedom on
- // the boundary
- if (dof.n_boundary_dofs (boundary_functions) == 0)
- return;
- // set up sparsity structure
- SparsityPattern sparsity(dof.n_boundary_dofs (boundary_functions),
- dof.max_couplings_between_boundary_dofs());
- DoFTools::make_boundary_sparsity_pattern (dof,
- boundary_functions,
- dof_to_boundary_mapping,
- sparsity);
-
- // note: for three or more dimensions, there
- // may be constrained nodes on the boundary
- // in this case the boundary mass matrix has
- // to be condensed and the solution is to
- // be distributed afterwards, which is not
- // yet implemented. The reason for this is
- // that we cannot simply use the condense
- // family of functions, since the matrices
- // and vectors do not use the global
- // numbering but rather the boundary
- // numbering, i.e. the condense function
- // needs to use another indirection. There
- // should be not many technical problems,
- // but it needs to be implemented
- if (dim>=3)
- {
-#ifdef DEBUG
-// Assert that there are no hanging nodes at the boundary
- int level = -1;
- for (typename DoFHandler<dim,spacedim>::active_cell_iterator cell = dof.begin_active();
- cell != dof.end(); ++cell)
- for (unsigned int f=0;f<GeometryInfo<dim>::faces_per_cell;++f)
- {
- if (cell->at_boundary(f))
- {
- if (level == -1)
- level = cell->level();
- else
- {
- Assert (level == cell->level(), ExcNotImplemented());
- }
- }
- }
-#endif
- }
- sparsity.compress();
-
-
- // make mass matrix and right hand side
- SparseMatrix<double> mass_matrix(sparsity);
- Vector<double> rhs(sparsity.n_rows());
-
-
- MatrixCreator::create_boundary_mass_matrix (mapping, dof, q,
- mass_matrix, boundary_functions,
- rhs, dof_to_boundary_mapping, (const Function<spacedim>*) 0,
- component_mapping);
-
- // For certain weird elements,
- // there might be degrees of
- // freedom on the boundary, but
- // their shape functions do not
- // have support there. Let's
- // eliminate them here.
-
- // The Bogner-Fox-Schmidt element
- // is an example for those.
-
-//TODO: Maybe we should figure out if the element really needs this
-
- FilteredMatrix<Vector<double> > filtered_mass_matrix(mass_matrix, true);
- FilteredMatrix<Vector<double> > filtered_precondition;
- std::vector<bool> excluded_dofs(mass_matrix.m(), false);
-
- double max_element = 0.;
- for (unsigned int i=0;i<mass_matrix.m();++i)
- if (mass_matrix.diag_element(i) > max_element)
- max_element = mass_matrix.diag_element(i);
-
- for (unsigned int i=0;i<mass_matrix.m();++i)
- if (mass_matrix.diag_element(i) < 1.e-8 * max_element)
- {
- filtered_mass_matrix.add_constraint(i, 0.);
- filtered_precondition.add_constraint(i, 0.);
- mass_matrix.diag_element(i) = 1.;
- excluded_dofs[i] = true;
- }
-
- Vector<double> boundary_projection (rhs.size());
-
- // Allow for a maximum of 5*n
- // steps to reduce the residual by
- // 10^-12. n steps may not be
- // sufficient, since roundoff
- // errors may accumulate for badly
- // conditioned matrices
- ReductionControl control(5*rhs.size(), 0., 1.e-12, false, false);
- GrowingVectorMemory<> memory;
- SolverCG<> cg(control,memory);
-
- PreconditionSSOR<> prec;
- prec.initialize(mass_matrix, 1.2);
- filtered_precondition.initialize(prec, true);
- // solve
- cg.solve (filtered_mass_matrix, boundary_projection, rhs, filtered_precondition);
- filtered_precondition.apply_constraints(boundary_projection, true);
- filtered_precondition.clear();
- // fill in boundary values
- for (unsigned int i=0; i<dof_to_boundary_mapping.size(); ++i)
- if (dof_to_boundary_mapping[i] != DoFHandler<dim,spacedim>::invalid_dof_index
- && ! excluded_dofs[dof_to_boundary_mapping[i]])
- {
- Assert(numbers::is_finite(boundary_projection(dof_to_boundary_mapping[i])), ExcNumberNotFinite());
-
- // this dof is on one of the
- // interesting boundary parts
- //
- // remember: i is the global dof
- // number, dof_to_boundary_mapping[i]
- // is the number on the boundary and
- // thus in the solution vector
- boundary_values[i] = boundary_projection(dof_to_boundary_mapping[i]);
- }
- }
-
-
-
- template <int dim, int spacedim>
- void
- project_boundary_values (const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- const Quadrature<dim-1> &q,
- std::map<unsigned int,double> &boundary_values,
- std::vector<unsigned int> component_mapping)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- project_boundary_values(StaticMappingQ1<dim,spacedim>::mapping, dof, boundary_functions, q,
- boundary_values, component_mapping);
- }
-
-
-
-// ----- implementation for project_boundary_values with ConstraintMatrix -----
-
-
-
- template <int dim, int spacedim>
- void
- project_boundary_values (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- const Quadrature<dim-1> &q,
- ConstraintMatrix &constraints,
- std::vector<unsigned int> component_mapping)
- {
- std::map<unsigned int,double> boundary_values;
- project_boundary_values (mapping, dof, boundary_functions, q,
- boundary_values, component_mapping);
- std::map<unsigned int,double>::const_iterator boundary_value =
- boundary_values.begin();
- for ( ; boundary_value !=boundary_values.end(); ++boundary_value)
- {
- if (!constraints.is_constrained(boundary_value->first))
- {
- constraints.add_line (boundary_value->first);
- constraints.set_inhomogeneity (boundary_value->first,
- boundary_value->second);
- }
- }
- }
-
-
-
- template <int dim, int spacedim>
- void
- project_boundary_values (const DoFHandler<dim,spacedim> &dof,
- const typename FunctionMap<spacedim>::type &boundary_functions,
- const Quadrature<dim-1> &q,
- ConstraintMatrix &constraints,
- std::vector<unsigned int> component_mapping)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- project_boundary_values(StaticMappingQ1<dim,spacedim>::mapping, dof, boundary_functions, q,
- constraints, component_mapping);
- }
-
-
-
-
- namespace internal
- {
- /**
- * A structure that stores the dim DoF
- * indices that correspond to a
- * vector-valued quantity at a single
- * support point.
- */
- template <int dim>
- struct VectorDoFTuple
- {
- unsigned int dof_indices[dim];
-
- VectorDoFTuple ()
- {
- for (unsigned int i=0; i<dim; ++i)
- dof_indices[i] = numbers::invalid_unsigned_int;
- }
-
-
- bool operator < (const VectorDoFTuple<dim> &other) const
- {
- for (unsigned int i=0; i<dim; ++i)
- if (dof_indices[i] < other.dof_indices[i])
- return true;
- else
- if (dof_indices[i] > other.dof_indices[i])
- return false;
- return false;
- }
-
- bool operator == (const VectorDoFTuple<dim> &other) const
- {
- for (unsigned int i=0; i<dim; ++i)
- if (dof_indices[i] != other.dof_indices[i])
- return false;
-
- return true;
- }
-
- bool operator != (const VectorDoFTuple<dim> &other) const
- {
- return ! (*this == other);
- }
- };
-
-
-
- /**
- * Add the constraint
- * $\vec n \cdot \vec u = 0$
- * to the list of constraints.
- *
- * Here, $\vec u$ is represented
- * by the set of given DoF
- * indices, and $\vec n$ by the
- * vector specified as the second
- * argument.
- *
- * The function does not add constraints
- * if a degree of freedom is already
- * constrained in the constraints object.
- */
- template <int dim>
- void
- add_constraint (const VectorDoFTuple<dim> &dof_indices,
- const Tensor<1,dim> &constraining_vector,
- ConstraintMatrix &constraints)
- {
-
- // choose the DoF that has the
- // largest component in the
- // constraining_vector as the
- // one to be constrained as
- // this makes the process
- // stable in cases where the
- // constraining_vector has the
- // form n=(1,0) or n=(0,1)
- //
- // we get constraints of the form
- // x0 = a_1*x1 + a2*x2 + ...
- // if one of the weights is
- // essentially zero then skip
- // this part. the ConstraintMatrix
- // can also deal with cases like
- // x0 = 0
- // if necessary
- //
- // there is a problem if we have a
- // normal vector of the form
- // (a,a,small) or (a,a,a). Depending on
- // round-off we may choose the first or
- // second component (or third, in the
- // latter case) as the largest one, and
- // depending on our choice one or
- // another degree of freedom will be
- // constrained. On a single processor
- // this is not much of a problem, but
- // it's a nightmare when we run in
- // parallel and two processors disagree
- // on which DoF should be
- // constrained. This led to an
- // incredibly difficult to find bug in
- // step-32 when running in parallel
- // with 9 or more processors.
- //
- // in practice, such normal vectors of
- // the form (a,a,small) or (a,a,a)
- // happen not infrequently since they
- // lie on the diagonals where vertices
- // frequently happen to land upon mesh
- // refinement if one starts from a
- // symmetric and regular body. we work
- // around this problem in the following
- // way: if we have a normal vector of
- // the form (a,b) (similarly algorithm
- // in 3d), we choose 'a' as the largest
- // coefficient not if a>b but if
- // a>b+1e-10. this shifts the problem
- // away from the frequently visited
- // diagonal to a line that is off the
- // diagonal. there will of course be
- // problems where the exact values of a
- // and b differ by exactly 1e-10 and we
- // get into the same instability, but
- // from a practical viewpoint such
- // problems should be much rarer. in
- // particular, meshes have to be very
- // very fine for a vertex to land on
- // this line if the original body had a
- // vertex on the diagonal as well
- switch (dim)
- {
- case 2:
- {
- if (std::fabs(constraining_vector[0]) > std::fabs(constraining_vector[1]) + 1e-10)
- {
- if (!constraints.is_constrained(dof_indices.dof_indices[0])
- &&
- constraints.can_store_line(dof_indices.dof_indices[0]))
- {
- constraints.add_line (dof_indices.dof_indices[0]);
-
- if (std::fabs (constraining_vector[1]/constraining_vector[0])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[0],
- dof_indices.dof_indices[1],
- -constraining_vector[1]/constraining_vector[0]);
- }
- }
- else
- {
- if (!constraints.is_constrained(dof_indices.dof_indices[1])
- &&
- constraints.can_store_line(dof_indices.dof_indices[1]))
- {
- constraints.add_line (dof_indices.dof_indices[1]);
-
- if (std::fabs (constraining_vector[0]/constraining_vector[1])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[1],
- dof_indices.dof_indices[0],
- -constraining_vector[0]/constraining_vector[1]);
- }
- }
- break;
- }
-
- case 3:
- {
- if ((std::fabs(constraining_vector[0]) >= std::fabs(constraining_vector[1])+1e-10)
- &&
- (std::fabs(constraining_vector[0]) >= std::fabs(constraining_vector[2])+2e-10))
- {
- if (!constraints.is_constrained(dof_indices.dof_indices[0])
- &&
- constraints.can_store_line(dof_indices.dof_indices[0]))
- {
- constraints.add_line (dof_indices.dof_indices[0]);
-
- if (std::fabs (constraining_vector[1]/constraining_vector[0])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[0],
- dof_indices.dof_indices[1],
- -constraining_vector[1]/constraining_vector[0]);
-
- if (std::fabs (constraining_vector[2]/constraining_vector[0])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[0],
- dof_indices.dof_indices[2],
- -constraining_vector[2]/constraining_vector[0]);
- }
- }
- else
- if ((std::fabs(constraining_vector[1])+1e-10 >= std::fabs(constraining_vector[0]))
- &&
- (std::fabs(constraining_vector[1]) >= std::fabs(constraining_vector[2])+1e-10))
- {
- if (!constraints.is_constrained(dof_indices.dof_indices[1])
- &&
- constraints.can_store_line(dof_indices.dof_indices[1]))
- {
- constraints.add_line (dof_indices.dof_indices[1]);
-
- if (std::fabs (constraining_vector[0]/constraining_vector[1])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[1],
- dof_indices.dof_indices[0],
- -constraining_vector[0]/constraining_vector[1]);
-
- if (std::fabs (constraining_vector[2]/constraining_vector[1])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[1],
- dof_indices.dof_indices[2],
- -constraining_vector[2]/constraining_vector[1]);
- }
- }
- else
- {
- if (!constraints.is_constrained(dof_indices.dof_indices[2])
- &&
- constraints.can_store_line(dof_indices.dof_indices[2]))
- {
- constraints.add_line (dof_indices.dof_indices[2]);
-
- if (std::fabs (constraining_vector[0]/constraining_vector[2])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[2],
- dof_indices.dof_indices[0],
- -constraining_vector[0]/constraining_vector[2]);
-
- if (std::fabs (constraining_vector[1]/constraining_vector[2])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[2],
- dof_indices.dof_indices[1],
- -constraining_vector[1]/constraining_vector[2]);
- }
- }
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented());
- }
- }
-
-
- /**
- * Add the constraint $\vec u \|
- * \vec t$ to the list of
- * constraints. In 2d, this is a
- * single constraint, in 3d these
- * are two constraints
- *
- * Here, $\vec u$ is represented
- * by the set of given DoF
- * indices, and $\vec t$ by the
- * vector specified as the second
- * argument.
- *
- * The function does not add constraints
- * if a degree of freedom is already
- * constrained in the constraints object.
- */
- template <int dim>
- void
- add_tangentiality_constraints (const VectorDoFTuple<dim> &dof_indices,
- const Tensor<1,dim> &tangent_vector,
- ConstraintMatrix &constraints)
- {
-
- // choose the DoF that has the
- // largest component in the
- // tangent_vector as the
- // independent component, and
- // then constrain the others to
- // it. specifically, if, say,
- // component 0 of the tangent
- // vector t is largest by
- // magnitude, then
- // x1=t[1]/t[0]*x_0, etc.
- unsigned int largest_component = 0;
- for (unsigned int d=1; d<dim; ++d)
- if (std::fabs(tangent_vector[d]) > std::fabs(tangent_vector[largest_component]) + 1e-10)
- largest_component = d;
-
- // then constrain all of the
- // other degrees of freedom in
- // terms of the one just found
- for (unsigned int d=0; d<dim; ++d)
- if (d != largest_component)
- if (!constraints.is_constrained(dof_indices.dof_indices[d])
- &&
- constraints.can_store_line(dof_indices.dof_indices[d]))
- {
- constraints.add_line (dof_indices.dof_indices[d]);
-
- if (std::fabs (tangent_vector[d]/tangent_vector[largest_component])
- > std::numeric_limits<double>::epsilon())
- constraints.add_entry (dof_indices.dof_indices[d],
- dof_indices.dof_indices[largest_component],
- tangent_vector[d]/tangent_vector[largest_component]);
- }
- }
-
-
-
- /**
- * Given a vector, compute a set
- * of dim-1 vectors that are
- * orthogonal to the first one
- * and mutually orthonormal as
- * well.
- */
- template <int dim>
- void
- compute_orthonormal_vectors (const Tensor<1,dim> &vector,
- Tensor<1,dim> (&orthonormals)[dim-1])
- {
- switch (dim)
- {
- case 3:
- {
- // to do this in 3d, take
- // one vector that is
- // guaranteed to be not
- // aligned with the
- // average tangent and
- // form the cross
- // product. this yields
- // one vector that is
- // certainly
- // perpendicular to the
- // tangent; then take the
- // cross product between
- // this vector and the
- // tangent and get one
- // vector that is
- // perpendicular to both
-
- // construct a
- // temporary vector
- // by swapping the
- // larger two
- // components and
- // flipping one
- // sign; this can
- // not be collinear
- // with the average
- // tangent
- Tensor<1,dim> tmp = vector;
- if ((std::fabs(tmp[0]) > std::fabs(tmp[1]))
- &&
- (std::fabs(tmp[0]) > std::fabs(tmp[2])))
- {
- // entry zero
- // is the
- // largest
- if ((std::fabs(tmp[1]) > std::fabs(tmp[2])))
- std::swap (tmp[0], tmp[1]);
- else
- std::swap (tmp[0], tmp[2]);
-
- tmp[0] *= -1;
- }
- else if ((std::fabs(tmp[1]) > std::fabs(tmp[0]))
- &&
- (std::fabs(tmp[1]) > std::fabs(tmp[2])))
- {
- // entry one
- // is the
- // largest
- if ((std::fabs(tmp[0]) > std::fabs(tmp[2])))
- std::swap (tmp[1], tmp[0]);
- else
- std::swap (tmp[1], tmp[2]);
-
- tmp[1] *= -1;
- }
- else
- {
- // entry two
- // is the
- // largest
- if ((std::fabs(tmp[0]) > std::fabs(tmp[1])))
- std::swap (tmp[2], tmp[0]);
- else
- std::swap (tmp[2], tmp[1]);
-
- tmp[2] *= -1;
- }
-
- // make sure the two vectors
- // are indeed not collinear
- Assert (std::fabs(vector * tmp / vector.norm() / tmp.norm())
- <
- (1-1e-12),
- ExcInternalError());
-
- // now compute the
- // two normals
- cross_product (orthonormals[0], vector, tmp);
- cross_product (orthonormals[1], vector, orthonormals[0]);
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented());
- }
- }
- }
-
-
- namespace internals
- {
- // This function computes the
- // projection of the boundary
- // function on edges for 3D.
- template<typename cell_iterator>
- void
- compute_edge_projection (const cell_iterator& cell,
- const unsigned int face,
- const unsigned int line,
- hp::FEValues<3>& hp_fe_values,
- const Function<3>& boundary_function,
- const unsigned int first_vector_component,
- std::vector<double>& dof_values)
- {
- const double tol = 0.5 * cell->get_fe ().degree * 1e-13 / cell->face (face)->line (line)->diameter ();
- const unsigned int dim = 3;
- const unsigned int spacedim = 3;
-
- hp_fe_values.reinit
- (cell,
- (cell->active_fe_index () * GeometryInfo<dim>::faces_per_cell + face)
- * GeometryInfo<dim>::lines_per_face + line);
-
- // Initialize the required
- // objects.
- const FEValues<dim>&
- fe_values = hp_fe_values.get_present_fe_values ();
- const std::vector< DerivativeForm<1,dim,spacedim> > &
- jacobians = fe_values.get_jacobians ();
- const std::vector<Point<dim> >&
- quadrature_points = fe_values.get_quadrature_points ();
-
- std::vector<Point<dim> > tangentials (fe_values.n_quadrature_points);
- std::vector<Vector<double> > values (fe_values.n_quadrature_points,
- Vector<double> (cell->get_fe ().n_components ()));
-
- // Get boundary function values
- // at quadrature points.
- boundary_function.vector_value_list (quadrature_points, values);
-
- const std::vector<Point<dim> >&
- reference_quadrature_points = fe_values.get_quadrature ().get_points ();
- const unsigned int superdegree = cell->get_fe ().degree;
- const unsigned int degree = superdegree - 1;
-
- // coordinate directions of
- // the edges of the face.
- const unsigned int
- edge_coordinate_direction
- [GeometryInfo<dim>::faces_per_cell]
- [GeometryInfo<dim>::lines_per_face]
- = { { 2, 2, 1, 1 },
- { 2, 2, 1, 1 },
- { 0, 0, 2, 2 },
- { 0, 0, 2, 2 },
- { 1, 1, 0, 0 },
- { 1, 1, 0, 0 } };
- const FEValuesExtractors::Vector vec (first_vector_component);
-
- // The interpolation for the
- // lowest order edge shape
- // functions is just the mean
- // value of the tangential
- // components of the boundary
- // function on the edge.
- for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points;
- ++q_point)
- {
- // Therefore compute the
- // tangential of the edge at
- // the quadrature point.
- Point<dim> shifted_reference_point_1 = reference_quadrature_points[q_point];
- Point<dim> shifted_reference_point_2 = reference_quadrature_points[q_point];
-
- shifted_reference_point_1 (edge_coordinate_direction[face][line]) += tol;
- shifted_reference_point_2 (edge_coordinate_direction[face][line]) -= tol;
- tangentials[q_point]
- = (0.5 *
- (fe_values.get_mapping ()
- .transform_unit_to_real_cell (cell,
- shifted_reference_point_1)
- -
- fe_values.get_mapping ()
- .transform_unit_to_real_cell (cell,
- shifted_reference_point_2))
- / tol);
- tangentials[q_point]
- /= std::sqrt (tangentials[q_point].square ());
-
- // Compute the degrees of
- // freedom.
- for (unsigned int i = 0; i <= degree; ++i)
- dof_values[i + line * superdegree]
- += (fe_values.JxW (q_point)
- * (values[q_point] (first_vector_component) * tangentials[q_point] (0)
- + values[q_point] (first_vector_component + 1) * tangentials[q_point] (1)
- + values[q_point] (first_vector_component + 2) * tangentials[q_point] (2))
- * (fe_values[vec].value (cell->get_fe ().face_to_cell_index (i + line * superdegree,
- face),
- q_point)
- * tangentials[q_point])
- / std::sqrt (jacobians[q_point][0][edge_coordinate_direction[face][line]]
- * jacobians[q_point][0][edge_coordinate_direction[face][line]]
- + jacobians[q_point][1][edge_coordinate_direction[face][line]]
- * jacobians[q_point][1][edge_coordinate_direction[face][line]]
- + jacobians[q_point][2][edge_coordinate_direction[face][line]]
- * jacobians[q_point][2][edge_coordinate_direction[face][line]]));
- }
- }
-
- // dummy implementation of above
- // function for all other
- // dimensions
- template<int dim, typename cell_iterator>
- void
- compute_edge_projection (const cell_iterator&,
- const unsigned int,
- const unsigned int,
- hp::FEValues<dim>&,
- const Function<dim>&,
- const unsigned int,
- std::vector<double>&)
- {
- Assert (false, ExcInternalError ());
- }
-
- // This function computes the
- // projection of the boundary
- // function on the interior of
- // faces.
- template<int dim, typename cell_iterator>
- void
- compute_face_projection_curl_conforming (const cell_iterator& cell,
- const unsigned int face,
- hp::FEValues<dim>& hp_fe_values,
- const Function<dim>& boundary_function,
- const unsigned int first_vector_component,
- std::vector<double>& dof_values)
- {
- const unsigned int spacedim = dim;
- hp_fe_values.reinit (cell, cell->active_fe_index ()
- * GeometryInfo<dim>::faces_per_cell + face);
- // Initialize the required
- // objects.
- const FEValues<dim>&
- fe_values = hp_fe_values.get_present_fe_values ();
- const std::vector< DerivativeForm<1,dim,spacedim> > &
- jacobians = fe_values.get_jacobians ();
-
- std::vector<Vector<double> >
- values (fe_values.n_quadrature_points, Vector<double> (cell->get_fe ().n_components ()));
-
- switch (dim)
- {
- case 2:
- {
- const std::vector<Point<dim> >&
- quadrature_points = fe_values.get_quadrature_points ();
- std::vector<Point<dim> >
- tangentials (fe_values.n_quadrature_points);
-
- // Get boundary function
- // values at quadrature
- // points.
- boundary_function.vector_value_list (quadrature_points, values);
-
- const std::vector<Point<dim> >&
- reference_quadrature_points = fe_values.get_quadrature ().get_points ();
- const unsigned int degree = cell->get_fe ().degree - 1;
-
- // coordinate directions
- // of the face.
- const unsigned int
- face_coordinate_direction[GeometryInfo<dim>::faces_per_cell]
- = { 1, 1, 0, 0 };
- const FEValuesExtractors::Vector vec (first_vector_component);
-
- // The interpolation for
- // the lowest order face
- // shape functions is just
- // the mean value of the
- // tangential components
- // of the boundary function
- // on the edge.
- for (unsigned int q_point = 0;
- q_point < fe_values.n_quadrature_points; ++q_point)
- {
- // Therefore compute the
- // tangential of the
- // face at the quadrature
- // point.
- Point<dim> shifted_reference_point_1
- = reference_quadrature_points[q_point];
- Point<dim> shifted_reference_point_2
- = reference_quadrature_points[q_point];
-
- shifted_reference_point_1 (face_coordinate_direction[face])
- += 1e-13;
- shifted_reference_point_2 (face_coordinate_direction[face])
- -= 1e-13;
- tangentials[q_point]
- = 2e13
- * (fe_values.get_mapping ()
- .transform_unit_to_real_cell (cell,
- shifted_reference_point_1)
- -
- fe_values.get_mapping ()
- .transform_unit_to_real_cell (cell,
- shifted_reference_point_2));
- tangentials[q_point]
- /= std::sqrt (tangentials[q_point].square ());
- // Compute the degrees
- // of freedom.
- for (unsigned int i = 0; i <= degree; ++i)
- dof_values[i]
- += fe_values.JxW (q_point)
- * (values[q_point] (first_vector_component)
- * tangentials[q_point] (0)
- + values[q_point] (first_vector_component + 1)
- * tangentials[q_point] (1))
- * (fe_values[vec].value (cell->get_fe ().face_to_cell_index (i, face),
- q_point) * tangentials[q_point])
- / std::sqrt (jacobians[q_point][0][face_coordinate_direction[face]]
- * jacobians[q_point][0][face_coordinate_direction[face]]
- + jacobians[q_point][1][face_coordinate_direction[face]]
- * jacobians[q_point][1][face_coordinate_direction[face]]);
- }
-
- break;
- }
-
- case 3:
- {
- const std::vector<Point<dim> >&
- quadrature_points = fe_values.get_quadrature_points ();
-
- // Get boundary function
- // values at quadrature
- // points.
- boundary_function.vector_value_list (quadrature_points, values);
-
- const FEValuesExtractors::Vector vec (first_vector_component);
- const unsigned int superdegree = cell->get_fe ().degree;
- const unsigned int degree = superdegree - 1;
- FullMatrix<double>
- assembling_matrix (degree * superdegree,
- dim * fe_values.n_quadrature_points);
- Vector<double> assembling_vector (assembling_matrix.n ());
- Vector<double> cell_rhs (assembling_matrix.m ());
- FullMatrix<double> cell_matrix (assembling_matrix.m (),
- assembling_matrix.m ());
- FullMatrix<double> cell_matrix_inv (assembling_matrix.m (),
- assembling_matrix.m ());
- Vector<double> solution (cell_matrix.m ());
-
- // Get coordinate directions
- // of the face.
- const unsigned int
- global_face_coordinate_directions[GeometryInfo<3>::faces_per_cell][2]
- = { { 1, 2 },
- { 1, 2 },
- { 2, 0 },
- { 2, 0 },
- { 0, 1 },
- { 0, 1 } };
-
- // The projection is
- // divided into two steps.
- // In the first step we
- // project the boundary
- // function on the
- // horizontal shape
- // functions. Then the
- // bounary function is
- // projected on the
- // vertical shape
- // functions. We begin
- // with the horizontal
- // shape functions and
- // set up a linear system
- // of equations to get
- // the values for degrees
- // of freedom associated
- // with the interior of
- // the face.
- for (unsigned int q_point = 0;
- q_point < fe_values.n_quadrature_points; ++q_point)
- {
- // The right hand
- // side of the
- // corresponding problem
- // is the residual
- // of the boundary
- // function and
- // the already
- // interpolated part
- // on the edges.
- Tensor<1, dim> tmp;
-
- for (unsigned int d = 0; d < dim; ++d)
- tmp[d] = values[q_point] (first_vector_component + d);
-
- for (unsigned int i = 0; i < 2; ++i)
- for (unsigned int j = 0; j <= degree; ++j)
- tmp -= dof_values[(i + 2) * superdegree + j]
- * fe_values[vec].value (cell->get_fe ().face_to_cell_index
- ((i + 2) * superdegree + j,
- face), q_point);
-
- const double JxW
- = std::sqrt (fe_values.JxW (q_point)
- / ((jacobians[q_point][0][global_face_coordinate_directions[face][0]]
- * jacobians[q_point][0][global_face_coordinate_directions[face][0]]
- +
- jacobians[q_point][1][global_face_coordinate_directions[face][0]]
- * jacobians[q_point][1][global_face_coordinate_directions[face][0]]
- +
- jacobians[q_point][2][global_face_coordinate_directions[face][0]]
- * jacobians[q_point][2][global_face_coordinate_directions[face][0]])
- *
- (jacobians[q_point][0][global_face_coordinate_directions[face][1]]
- * jacobians[q_point][0][global_face_coordinate_directions[face][1]]
- +
- jacobians[q_point][1][global_face_coordinate_directions[face][1]]
- * jacobians[q_point][1][global_face_coordinate_directions[face][1]]
- +
- jacobians[q_point][2][global_face_coordinate_directions[face][1]]
- * jacobians[q_point][2][global_face_coordinate_directions[face][1]])));
-
- // In the weak form
- // the right hand
- // side function
- // is multiplicated
- // by the horizontal
- // shape functions
- // defined in the
- // interior of
- // the face.
- for (unsigned int d = 0; d < dim; ++d)
- assembling_vector (dim * q_point + d) = JxW * tmp[d];
-
- for (unsigned int i = 0; i <= degree; ++i)
- for (unsigned int j = 0; j < degree; ++j)
- {
- const Tensor<1, dim> shape_value
- = (JxW
- * fe_values[vec].value (cell->get_fe ()
- .face_to_cell_index
- ((i + GeometryInfo<dim>::lines_per_face)
- * degree
- + j
- + GeometryInfo<dim>::lines_per_face,
- face),
- q_point));
-
- for (unsigned int d = 0; d < dim; ++d)
- assembling_matrix (i * degree + j,
- dim * q_point + d)
- = shape_value[d];
- }
- }
-
- // Create the system
- // matrix by
- // multiplying the
- // assembling matrix
- // with its transposed
- // and the right
- // hand side vector
- // by mutliplying
- // the assembling
- // matrix with the
- // assembling vector.
- // Invert the system
- // matrix.
- assembling_matrix.mTmult (cell_matrix, assembling_matrix);
- cell_matrix_inv.invert (cell_matrix);
- assembling_matrix.vmult (cell_rhs, assembling_vector);
- cell_matrix_inv.vmult (solution, cell_rhs);
-
- // Store the computed
- // values.
- for (unsigned int i = 0; i <= degree; ++i)
- for (unsigned int j = 0; j < degree; ++j)
- dof_values[(i + GeometryInfo<dim>::lines_per_face)
- * degree + j + GeometryInfo<dim>::lines_per_face]
- = solution (i * degree + j);
-
- // Now we do the
- // same as above
- // with the vertical
- // shape functions
- // instead of the
- // horizontal ones.
- for (unsigned int q_point = 0;
- q_point < fe_values.n_quadrature_points; ++q_point)
- {
- Tensor<1, dim> tmp;
-
- for (unsigned int d = 0; d < dim; ++d)
- tmp[d] = values[q_point] (first_vector_component + d);
-
- for (unsigned int i = 0; i < 2; ++i)
- for (unsigned int j = 0; j <= degree; ++j)
- tmp
- -= dof_values[i * superdegree + j]
- * fe_values[vec].value (cell->get_fe ().face_to_cell_index
- (i * superdegree + j, face), q_point);
-
- const double JxW
- = std::sqrt (fe_values.JxW (q_point)
- / ((jacobians[q_point][0][global_face_coordinate_directions[face][0]]
- * jacobians[q_point][0][global_face_coordinate_directions[face][0]]
- +
- jacobians[q_point][1][global_face_coordinate_directions[face][0]]
- * jacobians[q_point][1][global_face_coordinate_directions[face][0]]
- +
- jacobians[q_point][2][global_face_coordinate_directions[face][0]]
- * jacobians[q_point][2][global_face_coordinate_directions[face][0]])
- *
- (jacobians[q_point][0][global_face_coordinate_directions[face][1]]
- * jacobians[q_point][0][global_face_coordinate_directions[face][1]]
- +
- jacobians[q_point][1][global_face_coordinate_directions[face][1]]
- * jacobians[q_point][1][global_face_coordinate_directions[face][1]]
- +
- jacobians[q_point][2][global_face_coordinate_directions[face][1]]
- * jacobians[q_point][2][global_face_coordinate_directions[face][1]])));
-
- for (unsigned int d = 0; d < dim; ++d)
- assembling_vector (dim * q_point + d) = JxW * tmp[d];
-
- for (unsigned int i = 0; i < degree; ++i)
- for (unsigned int j = 0; j <= degree; ++j)
- {
- const Tensor<1, dim> shape_value
- = (JxW
- * fe_values[vec].value (cell->get_fe ().face_to_cell_index
- ((i + degree + GeometryInfo<dim>::lines_per_face)
- * superdegree + j, face), q_point));
-
- for (unsigned int d = 0; d < dim; ++d)
- assembling_matrix (i * superdegree + j, dim * q_point + d)
- = shape_value[d];
- }
- }
-
- assembling_matrix.mTmult (cell_matrix, assembling_matrix);
- cell_matrix_inv.invert (cell_matrix);
- assembling_matrix.vmult (cell_rhs, assembling_vector);
- cell_matrix_inv.vmult (solution, cell_rhs);
-
- for (unsigned int i = 0; i < degree; ++i)
- for (unsigned int j = 0; j <= degree; ++j)
- dof_values[(i + degree + GeometryInfo<dim>::lines_per_face) * superdegree + j]
- = solution (i * superdegree + j);
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented ());
- }
- }
- }
-
-
-
-
- template <int dim>
- void
-
- project_boundary_values_curl_conforming (const DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const Mapping<dim>& mapping)
- {
- // Projection-based interpolation
- // is performed in two (in 2D)
- // respectively three (in 3D)
- // steps. First the tangential
- // component of the function is
- // interpolated on each edge. This
- // gives the values for the degrees
- // of freedom corresponding to the
- // edge shape functions. Now we are
- // done for 2D, but in 3D we possibly
- // have also degrees of freedom, which
- // are located in the interior of
- // the faces. Therefore we compute
- // the residual of the function
- // describing the boundary values
- // and the interpolated part, which
- // we have computed in the last
- // step. On the faces there are
- // two kinds of shape functions,
- // the horizontal and the vertical
- // ones. Thus we have to solve two
- // linear systems of equations of
- // size <tt>degree * (degree +
- // 1)<tt> to obtain the values for
- // the corresponding degrees of
- // freedom.
- const unsigned int superdegree = dof_handler.get_fe ().degree;
- const QGauss<dim - 1> reference_face_quadrature (2 * superdegree);
- const unsigned int dofs_per_face = dof_handler.get_fe ().dofs_per_face;
- hp::FECollection<dim> fe_collection (dof_handler.get_fe ());
- hp::MappingCollection<dim> mapping_collection (mapping);
- hp::QCollection<dim> face_quadrature_collection;
-
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- face_quadrature_collection.push_back
- (QProjector<dim>::project_to_face (reference_face_quadrature, face));
-
- hp::FEValues<dim> fe_face_values (mapping_collection, fe_collection,
- face_quadrature_collection,
- update_jacobians |
- update_JxW_values |
- update_quadrature_points |
- update_values);
-
- std::vector<double> dof_values (dofs_per_face);
- std::vector<unsigned int> face_dof_indices (dofs_per_face);
- typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
-
- switch (dim)
- {
- case 2:
- {
- for (; cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // if the FE is a
- // FE_Nothing object
- // there is no work to
- // do
- if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
- return;
-
- // This is only
- // implemented, if the
- // FE is a Nedelec
- // element. If the FE
- // is a FESystem, we
- // cannot check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0) {
- typedef FiniteElement<dim> FEL;
- AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
-
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- dof_values[dof] = 0.0;
-
- // Compute the
- // projection of the
- // boundary function on
- // the edge.
- internals
- ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
- boundary_function,
- first_vector_component,
- dof_values);
- cell->face (face)->get_dof_indices (face_dof_indices,
- cell->active_fe_index ());
-
- // Add the computed
- // constraints to the
- // constraint matrix,
- // if the degree of
- // freedom is not
- // already constrained.
- const double tol = 1e-13;
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- if (!(constraints.is_constrained (face_dof_indices[dof])))
- {
- constraints.add_line (face_dof_indices[dof]);
-
- if (std::abs (dof_values[dof]) > tol)
- constraints.set_inhomogeneity (face_dof_indices[dof], dof_values[dof]);
- }
- }
-
- break;
- }
-
- case 3:
- {
- const QGauss<dim - 2> reference_edge_quadrature (2 * superdegree);
- const unsigned int degree = superdegree - 1;
- const unsigned int n_dofs = dof_handler.n_dofs ();
- hp::QCollection<dim> edge_quadrature_collection;
-
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- for (unsigned int line = 0; line < GeometryInfo<dim>::lines_per_face; ++line)
- edge_quadrature_collection.push_back
- (QProjector<dim>::project_to_face
- (QProjector<dim - 1>::project_to_face
- (reference_edge_quadrature, line), face));
-
- hp::FEValues<dim> fe_edge_values (mapping_collection, fe_collection,
- edge_quadrature_collection,
- update_jacobians |
- update_JxW_values |
- update_quadrature_points |
- update_values);
- std::vector<double> computed_constraints (n_dofs);
- std::vector<int> projected_dofs (n_dofs);
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof) {
- computed_constraints[dof] = 0.0;
- projected_dofs[dof] = -1;
- }
-
- for (; cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // if the FE is a
- // FE_Nothing object
- // there is no work to
- // do
- if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
- return;
-
- // This is only
- // implemented, if the
- // FE is a Nedelec
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- dof_values[dof] = 0.0;
-
- cell->face (face)->get_dof_indices (face_dof_indices,
- cell->active_fe_index ());
-
- // First we compute the
- // projection on the
- // edges.
- for (unsigned int line = 0;
- line < GeometryInfo<3>::lines_per_face; ++line)
- {
- // If we have reached
- // this edge through
- // another cell
- // before, we do not
- // do here anything
- // unless we have a
- // good reason, i.e.
- // a higher
- // polynomial degree.
- if (projected_dofs[face_dof_indices[line * superdegree]]
- <
- (int) degree)
- {
- // Compute the
- // projection of
- // the boundary
- // function on the
- // edge.
- internals
- ::compute_edge_projection (cell, face, line,
- fe_edge_values,
- boundary_function,
- first_vector_component,
- dof_values);
- // Mark the
- // projected
- // degrees of
- // freedom.
- for (unsigned int dof = line * superdegree;
- dof < (line + 1) * superdegree; ++dof)
- projected_dofs[face_dof_indices[dof]] = degree;
- }
-
- // If we have
- // computed the
- // values in a
- // previous step of
- // the loop, we just
- // copy the values in
- // the local vector.
- else
- for (unsigned int dof = line * superdegree;
- dof < (line + 1) * superdegree; ++dof)
- dof_values[dof] = computed_constraints[face_dof_indices[dof]];
- }
-
- // If there are higher
- // order shape
- // functions, there is
- // still some work
- // left.
- if (degree > 0)
- {
- // Compute the
- // projection of the
- // boundary function
- // on the interior of
- // the face.
- internals
- ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
- boundary_function,
- first_vector_component,
- dof_values);
-
- // Mark the projected
- // degrees of
- // freedom.
- for (unsigned int dof = GeometryInfo<dim>::lines_per_face * superdegree;
- dof < dofs_per_face; ++dof)
- projected_dofs[face_dof_indices[dof]] = degree;
- }
-
- // Store the computed
- // values in the global
- // vector.
- const double tol = 0.5 * superdegree * 1e-13 / cell->face (face)->diameter ();
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- if (std::abs (computed_constraints[face_dof_indices[dof]] - dof_values[dof]) > tol)
- computed_constraints[face_dof_indices[dof]] = dof_values[dof];
- }
-
- // Add the computed constraints
- // to the constraint matrix, if
- // the degree of freedom is not
- // already constrained.
- for (unsigned int dof = 0; dof < n_dofs; ++dof)
- if ((projected_dofs[dof] != -1) && !(constraints.is_constrained (dof)))
- {
- constraints.add_line (dof);
- constraints.set_inhomogeneity (dof, computed_constraints[dof]);
- }
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented ());
- }
- }
-
-
-
- template <int dim>
- void
-
- project_boundary_values_curl_conforming (const hp::DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const hp::MappingCollection<dim>& mapping_collection)
- {
- hp::FECollection<dim> fe_collection (dof_handler.get_fe ());
- hp::QCollection<dim> face_quadrature_collection;
-
- for (unsigned int i = 0; i < fe_collection.size (); ++i)
- {
- const QGauss<dim - 1>
- reference_face_quadrature (2 * fe_collection[i].degree);
-
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- face_quadrature_collection.push_back
- (QProjector<dim>::project_to_face (reference_face_quadrature, face));
- }
-
- hp::FEValues<dim> fe_face_values (mapping_collection, fe_collection,
- face_quadrature_collection,
- update_jacobians |
- update_JxW_values |
- update_quadrature_points |
- update_values);
- std::vector<double> dof_values;
- std::vector<unsigned int> face_dof_indices;
- typename hp::DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
-
- switch (dim)
- {
- case 2:
- {
- for (; cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // if the FE is a
- // FE_Nothing object
- // there is no work to
- // do
- if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
- return;
-
- // This is only
- // implemented, if the
- // FE is a Nedelec
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- const unsigned int dofs_per_face = cell->get_fe ().dofs_per_face;
-
- dof_values.resize (dofs_per_face);
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- dof_values[dof] = 0.0;
-
- internals
- ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
- boundary_function,
- first_vector_component,
- dof_values);
- face_dof_indices.resize (dofs_per_face);
- cell->face (face)->get_dof_indices (face_dof_indices,
- cell->active_fe_index ());
-
- const double tol = 0.5 * cell->get_fe ().degree * 1e-13 / cell->face (face)->diameter ();
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- if (!(constraints.is_constrained (face_dof_indices[dof])))
- {
- constraints.add_line (face_dof_indices[dof]);
-
- if (std::abs (dof_values[dof]) > tol)
- constraints.set_inhomogeneity (face_dof_indices[dof], dof_values[dof]);
- }
- }
-
- break;
- }
-
- case 3:
- {
- const unsigned int n_dofs = dof_handler.n_dofs ();
- hp::QCollection<dim> edge_quadrature_collection;
-
- for (unsigned int i = 0; i < fe_collection.size (); ++i)
- {
- const QGauss<dim - 2>
- reference_edge_quadrature (2 * fe_collection[i].degree);
-
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- for (unsigned int line = 0; line < GeometryInfo<dim>::lines_per_face; ++line)
- edge_quadrature_collection.push_back
- (QProjector<dim>::project_to_face
- (QProjector<dim - 1>::project_to_face (reference_edge_quadrature, line),
- face));
- }
-
- hp::FEValues<dim> fe_edge_values (mapping_collection, fe_collection,
- edge_quadrature_collection,
- update_jacobians |
- update_JxW_values |
- update_quadrature_points |
- update_values);
- std::vector<double> computed_constraints (n_dofs);
- std::vector<int> projected_dofs (n_dofs);
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof) {
- computed_constraints[dof] = 0.0;
- projected_dofs[dof] = -1;
- }
-
- for (; cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // if the FE is a
- // FE_Nothing object
- // there is no work to
- // do
- if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
- return;
-
- // This is only
- // implemented, if the
- // FE is a Nedelec
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_Nedelec<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- const unsigned int superdegree = cell->get_fe ().degree;
- const unsigned int degree = superdegree - 1;
- const unsigned int dofs_per_face = cell->get_fe ().dofs_per_face;
-
- dof_values.resize (dofs_per_face);
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- dof_values[dof] = 0.0;
-
- face_dof_indices.resize (dofs_per_face);
- cell->face (face)->get_dof_indices (face_dof_indices,
- cell->active_fe_index ());
-
- for (unsigned int line = 0;
- line < GeometryInfo<dim>::lines_per_face; ++line)
- {
- if (projected_dofs[face_dof_indices[line * superdegree]]
- <
- (int) degree)
- {
- internals
- ::compute_edge_projection (cell, face, line,
- fe_edge_values,
- boundary_function,
- first_vector_component,
- dof_values);
-
- for (unsigned int dof = line * superdegree;
- dof < (line + 1) * superdegree; ++dof)
- projected_dofs[face_dof_indices[dof]] = degree;
- }
-
- else
- for (unsigned int dof = line * superdegree;
- dof < (line + 1) * superdegree; ++dof)
- dof_values[dof] = computed_constraints[face_dof_indices[dof]];
- }
-
- if (degree > 0)
- {
- internals
- ::compute_face_projection_curl_conforming (cell, face, fe_face_values,
- boundary_function,
- first_vector_component,
- dof_values);
-
- for (unsigned int dof = GeometryInfo<dim>::lines_per_face * superdegree;
- dof < dofs_per_face; ++dof)
- projected_dofs[face_dof_indices[dof]] = degree;
- }
-
- const double tol = 0.5 * superdegree * 1e-13 / cell->face (face)->diameter ();
-
- for (unsigned int dof = 0; dof < dofs_per_face; ++dof)
- if (std::abs (computed_constraints[face_dof_indices[dof]] - dof_values[dof]) > tol)
- computed_constraints[face_dof_indices[dof]] = dof_values[dof];
- }
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof)
- if ((projected_dofs[dof] != -1) && !(constraints.is_constrained (dof)))
- {
- constraints.add_line (dof);
- constraints.set_inhomogeneity (dof, computed_constraints[dof]);
- }
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented ());
- }
- }
-
-
- namespace internals
- {
- // This function computes the
- // projection of the boundary
- // function on the boundary
- // in 2d.
- template <typename cell_iterator>
- void
- compute_face_projection_div_conforming (const cell_iterator& cell,
- const unsigned int face,
- const FEFaceValues<2>& fe_values,
- const unsigned int first_vector_component,
- const Function<2>& boundary_function,
- const std::vector<DerivativeForm<1,2,2> > & jacobians,
- ConstraintMatrix& constraints)
- {
- // Compute the intergral over
- // the product of the normal
- // components of the boundary
- // function times the normal
- // components of the shape
- // functions supported on the
- // boundary.
- const FEValuesExtractors::Vector vec (first_vector_component);
- const FiniteElement<2>& fe = cell->get_fe ();
- const std::vector<Point<2> >& normals = fe_values.get_normal_vectors ();
- const unsigned int
- face_coordinate_direction[GeometryInfo<2>::faces_per_cell] = {1, 1, 0, 0};
- std::vector<Vector<double> >
- values (fe_values.n_quadrature_points, Vector<double> (2));
- Vector<double> dof_values (fe.dofs_per_face);
-
- // Get the values of the
- // boundary function at the
- // quadrature points.
- {
- const std::vector<Point<2> >&
- quadrature_points = fe_values.get_quadrature_points ();
-
- boundary_function.vector_value_list (quadrature_points, values);
- }
-
- for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points; ++q_point)
- {
- double tmp = 0.0;
-
- for (unsigned int d = 0; d < 2; ++d)
- tmp += normals[q_point][d] * values[q_point] (d);
-
- tmp *= fe_values.JxW (q_point)
- * std::sqrt (jacobians[q_point][0][face_coordinate_direction[face]]
- * jacobians[q_point][0][face_coordinate_direction[face]]
- + jacobians[q_point][1][face_coordinate_direction[face]]
- * jacobians[q_point][1][face_coordinate_direction[face]]);
-
- for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
- dof_values (i) += tmp * (normals[q_point]
- * fe_values[vec].value (fe.face_to_cell_index (i, face), q_point));
- }
-
- std::vector<unsigned int> face_dof_indices (fe.dofs_per_face);
-
- cell->face (face)->get_dof_indices (face_dof_indices, cell->active_fe_index ());
-
- // Copy the computed values
- // in the ConstraintMatrix only,
- // if the degree of freedom is
- // not already constrained.
- for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
- if (!(constraints.is_constrained (face_dof_indices[i])))
- {
- constraints.add_line (face_dof_indices[i]);
-
- if (std::abs (dof_values (i)) > 1e-14)
- constraints.set_inhomogeneity (face_dof_indices[i], dof_values (i));
- }
- }
-
- // dummy implementation of above
- // function for all other
- // dimensions
- template<int dim, typename cell_iterator>
- void
- compute_face_projection_div_conforming (const cell_iterator&,
- const unsigned int,
- const FEFaceValues<dim>&,
- const unsigned int,
- const Function<dim>&,
- const std::vector<DerivativeForm<1,dim,dim> >&,
- ConstraintMatrix&)
- {
- Assert (false, ExcNotImplemented ());
- }
-
- // This function computes the
- // projection of the boundary
- // function on the boundary
- // in 3d.
- template<typename cell_iterator>
- void
- compute_face_projection_div_conforming (const cell_iterator& cell,
- const unsigned int face,
- const FEFaceValues<3>& fe_values,
- const unsigned int first_vector_component,
- const Function<3>& boundary_function,
- const std::vector<DerivativeForm<1,3,3> >& jacobians,
- std::vector<double>& dof_values,
- std::vector<unsigned int>& projected_dofs)
- {
- // Compute the intergral over
- // the product of the normal
- // components of the boundary
- // function times the normal
- // components of the shape
- // functions supported on the
- // boundary.
- const FEValuesExtractors::Vector vec (first_vector_component);
- const FiniteElement<3>& fe = cell->get_fe ();
- const std::vector<Point<3> >& normals = fe_values.get_normal_vectors ();
- const unsigned int
- face_coordinate_directions[GeometryInfo<3>::faces_per_cell][2] = {{1, 2},
- {1, 2},
- {2, 0},
- {2, 0},
- {0, 1},
- {0, 1}};
- std::vector<Vector<double> >
- values (fe_values.n_quadrature_points, Vector<double> (3));
- Vector<double> dof_values_local (fe.dofs_per_face);
-
- {
- const std::vector<Point<3> >&
- quadrature_points = fe_values.get_quadrature_points ();
-
- boundary_function.vector_value_list (quadrature_points, values);
- }
-
- for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points; ++q_point)
- {
- double tmp = 0.0;
-
- for (unsigned int d = 0; d < 3; ++d)
- tmp += normals[q_point][d] * values[q_point] (d);
-
- tmp *= fe_values.JxW (q_point)
- * std::sqrt ((jacobians[q_point][0][face_coordinate_directions[face][0]]
- * jacobians[q_point][0][face_coordinate_directions[face][0]]
- + jacobians[q_point][1][face_coordinate_directions[face][0]]
- * jacobians[q_point][1][face_coordinate_directions[face][0]]
- + jacobians[q_point][2][face_coordinate_directions[face][0]]
- * jacobians[q_point][2][face_coordinate_directions[face][0]])
- * (jacobians[q_point][0][face_coordinate_directions[face][1]]
- * jacobians[q_point][0][face_coordinate_directions[face][1]]
- + jacobians[q_point][1][face_coordinate_directions[face][1]]
- * jacobians[q_point][1][face_coordinate_directions[face][1]]
- + jacobians[q_point][2][face_coordinate_directions[face][1]]
- * jacobians[q_point][2][face_coordinate_directions[face][1]]));
-
- for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
- dof_values_local (i) += tmp * (normals[q_point]
- * fe_values[vec].value (fe.face_to_cell_index (i, face), q_point));
- }
-
- std::vector<unsigned int> face_dof_indices (fe.dofs_per_face);
-
- cell->face (face)->get_dof_indices (face_dof_indices, cell->active_fe_index ());
-
- for (unsigned int i = 0; i < fe.dofs_per_face; ++i)
- if (projected_dofs[face_dof_indices[i]] < fe.degree)
- {
- dof_values[face_dof_indices[i]] = dof_values_local (i);
- projected_dofs[face_dof_indices[i]] = fe.degree;
- }
- }
-
- // dummy implementation of above
- // function for all other
- // dimensions
- template<int dim, typename cell_iterator>
- void
- compute_face_projection_div_conforming (const cell_iterator&,
- const unsigned int,
- const FEFaceValues<dim>&,
- const unsigned int,
- const Function<dim>&,
- const std::vector<DerivativeForm<1,dim,dim> > &,
- std::vector<double>&,
- std::vector<unsigned int>&)
- {
- Assert (false, ExcNotImplemented ());
- }
- }
-
-
- template <int dim>
- void
- project_boundary_values_div_conforming (const DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const Mapping<dim>& mapping)
- {
- const unsigned int spacedim = dim;
- // Interpolate the normal components
- // of the boundary functions. Since
- // the Raviart-Thomas elements are
- // constructed from a Lagrangian
- // basis, it suffices to compute
- // the integral over the product
- // of the normal components of the
- // boundary function times the
- // normal components of the shape
- // functions supported on the
- // boundary.
- const FiniteElement<dim>& fe = dof_handler.get_fe ();
- QGauss<dim - 1> face_quadrature (fe.degree + 1);
- FEFaceValues<dim> fe_face_values (mapping, fe, face_quadrature, update_JxW_values |
- update_normal_vectors |
- update_quadrature_points |
- update_values);
- hp::FECollection<dim> fe_collection (fe);
- hp::MappingCollection<dim> mapping_collection (mapping);
- hp::QCollection<dim> quadrature_collection;
-
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- quadrature_collection.push_back (QProjector<dim>::project_to_face (face_quadrature,
- face));
-
- hp::FEValues<dim> fe_values (mapping_collection, fe_collection, quadrature_collection,
- update_jacobians);
-
- switch (dim)
- {
- case 2:
- {
- for (typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
- cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // if the FE is a
- // FE_Nothing object
- // there is no work to
- // do
- if (dynamic_cast<const FE_Nothing<dim>*> (&cell->get_fe ()) != 0)
- return;
-
- // This is only
- // implemented, if the
- // FE is a Raviart-Thomas
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- fe_values.reinit (cell, face + cell->active_fe_index ()
- * GeometryInfo<dim>::faces_per_cell);
-
- const std::vector<DerivativeForm<1,dim,spacedim> > &
- jacobians = fe_values.get_present_fe_values ().get_jacobians ();
-
- fe_face_values.reinit (cell, face);
- internals::compute_face_projection_div_conforming (cell, face,
- fe_face_values,
- first_vector_component,
- boundary_function,
- jacobians,
- constraints);
- }
-
- break;
- }
-
- case 3:
- {
- // In three dimensions the
- // edges between two faces
- // are treated twice.
- // Therefore we store the
- // computed values in a
- // vector and copy them over
- // in the ConstraintMatrix
- // after all values have been
- // computed.
- // If we have two values for
- // one edge, we choose the one,
- // which was computed with the
- // higher order element.
- // If both elements are of the
- // same order, we just keep the
- // first value and do not
- // compute a second one.
- const unsigned int& n_dofs = dof_handler.n_dofs ();
- std::vector<double> dof_values (n_dofs);
- std::vector<unsigned int> projected_dofs (n_dofs);
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof)
- projected_dofs[dof] = 0;
-
- for (typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
- cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // This is only
- // implemented, if the
- // FE is a Raviart-Thomas
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- fe_values.reinit (cell, face + cell->active_fe_index ()
- * GeometryInfo<dim>::faces_per_cell);
-
- const std::vector<DerivativeForm<1,dim ,spacedim> >&
- jacobians = fe_values.get_present_fe_values ().get_jacobians ();
-
- fe_face_values.reinit (cell, face);
- internals::compute_face_projection_div_conforming (cell, face,
- fe_face_values,
- first_vector_component,
- boundary_function,
- jacobians, dof_values,
- projected_dofs);
- }
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof)
- if ((projected_dofs[dof] != 0) && !(constraints.is_constrained (dof)))
- {
- constraints.add_line (dof);
-
- if (std::abs (dof_values[dof]) > 1e-14)
- constraints.set_inhomogeneity (dof, dof_values[dof]);
- }
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented ());
- }
- }
-
-
- template <int dim>
- void
- project_boundary_values_div_conforming (const hp::DoFHandler<dim>& dof_handler,
- const unsigned int first_vector_component,
- const Function<dim>& boundary_function,
- const types::boundary_id_t boundary_component,
- ConstraintMatrix& constraints,
- const hp::MappingCollection<dim, dim>& mapping_collection)
- {
- const unsigned int spacedim = dim;
- const hp::FECollection<dim>& fe_collection = dof_handler.get_fe ();
- hp::QCollection<dim - 1> face_quadrature_collection;
- hp::QCollection<dim> quadrature_collection;
-
- for (unsigned int i = 0; i < fe_collection.size (); ++i)
- {
- const QGauss<dim - 1> quadrature (fe_collection[i].degree + 1);
-
- face_quadrature_collection.push_back (quadrature);
-
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- quadrature_collection.push_back (QProjector<dim>::project_to_face (quadrature,
- face));
- }
-
- hp::FEFaceValues<dim> fe_face_values (mapping_collection, fe_collection,
- face_quadrature_collection, update_JxW_values |
- update_normal_vectors |
- update_quadrature_points |
- update_values);
- hp::FEValues<dim> fe_values (mapping_collection, fe_collection, quadrature_collection,
- update_jacobians);
-
- switch (dim)
- {
- case 2:
- {
- for (typename hp::DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
- cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // This is only
- // implemented, if the
- // FE is a Raviart-Thomas
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- fe_values.reinit (cell, face + cell->active_fe_index ()
- * GeometryInfo<dim>::faces_per_cell);
-
- const std::vector<DerivativeForm<1,dim,spacedim> > &
- jacobians = fe_values.get_present_fe_values ().get_jacobians ();
-
- fe_face_values.reinit (cell, face);
- internals::compute_face_projection_div_conforming (cell, face,
- fe_face_values.get_present_fe_values (),
- first_vector_component,
- boundary_function,
- jacobians,
- constraints);
- }
-
- break;
- }
-
- case 3:
- {
- const unsigned int& n_dofs = dof_handler.n_dofs ();
- std::vector<double> dof_values (n_dofs);
- std::vector<unsigned int> projected_dofs (n_dofs);
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof)
- projected_dofs[dof] = 0;
-
- for (typename hp::DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active ();
- cell != dof_handler.end (); ++cell)
- if (cell->at_boundary ())
- for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)
- if (cell->face (face)->boundary_indicator () == boundary_component)
- {
- // This is only
- // implemented, if the
- // FE is a Raviart-Thomas
- // element. If the FE is
- // a FESystem we cannot
- // check this.
- if (dynamic_cast<const FESystem<dim>*> (&cell->get_fe ()) == 0)
- {
- typedef FiniteElement<dim> FEL;
-
- AssertThrow (dynamic_cast<const FE_RaviartThomas<dim>*> (&cell->get_fe ()) != 0,
- typename FEL::ExcInterpolationNotImplemented ());
- }
-
- fe_values.reinit (cell, face + cell->active_fe_index ()
- * GeometryInfo<dim>::faces_per_cell);
-
- const std::vector<DerivativeForm<1,dim,spacedim> > &
- jacobians = fe_values.get_present_fe_values ().get_jacobians ();
-
- fe_face_values.reinit (cell, face);
- internals::compute_face_projection_div_conforming (cell, face,
- fe_face_values.get_present_fe_values (),
- first_vector_component,
- boundary_function,
- jacobians, dof_values,
- projected_dofs);
- }
-
- for (unsigned int dof = 0; dof < n_dofs; ++dof)
- if ((projected_dofs[dof] != 0) && !(constraints.is_constrained (dof)))
- {
- constraints.add_line (dof);
-
- if (std::abs (dof_values[dof]) > 1e-14)
- constraints.set_inhomogeneity (dof, dof_values[dof]);
- }
-
- break;
- }
-
- default:
- Assert (false, ExcNotImplemented ());
- }
- }
-
-
-
- template <int dim, template <int, int> class DH, int spacedim>
- void
- compute_no_normal_flux_constraints (const DH<dim,spacedim> &dof_handler,
- const unsigned int first_vector_component,
- const std::set<types::boundary_id_t> &boundary_ids,
- ConstraintMatrix &constraints,
- const Mapping<dim, spacedim> &mapping)
- {
- Assert (dim > 1,
- ExcMessage ("This function is not useful in 1d because it amounts "
- "to imposing Dirichlet values on the vector-valued "
- "quantity."));
-
- std::vector<unsigned int> face_dofs;
-
- // create FE and mapping
- // collections for all elements in
- // use by this DoFHandler
- hp::FECollection<dim,spacedim> fe_collection (dof_handler.get_fe());
- hp::MappingCollection<dim,spacedim> mapping_collection;
- for (unsigned int i=0; i<fe_collection.size(); ++i)
- mapping_collection.push_back (mapping);
-
- // now also create a quadrature
- // collection for the faces of a
- // cell. fill it with a quadrature
- // formula with the support points
- // on faces for each FE
- hp::QCollection<dim-1> face_quadrature_collection;
- for (unsigned int i=0; i<fe_collection.size(); ++i)
- {
- const std::vector<Point<dim-1> > &
- unit_support_points = fe_collection[i].get_unit_face_support_points();
-
- Assert (unit_support_points.size() == fe_collection[i].dofs_per_face,
- ExcInternalError());
-
- face_quadrature_collection
- .push_back (Quadrature<dim-1> (unit_support_points));
- }
-
- // now create the object with which
- // we will generate the normal
- // vectors
- hp::FEFaceValues<dim,spacedim> x_fe_face_values (mapping_collection,
- fe_collection,
- face_quadrature_collection,
- update_q_points);
-
- // have a map that stores normal
- // vectors for each vector-dof
- // tuple we want to
- // constrain. since we can get at
- // the same vector dof tuple more
- // than once (for example if it is
- // located at a vertex that we
- // visit from all adjacent cells),
- // we will want to average later on
- // the normal vectors computed on
- // different cells as described in
- // the documentation of this
- // function. however, we can only
- // average if the contributions
- // came from different cells,
- // whereas we want to constrain
- // twice or more in case the
- // contributions came from
- // different faces of the same cell
- // (i.e. constrain not just the
- // *average normal direction* but
- // *all normal directions* we
- // find). consequently, we also
- // have to store which cell a
- // normal vector was computed on
- typedef
- std::multimap<internal::VectorDoFTuple<dim>,
- std::pair<Tensor<1,dim>, typename DH<dim,spacedim>::active_cell_iterator> >
- DoFToNormalsMap;
-
- DoFToNormalsMap dof_to_normals_map;
-
- // now loop over all cells and all faces
- typename DH<dim,spacedim>::active_cell_iterator
- cell = dof_handler.begin_active(),
- endc = dof_handler.end();
- for (; cell!=endc; ++cell)
- if (!cell->is_artificial())
- for (unsigned int face_no=0; face_no < GeometryInfo<dim>::faces_per_cell;
- ++face_no)
- if (boundary_ids.find(cell->face(face_no)->boundary_indicator())
- != boundary_ids.end())
- {
- const FiniteElement<dim>& fe = cell->get_fe ();
- typename DH<dim,spacedim>::face_iterator face = cell->face(face_no);
-
- // get the indices of the
- // dofs on this cell...
- face_dofs.resize (fe.dofs_per_face);
- face->get_dof_indices (face_dofs, cell->active_fe_index());
-
- x_fe_face_values.reinit (cell, face_no);
- const FEFaceValues<dim> &fe_values = x_fe_face_values.get_present_fe_values();
-
- // then identify which of
- // them correspond to the
- // selected set of vector
- // components
- for (unsigned int i=0; i<face_dofs.size(); ++i)
- if (fe.face_system_to_component_index(i).first ==
- first_vector_component)
- {
- // find corresponding other
- // components of vector
- internal::VectorDoFTuple<dim> vector_dofs;
- vector_dofs.dof_indices[0] = face_dofs[i];
-
- for (unsigned int k=0; k<fe.dofs_per_face; ++k)
- if ((k != i)
- &&
- (face_quadrature_collection[cell->active_fe_index()].point(k) ==
- face_quadrature_collection[cell->active_fe_index()].point(i))
- &&
- (fe.face_system_to_component_index(k).first >=
- first_vector_component)
- &&
- (fe.face_system_to_component_index(k).first <
- first_vector_component + dim))
- vector_dofs.dof_indices[fe.face_system_to_component_index(k).first -
- first_vector_component]
- = face_dofs[k];
-
- for (unsigned int d=0; d<dim; ++d)
- Assert (vector_dofs.dof_indices[d] < dof_handler.n_dofs(),
- ExcInternalError());
-
- // we need the normal
- // vector on this face. we
- // know that it is a vector
- // of length 1 but at least
- // with higher order
- // mappings it isn't always
- // possible to guarantee
- // that each component is
- // exact up to zero
- // tolerance. in
- // particular, as shown in
- // the deal.II/no_flux_06
- // test, if we just take
- // the normal vector as
- // given by the fe_values
- // object, we can get
- // entries in the normal
- // vectors of the unit cube
- // that have entries up to
- // several times 1e-14.
- //
- // the problem with this is
- // that this later yields
- // constraints that are
- // circular (e.g., in the
- // testcase, we get
- // constraints of the form
- //
- // x22 = 2.93099e-14*x21 + 2.93099e-14*x23
- // x21 = -2.93099e-14*x22 + 2.93099e-14*x21
- //
- // in both of these
- // constraints, the small
- // numbers should be zero
- // and the constraints
- // should simply be
- // x22 = x21 = 0
- //
- // to achieve this, we
- // utilize that we know
- // that the normal vector
- // has (or should have)
- // length 1 and that we can
- // simply set small
- // elements to zero
- // (without having to check
- // that they are small
- // *relative to something
- // else*). we do this and
- // then normalize the
- // length of the vector
- // back to one, just to be
- // on the safe side
- Point<dim> normal_vector
- = (cell->face(face_no)->get_boundary()
- .normal_vector (cell->face(face_no),
- fe_values.quadrature_point(i)));
- Assert (std::fabs(normal_vector.norm() - 1) < 1e-14,
- ExcInternalError());
- for (unsigned int d=0; d<dim; ++d)
- if (std::fabs(normal_vector[d]) < 1e-13)
- normal_vector[d] = 0;
- normal_vector /= normal_vector.norm();
-
- // now enter the
- // (dofs,(normal_vector,cell))
- // entry into the map
- dof_to_normals_map
- .insert (std::make_pair (vector_dofs,
- std::make_pair (normal_vector,
- cell)));
- }
- }
-
- // Now do something with the
- // collected information. To this
- // end, loop through all sets of
- // pairs (dofs,normal_vector) and
- // identify which entries belong to
- // the same set of dofs and then do
- // as described in the
- // documentation, i.e. either
- // average the normal vector or
- // don't for this particular set of
- // dofs
- typename DoFToNormalsMap::const_iterator
- p = dof_to_normals_map.begin();
-
- while (p != dof_to_normals_map.end())
- {
- // first find the range of entries in
- // the multimap that corresponds to the
- // same vector-dof tuple. as usual, we
- // define the range half-open. the
- // first entry of course is 'p'
- typename DoFToNormalsMap::const_iterator same_dof_range[2]
- = { p };
- for (++p; p != dof_to_normals_map.end(); ++p)
- if (p->first != same_dof_range[0]->first)
- {
- same_dof_range[1] = p;
- break;
- }
- if (p == dof_to_normals_map.end())
- same_dof_range[1] = dof_to_normals_map.end();
-
- // now compute the reverse mapping: for
- // each of the cells that contributed
- // to the current set of vector dofs,
- // add up the normal vectors. the
- // values of the map are pairs of
- // normal vectors and number of cells
- // that have contributed
- typedef
- std::map
- <typename DH<dim,spacedim>::active_cell_iterator,
- std::pair<Tensor<1,dim>, unsigned int> >
- CellToNormalsMap;
-
- CellToNormalsMap cell_to_normals_map;
- for (typename DoFToNormalsMap::const_iterator
- q = same_dof_range[0];
- q != same_dof_range[1]; ++q)
- if (cell_to_normals_map.find (q->second.second)
- == cell_to_normals_map.end())
- cell_to_normals_map[q->second.second]
- = std::make_pair (q->second.first, 1U);
- else
- {
- const Tensor<1,dim> old_normal
- = cell_to_normals_map[q->second.second].first;
- const unsigned int old_count
- = cell_to_normals_map[q->second.second].second;
-
- Assert (old_count > 0, ExcInternalError());
-
- // in the same entry,
- // store again the now
- // averaged normal vector
- // and the new count
- cell_to_normals_map[q->second.second]
- = std::make_pair ((old_normal * old_count + q->second.first) / (old_count + 1),
- old_count + 1);
- }
-
- Assert (cell_to_normals_map.size() >= 1, ExcInternalError());
-
- // count the maximum number of
- // contributions from each cell
- unsigned int max_n_contributions_per_cell = 1;
- for (typename CellToNormalsMap::const_iterator
- x = cell_to_normals_map.begin();
- x != cell_to_normals_map.end(); ++x)
- max_n_contributions_per_cell
- = std::max (max_n_contributions_per_cell,
- x->second.second);
-
- // verify that each cell can have only
- // contributed at most dim times, since
- // that is the maximum number of faces
- // that come together at a single place
- Assert (max_n_contributions_per_cell <= dim, ExcInternalError());
-
- switch (max_n_contributions_per_cell)
- {
- // first deal with the case that a
- // number of cells all have
- // registered that they have a
- // normal vector defined at the
- // location of a given vector dof,
- // and that each of them have
- // encountered this vector dof
- // exactly once while looping over
- // all their faces. as stated in
- // the documentation, this is the
- // case where we want to simply
- // average over all normal vectors
- case 1:
- {
-
- // compute the average
- // normal vector from all
- // the ones that have the
- // same set of dofs. we
- // could add them up and
- // divide them by the
- // number of additions,
- // or simply normalize
- // them right away since
- // we want them to have
- // unit length anyway
- Tensor<1,dim> normal;
- for (typename CellToNormalsMap::const_iterator
- x = cell_to_normals_map.begin();
- x != cell_to_normals_map.end(); ++x)
- normal += x->second.first;
- normal /= normal.norm();
-
- // normalize again
- for (unsigned int d=0; d<dim; ++d)
- if (std::fabs(normal[d]) < 1e-13)
- normal[d] = 0;
- normal /= normal.norm();
-
- // then construct constraints
- // from this:
- const internal::VectorDoFTuple<dim> &
- dof_indices = same_dof_range[0]->first;
- internal::add_constraint (dof_indices, normal,
- constraints);
-
- break;
- }
-
-
- // this is the slightly
- // more complicated case
- // that a single cell has
- // contributed with exactly
- // DIM normal vectors to
- // the same set of vector
- // dofs. this is what
- // happens in a corner in
- // 2d and 3d (but not on an
- // edge in 3d, where we
- // have only 2, i.e. <DIM,
- // contributions. Here we
- // do not want to average
- // the normal
- // vectors. Since we have
- // DIM contributions, let's
- // assume (and verify) that
- // they are in fact all
- // linearly independent; in
- // that case, all vector
- // components are
- // constrained and we need
- // to set them to zero
- case dim:
- {
- // assert that indeed
- // only a single cell has
- // contributed
- Assert (cell_to_normals_map.size() == 1,
- ExcInternalError());
-
- // check linear
- // independence by
- // computing the
- // determinant of the
- // matrix created from
- // all the normal
- // vectors. if they are
- // linearly independent,
- // then the determinant
- // is nonzero. if they
- // are orthogonal, then
- // the matrix is in fact
- // equal to 1 (since they
- // are all unit vectors);
- // make sure the
- // determinant is larger
- // than 1e-3 to avoid
- // cases where cells are
- // degenerate
- {
- Tensor<2,dim> t;
-
- typename DoFToNormalsMap::const_iterator x = same_dof_range[0];
- for (unsigned int i=0; i<dim; ++i, ++x)
- for (unsigned int j=0; j<dim; ++j)
- t[i][j] = x->second.first[j];
-
- Assert (std::fabs(determinant (t)) > 1e-3,
- ExcMessage("Found a set of normal vectors that are nearly collinear."));
- }
-
- // so all components of
- // this vector dof are
- // constrained. enter
- // this into the
- // constraint matrix
- //
- // ignore dofs already
- // constrained
- for (unsigned int i=0; i<dim; ++i)
- if (!constraints.is_constrained (same_dof_range[0]
- ->first.dof_indices[i])
- &&
- constraints.can_store_line(
- same_dof_range[0]->first.dof_indices[i]))
- {
- constraints.add_line (same_dof_range[0]->first.dof_indices[i]);
- // no add_entries here
- }
-
- break;
- }
-
-
- // this is the case of an
- // edge contribution in 3d,
- // i.e. the vector is
- // constrained in two
- // directions but not the
- // third.
- default:
- {
- Assert (dim >= 3, ExcNotImplemented());
- Assert (max_n_contributions_per_cell == 2, ExcInternalError());
-
- // as described in the
- // documentation, let us
- // first collect what
- // each of the cells
- // contributed at the
- // current point. we use
- // a std::list instead of
- // a std::set (which
- // would be more natural)
- // because std::set
- // requires that the
- // stored elements are
- // comparable with
- // operator<
- typedef
- std::map<typename DH<dim,spacedim>::active_cell_iterator, std::list<Tensor<1,dim> > >
- CellContributions;
- CellContributions cell_contributions;
-
- for (typename DoFToNormalsMap::const_iterator
- q = same_dof_range[0];
- q != same_dof_range[1]; ++q)
- cell_contributions[q->second.second].push_back (q->second.first);
- Assert (cell_contributions.size() >= 1, ExcInternalError());
-
- // now for each cell that
- // has contributed
- // determine the number
- // of normal vectors it
- // has contributed. we
- // currently only
- // implement if this is
- // dim-1 for all cells
- // (if a single cell has
- // contributed dim, or if
- // all adjacent cells
- // have contributed 1
- // normal vector, this is
- // already handled above)
- //
- // for each contributing
- // cell compute the
- // tangential vector that
- // remains unconstrained
- std::list<Tensor<1,dim> > tangential_vectors;
- for (typename CellContributions::const_iterator
- contribution = cell_contributions.begin();
- contribution != cell_contributions.end();
- ++contribution)
- {
- Assert (contribution->second.size() == dim-1, ExcNotImplemented());
-
- Tensor<1,dim> normals[dim-1];
- {
- unsigned int index=0;
- for (typename std::list<Tensor<1,dim> >::const_iterator
- t = contribution->second.begin();
- t != contribution->second.end();
- ++t, ++index)
- normals[index] = *t;
- Assert (index == dim-1, ExcInternalError());
- }
-
- // calculate the
- // tangent as the
- // outer product of
- // the normal
- // vectors. since
- // these vectors do
- // not need to be
- // orthogonal (think,
- // for example, the
- // case of the
- // deal.II/no_flux_07
- // test: a sheared
- // cube in 3d, with
- // Q2 elements, where
- // we have
- // constraints from
- // the two normal
- // vectors of two
- // faces of the
- // sheared cube that
- // are not
- // perpendicular to
- // each other), we
- // have to normalize
- // the outer product
- Tensor<1,dim> tangent;
- switch (dim)
- {
- case 3:
- // take
- // cross
- // product
- // between
- // normals[0]
- // and
- // normals[1]. write
- // it in
- // the
- // current
- // form
- // (with
- // [dim-2])
- // to make
- // sure
- // that
- // compilers
- // don't
- // warn
- // about
- // out-of-bounds
- // accesses
- // -- the
- // warnings
- // are
- // bogus
- // since we
- // get here
- // only for
- // dim==3,
- // but at
- // least
- // one
- // isn't
- // quite
- // smart
- // enough
- // to
- // notice
- // this and
- // warns
- // when
- // compiling
- // the
- // function
- // in 2d
- cross_product (tangent, normals[0], normals[dim-2]);
- break;
- default:
- Assert (false, ExcNotImplemented());
- }
-
- Assert (std::fabs (tangent.norm()) > 1e-12,
- ExcMessage("Two normal vectors from adjacent faces are almost "
- "parallel."));
- tangent /= tangent.norm();
-
- tangential_vectors.push_back (tangent);
- }
-
- // go through the list of
- // tangents and make sure
- // that they all roughly
- // point in the same
- // direction as the first
- // one (i.e. have an
- // angle less than 90
- // degrees); if they
- // don't then flip their
- // sign
- {
- const Tensor<1,dim> first_tangent = tangential_vectors.front();
- typename std::list<Tensor<1,dim> >::iterator
- t = tangential_vectors.begin();
- ++t;
- for (; t != tangential_vectors.end(); ++t)
- if (*t * first_tangent < 0)
- *t *= -1;
- }
-
- // now compute the
- // average tangent and
- // normalize it
- Tensor<1,dim> average_tangent;
- for (typename std::list<Tensor<1,dim> >::const_iterator
- t = tangential_vectors.begin();
- t != tangential_vectors.end();
- ++t)
- average_tangent += *t;
- average_tangent /= average_tangent.norm();
-
- // now all that is left
- // is that we add the
- // constraints that the
- // vector is parallel
- // to the tangent
- const internal::VectorDoFTuple<dim> &
- dof_indices = same_dof_range[0]->first;
- internal::add_tangentiality_constraints (dof_indices,
- average_tangent,
- constraints);
- }
- }
- }
- }
-
-
-
- namespace internal
- {
- template <int dim, class InVector, class OutVector, class DH, int spacedim>
- static
- void
- do_integrate_difference (const dealii::hp::MappingCollection<dim,spacedim> &mapping,
- const DH &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const dealii::hp::QCollection<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight,
- const double exponent_1)
- {
- // we mark the "exponent" parameter
- // to this function "const" since
- // it is strictly incoming, but we
- // need to set it to something
- // different later on, if
- // necessary, so have a read-write
- // version of it:
- double exponent = exponent_1;
-
- const unsigned int n_components = dof.get_fe().n_components();
- const bool fe_is_system = (n_components != 1);
-
- if (weight!=0)
- {
- Assert ((weight->n_components==1) || (weight->n_components==n_components),
- ExcDimensionMismatch(weight->n_components, n_components));
- }
-
- difference.reinit (dof.get_tria().n_active_cells());
-
- switch (norm)
- {
- case L2_norm:
- case H1_seminorm:
- case H1_norm:
- exponent = 2.;
- break;
- case L1_norm:
- exponent = 1.;
- break;
- default:
- break;
- }
-
- UpdateFlags update_flags = UpdateFlags (update_quadrature_points |
- update_JxW_values);
- switch (norm)
- {
- case H1_seminorm:
- case W1p_seminorm:
- case W1infty_seminorm:
- update_flags |= UpdateFlags (update_gradients);
- if(spacedim == dim+1) update_flags |= UpdateFlags (update_normal_vectors);
-
- break;
- case H1_norm:
- case W1p_norm:
- case W1infty_norm:
- update_flags |= UpdateFlags (update_gradients);
- if(spacedim == dim+1) update_flags |= UpdateFlags (update_normal_vectors);
- // no break!
- default:
- update_flags |= UpdateFlags (update_values);
- break;
- }
-
- dealii::hp::FECollection<dim,spacedim> fe_collection (dof.get_fe());
- dealii::hp::FEValues<dim,spacedim> x_fe_values(mapping, fe_collection, q, update_flags);
-
- const unsigned int max_n_q_points = q.max_n_quadrature_points ();
-
- std::vector< dealii::Vector<double> >
- function_values (max_n_q_points, dealii::Vector<double>(n_components));
- std::vector<std::vector<Tensor<1,spacedim> > >
- function_grads (max_n_q_points, std::vector<Tensor<1,spacedim> >(n_components));
-
- std::vector<double>
- weight_values (max_n_q_points);
- std::vector<dealii::Vector<double> >
- weight_vectors (max_n_q_points, dealii::Vector<double>(n_components));
-
- std::vector<dealii::Vector<double> >
- psi_values (max_n_q_points, dealii::Vector<double>(n_components));
- std::vector<std::vector<Tensor<1,spacedim> > >
- psi_grads (max_n_q_points, std::vector<Tensor<1,spacedim> >(n_components));
- std::vector<double>
- psi_scalar (max_n_q_points);
-
- // tmp vector when we use the
- // Function<spacedim> functions for
- // scalar functions
- std::vector<double> tmp_values (max_n_q_points);
- std::vector<Tensor<1,spacedim> > tmp_gradients (max_n_q_points);
-
- // loop over all cells
- typename DH::active_cell_iterator cell = dof.begin_active(),
- endc = dof.end();
- for (unsigned int index=0; cell != endc; ++cell, ++index)
- if (cell->is_locally_owned())
- {
- double diff=0;
- // initialize for this cell
- x_fe_values.reinit (cell);
-
- const dealii::FEValues<dim, spacedim> &fe_values = x_fe_values.get_present_fe_values ();
- const unsigned int n_q_points = fe_values.n_quadrature_points;
-
- // resize all out scratch
- // arrays to the number of
- // quadrature points we use
- // for the present cell
- function_values.resize (n_q_points,
- dealii::Vector<double>(n_components));
- function_grads.resize (n_q_points,
- std::vector<Tensor<1,spacedim> >(n_components));
-
- weight_values.resize (n_q_points);
- weight_vectors.resize (n_q_points,
- dealii::Vector<double>(n_components));
-
- psi_values.resize (n_q_points,
- dealii::Vector<double>(n_components));
- psi_grads.resize (n_q_points,
- std::vector<Tensor<1,spacedim> >(n_components));
- psi_scalar.resize (n_q_points);
-
- tmp_values.resize (n_q_points);
- tmp_gradients.resize (n_q_points);
-
- if (weight!=0)
- {
- if (weight->n_components>1)
- weight->vector_value_list (fe_values.get_quadrature_points(),
- weight_vectors);
- else
- {
- weight->value_list (fe_values.get_quadrature_points(),
- weight_values);
- for (unsigned int k=0;k<n_q_points;++k)
- weight_vectors[k] = weight_values[k];
- }
- }
- else
- {
- for (unsigned int k=0;k<n_q_points;++k)
- weight_vectors[k] = 1.;
- }
-
-
- if (update_flags & update_values)
- {
- // first compute the exact solution
- // (vectors) at the quadrature points
- // try to do this as efficient as
- // possible by avoiding a second
- // virtual function call in case
- // the function really has only
- // one component
- if (fe_is_system)
- exact_solution.vector_value_list (fe_values.get_quadrature_points(),
- psi_values);
- else
- {
- exact_solution.value_list (fe_values.get_quadrature_points(),
- tmp_values);
- for (unsigned int i=0; i<n_q_points; ++i)
- psi_values[i](0) = tmp_values[i];
- }
-
- // then subtract finite element
- // fe_function
- fe_values.get_function_values (fe_function, function_values);
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_values[q] -= function_values[q];
- }
-
- // Do the same for gradients, if required
- if (update_flags & update_gradients)
- {
- // try to be a little clever
- // to avoid recursive virtual
- // function calls when calling
- // gradient_list for functions
- // that are really scalar
- // functions
- if (fe_is_system)
- exact_solution.vector_gradient_list (fe_values.get_quadrature_points(),
- psi_grads);
- else
- {
- exact_solution.gradient_list (fe_values.get_quadrature_points(),
- tmp_gradients);
- for (unsigned int i=0; i<n_q_points; ++i)
- psi_grads[i][0] = tmp_gradients[i];
- }
-
- // then subtract finite element
- // function_grads. We
- // need to be careful
- // in the codimension
- // one case, since
- // there we only have
- // tangential gradients
- // in the finite
- // element function,
- // not the full
- // gradient. This is
- // taken care of, by
- // subtracting the
- // normal component of
- // the gradient from
- // the exact function.
- fe_values.get_function_grads (fe_function, function_grads);
- if(update_flags & update_normal_vectors)
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_grads[q][k] -= (function_grads[q][k] +
- (psi_grads[q][k]* // (f.n) n
- fe_values.normal_vector(q))*
- fe_values.normal_vector(q));
- else
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_grads[q][k] -= function_grads[q][k];
- }
-
- switch (norm)
- {
- case mean:
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- // Compute values in
- // quadrature points
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_scalar[q] += psi_values[q](k)
- * weight_vectors[q](k);
-
- // Integrate
- diff = std::inner_product (psi_scalar.begin(), psi_scalar.end(),
- fe_values.get_JxW_values().begin(),
- 0.0);
- break;
- case Lp_norm:
- case L1_norm:
- case W1p_norm:
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- // Compute values in
- // quadrature points
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_scalar[q] += std::pow(psi_values[q](k)*psi_values[q](k),
- exponent/2.)
- * weight_vectors[q](k);
-
- // Integrate
- diff = std::inner_product (psi_scalar.begin(), psi_scalar.end(),
- fe_values.get_JxW_values().begin(),
- 0.0);
- // Compute the root only,
- // if no derivative
- // values are added later
- if (!(update_flags & update_gradients))
- diff = std::pow(diff, 1./exponent);
- break;
- case L2_norm:
- case H1_norm:
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- // Compute values in
- // quadrature points
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_scalar[q] += psi_values[q](k)*psi_values[q](k)
- * weight_vectors[q](k);
-
- // Integrate
- diff = std::inner_product (psi_scalar.begin(), psi_scalar.end(),
- fe_values.get_JxW_values().begin(),
- 0.0);
- // Compute the root only,
- // if no derivative
- // values are added later
- if (norm == L2_norm)
- diff=std::sqrt(diff);
- break;
- case Linfty_norm:
- case W1infty_norm:
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- {
- double newval = std::fabs(psi_values[q](k))
- * weight_vectors[q](k);
- if (psi_scalar[q]<newval)
- psi_scalar[q] = newval;
- }
- // Maximum on one cell
- diff = *std::max_element (psi_scalar.begin(), psi_scalar.end());
- break;
- case H1_seminorm:
- case W1p_seminorm:
- case W1infty_seminorm:
- break;
- default:
- Assert (false, ExcNotImplemented());
- break;
- }
-
- switch (norm)
- {
- case W1p_seminorm:
- case W1p_norm:
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_scalar[q] += std::pow(psi_grads[q][k] * psi_grads[q][k],
- exponent/2.)
- * weight_vectors[q](k);
-
- diff += std::inner_product (psi_scalar.begin(), psi_scalar.end(),
- fe_values.get_JxW_values().begin(),
- 0.0);
- diff = std::pow(diff, 1./exponent);
- break;
- case H1_seminorm:
- case H1_norm:
- // take square of integrand
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- psi_scalar[q] += (psi_grads[q][k] * psi_grads[q][k])
- * weight_vectors[q](k);
-
- // add seminorm to L_2 norm or
- // to zero
- diff += std::inner_product (psi_scalar.begin(), psi_scalar.end(),
- fe_values.get_JxW_values().begin(),
- 0.0);
- diff = std::sqrt(diff);
- break;
-
- case W1infty_seminorm:
- case W1infty_norm:
- std::fill_n (psi_scalar.begin(), n_q_points, 0.0);
- for (unsigned int k=0; k<n_components; ++k)
- for (unsigned int q=0; q<n_q_points; ++q)
- {
- double t = 0.;
- for (unsigned int d=0;d<dim;++d)
- t = std::max(t,std::fabs(psi_grads[q][k][d])
- * weight_vectors[q](k));
-
- psi_scalar[q] = std::max(psi_scalar[q],t);
- }
-
- // compute seminorm
- {
- double t = 0;
- for (unsigned int i=0;i<psi_scalar.size();++i)
- t = std::max (t, psi_scalar[i]);
-
- // then add seminorm to norm if that had previously been
- // computed
- diff += t;
- }
- break;
- default:
- break;
- }
- // append result of this cell
- // to the end of the vector
- Assert (numbers::is_finite(diff), ExcNumberNotFinite());
- difference(index) = diff;
- }
- else
- // the cell is a ghost cell
- // or is artificial. write
- // a zero into the
- // corresponding value of
- // the returned vector
- difference(index) = 0;
- }
-
- } // namespace internal
-
-
-
-
- template <int dim, class InVector, class OutVector, int spacedim>
- void
- integrate_difference (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const Quadrature<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight,
- const double exponent)
- {
- internal
- ::do_integrate_difference (hp::MappingCollection<dim,spacedim>(mapping),
- dof, fe_function, exact_solution,
- difference, hp::QCollection<dim>(q),
- norm, weight, exponent);
- }
-
-
- template <int dim, class InVector, class OutVector, int spacedim>
- void
- integrate_difference (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const Quadrature<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight,
- const double exponent)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- internal
- ::do_integrate_difference(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
- dof, fe_function, exact_solution,
- difference, hp::QCollection<dim>(q),
- norm, weight, exponent);
- }
-
-
-
- template <int dim, class InVector, class OutVector, int spacedim>
- void
- integrate_difference (const dealii::hp::MappingCollection<dim,spacedim> &mapping,
- const dealii::hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const dealii::hp::QCollection<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight,
- const double exponent)
- {
- internal
- ::do_integrate_difference (hp::MappingCollection<dim,spacedim>(mapping),
- dof, fe_function, exact_solution,
- difference, q,
- norm, weight, exponent);
- }
-
-
- template <int dim, class InVector, class OutVector, int spacedim>
- void
- integrate_difference (const dealii::hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_solution,
- OutVector &difference,
- const dealii::hp::QCollection<dim> &q,
- const NormType &norm,
- const Function<spacedim> *weight,
- const double exponent)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- internal
- ::do_integrate_difference(hp::StaticMappingQ1<dim>::mapping_collection,
- dof, fe_function, exact_solution,
- difference, q,
- norm, weight, exponent);
- }
-
-
-
- template <int dim, class InVector, int spacedim>
- void
- point_difference (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_function,
- Vector<double> &difference,
- const Point<spacedim> &point)
- {
- point_difference(StaticMappingQ1<dim>::mapping,
- dof,
- fe_function,
- exact_function,
- difference,
- point);
- }
-
-
- template <int dim, class InVector, int spacedim>
- void
- point_difference (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Function<spacedim> &exact_function,
- Vector<double> &difference,
- const Point<spacedim> &point)
- {
- const FiniteElement<dim>& fe = dof.get_fe();
-
- Assert(difference.size() == fe.n_components(),
- ExcDimensionMismatch(difference.size(), fe.n_components()));
-
- // first find the cell in which this point
- // is, initialize a quadrature rule with
- // it, and then a FEValues object
- const std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
-
- Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
- ExcInternalError());
-
- const Quadrature<dim>
- quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
- FEValues<dim> fe_values(mapping, fe, quadrature, update_values);
- fe_values.reinit(cell_point.first);
-
- // then use this to get at the values of
- // the given fe_function at this point
- std::vector<Vector<double> > u_value(1, Vector<double> (fe.n_components()));
- fe_values.get_function_values(fe_function, u_value);
-
- if (fe.n_components() == 1)
- difference(0) = exact_function.value(point);
- else
- exact_function.vector_value(point, difference);
-
- for (unsigned int i=0; i<difference.size(); ++i)
- difference(i) -= u_value[0](i);
- }
-
-
- template <int dim, class InVector, int spacedim>
- void
- point_value (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value)
- {
-
- point_value (StaticMappingQ1<dim,spacedim>::mapping,
- dof,
- fe_function,
- point,
- value);
- }
-
-
- template <int dim, class InVector, int spacedim>
- void
- point_value (const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value)
- {
- point_value(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
- dof,
- fe_function,
- point,
- value);
- }
-
-
- template <int dim, class InVector, int spacedim>
- double
- point_value (const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point)
- {
- return point_value (StaticMappingQ1<dim,spacedim>::mapping,
- dof,
- fe_function,
- point);
- }
-
-
- template <int dim, class InVector, int spacedim>
- double
- point_value (const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point)
- {
- return point_value(hp::StaticMappingQ1<dim,spacedim>::mapping_collection,
- dof,
- fe_function,
- point);
- }
-
-
- template <int dim, class InVector, int spacedim>
- void
- point_value (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value)
- {
- const FiniteElement<dim>& fe = dof.get_fe();
-
- Assert(value.size() == fe.n_components(),
- ExcDimensionMismatch(value.size(), fe.n_components()));
-
- // first find the cell in which this point
- // is, initialize a quadrature rule with
- // it, and then a FEValues object
- const std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point
- = GridTools::find_active_cell_around_point (mapping, dof, point);
-
- Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
- ExcInternalError());
-
- const Quadrature<dim>
- quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
-
- FEValues<dim> fe_values(mapping, fe, quadrature, update_values);
- fe_values.reinit(cell_point.first);
-
- // then use this to get at the values of
- // the given fe_function at this point
- std::vector<Vector<double> > u_value(1, Vector<double> (fe.n_components()));
- fe_values.get_function_values(fe_function, u_value);
-
- value = u_value[0];
- }
-
-
- template <int dim, class InVector, int spacedim>
- void
- point_value (const hp::MappingCollection<dim, spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point,
- Vector<double> &value)
- {
- const hp::FECollection<dim, spacedim>& fe = dof.get_fe();
-
- Assert(value.size() == fe.n_components(),
- ExcDimensionMismatch(value.size(), fe.n_components()));
-
- // first find the cell in which this point
- // is, initialize a quadrature rule with
- // it, and then a FEValues object
- const std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
-
- Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
- ExcInternalError());
-
- const Quadrature<dim>
- quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
- hp::FEValues<dim, spacedim> hp_fe_values(mapping, fe, hp::QCollection<dim>(quadrature), update_values);
- hp_fe_values.reinit(cell_point.first);
- const FEValues<dim, spacedim>& fe_values = hp_fe_values.get_present_fe_values();
-
- // then use this to get at the values of
- // the given fe_function at this point
- std::vector<Vector<double> > u_value(1, Vector<double> (fe.n_components()));
- fe_values.get_function_values(fe_function, u_value);
-
- value = u_value[0];
- }
-
-
- template <int dim, class InVector, int spacedim>
- double
- point_value (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point)
- {
- const FiniteElement<dim>& fe = dof.get_fe();
-
- Assert(fe.n_components() == 1,
- ExcMessage ("Finite element is not scalar as is necessary for this function"));
-
- // first find the cell in which this point
- // is, initialize a quadrature rule with
- // it, and then a FEValues object
- const std::pair<typename DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
-
- Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
- ExcInternalError());
-
- const Quadrature<dim>
- quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
- FEValues<dim> fe_values(mapping, fe, quadrature, update_values);
- fe_values.reinit(cell_point.first);
-
- // then use this to get at the values of
- // the given fe_function at this point
- std::vector<double> u_value(1);
- fe_values.get_function_values(fe_function, u_value);
-
- return u_value[0];
- }
-
-
- template <int dim, class InVector, int spacedim>
- double
- point_value (const hp::MappingCollection<dim, spacedim> &mapping,
- const hp::DoFHandler<dim,spacedim> &dof,
- const InVector &fe_function,
- const Point<spacedim> &point)
- {
- const hp::FECollection<dim, spacedim>& fe = dof.get_fe();
-
- Assert(fe.n_components() == 1,
- ExcMessage ("Finite element is not scalar as is necessary for this function"));
-
- // first find the cell in which this point
- // is, initialize a quadrature rule with
- // it, and then a FEValues object
- const std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
- cell_point = GridTools::find_active_cell_around_point (mapping, dof, point);
-
- Assert(GeometryInfo<dim>::distance_to_unit_cell(cell_point.second) < 1e-10,
- ExcInternalError());
-
- const Quadrature<dim>
- quadrature (GeometryInfo<dim>::project_to_unit_cell(cell_point.second));
- hp::FEValues<dim, spacedim> hp_fe_values(mapping, fe, hp::QCollection<dim>(quadrature), update_values);
- hp_fe_values.reinit(cell_point.first);
- const FEValues<dim, spacedim>& fe_values = hp_fe_values.get_present_fe_values();
-
- // then use this to get at the values of
- // the given fe_function at this point
- std::vector<double> u_value(1);
- fe_values.get_function_values(fe_function, u_value);
-
- return u_value[0];
- }
-
-
- template <int dim, class InVector, int spacedim>
- double
- compute_mean_value (const Mapping<dim, spacedim> &mapping,
- const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &quadrature,
- const InVector &v,
- const unsigned int component)
- {
- Assert (v.size() == dof.n_dofs(),
- ExcDimensionMismatch (v.size(), dof.n_dofs()));
- Assert (component < dof.get_fe().n_components(),
- ExcIndexRange(component, 0, dof.get_fe().n_components()));
-
- FEValues<dim,spacedim> fe(mapping, dof.get_fe(), quadrature,
- UpdateFlags(update_JxW_values
- | update_values));
-
- typename DoFHandler<dim,spacedim>::active_cell_iterator cell;
- std::vector<Vector<double> > values(quadrature.size(),
- Vector<double> (dof.get_fe().n_components()));
-
- double mean = 0.;
- double area = 0.;
- // Compute mean value
- for (cell = dof.begin_active(); cell != dof.end(); ++cell)
- if (cell->is_locally_owned())
- {
- fe.reinit (cell);
- fe.get_function_values(v, values);
- for (unsigned int k=0; k< quadrature.size(); ++k)
- {
- mean += fe.JxW(k) * values[k](component);
- area += fe.JxW(k);
- }
- }
-
-#if DEAL_II_USE_P4EST
- // if this was a distributed
- // DoFHandler, we need to do the
- // reduction over the entire domain
- if (const parallel::distributed::Triangulation<dim,spacedim> *
- p_d_triangulation
- = dynamic_cast<const parallel::distributed::Triangulation<dim,spacedim> *>(&dof.get_tria()))
- {
- double my_values[2] = { mean, area };
- double global_values[2];
-
- MPI_Allreduce (&my_values, &global_values, 2, MPI_DOUBLE,
- MPI_SUM,
- p_d_triangulation->get_communicator());
-
- mean = global_values[0];
- area = global_values[1];
- }
-#endif
-
- return (mean/area);
- }
-
-
- template <int dim, class InVector, int spacedim>
- double
- compute_mean_value (const DoFHandler<dim,spacedim> &dof,
- const Quadrature<dim> &quadrature,
- const InVector &v,
- const unsigned int component)
- {
- Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
- return compute_mean_value(StaticMappingQ1<dim,spacedim>::mapping, dof, quadrature, v, component);
- }
-}
-
-DEAL_II_NAMESPACE_CLOSE
+#include <deal.II/numerics/vector_tools.templates.h>
#endif
# There is one gotcha: PETSc has a habit of making incompatible changes by
# simply changing the names of libraries between different versions. That
# really is too bad, so we have to conditionalize things.
-ifeq ($(DEAL_II_PETSC_VERSION_MINOR),1)
- xlib-ksp=libpetscsles
-else
- xlib-ksp=libpetscksp
-endif
- # This is how it is done. Starting with PETSc versions 2.3.*:
-ifeq ($(DEAL_II_PETSC_VERSION_MAJOR),2)
- xlib.g = $(lib-contrib-petsc-path.g)/libpetscksp$(lib-suffix) \
- $(lib-contrib-petsc-path.g)/libpetscdm$(lib-suffix) \
- $(lib-contrib-petsc-path.g)/libpetscmat$(lib-suffix) \
- $(lib-contrib-petsc-path.g)/libpetscvec$(lib-suffix) \
- $(lib-contrib-petsc-path.g)/libpetsc$(lib-suffix)
- xlib.o = $(lib-contrib-petsc-path.o)/libpetscksp$(lib-suffix) \
- $(lib-contrib-petsc-path.o)/libpetscdm$(lib-suffix) \
- $(lib-contrib-petsc-path.o)/libpetscmat$(lib-suffix) \
- $(lib-contrib-petsc-path.o)/libpetscvec$(lib-suffix) \
- $(lib-contrib-petsc-path.o)/libpetsc$(lib-suffix)
-else
- # which is the same for PETSc 3.0.0:
+ #
+ # This is how it is done. Starting with PETSc version 3.0.0:
ifeq ($(DEAL_II_PETSC_VERSION_MAJOR)$(DEAL_II_PETSC_VERSION_MINOR),30)
xlib.g = $(lib-contrib-petsc-path.g)/libpetscksp$(lib-suffix) \
$(lib-contrib-petsc-path.g)/libpetscdm$(lib-suffix) \
$(lib-contrib-petsc-path.o)/libpetscmat$(lib-suffix) \
$(lib-contrib-petsc-path.o)/libpetscvec$(lib-suffix) \
$(lib-contrib-petsc-path.o)/libpetsc$(lib-suffix)
- else
- # but after that (petsc-3.1++), we can use the simpler PETSc
- # default "--with-single-library=1" like this:
- xlib.g = $(lib-contrib-petsc-path.o)/libpetsc$(lib-suffix)
- xlib.o = $(lib-contrib-petsc-path.o)/libpetsc$(lib-suffix)
- endif
-endif
-ifeq ($(enable-shared),yes)
+ # deal with shared libraries:
+ ifeq ($(enable-shared),yes)
- external-links-petsc: libpetscall.g$(shared-lib-suffix) libpetscall$(shared-lib-suffix)
+ external-links-petsc: libpetscall.g$(shared-lib-suffix) libpetscall$(shared-lib-suffix)
- libpetscall.g$(shared-lib-suffix): $(xlib.g)
+ libpetscall.g$(shared-lib-suffix): $(xlib.g)
@echo "======================debug============= Linking library: libpetscall.g$(shared-lib-suffix)"
@$(SHLIBLD) $(LDFLAGS) $(SHLIBFLAGS) -o $(LIBDIR)/$(call DEAL_II_SHLIB_NAME,petscall.g) $(call DEAL_II_ADD_SONAME,petscall.g) $(xlib.g)
@ln -f -s $(call DEAL_II_SHLIB_NAME,petscall.g) $@
- libpetscall$(shared-lib-suffix): $(xlib.o)
+ libpetscall$(shared-lib-suffix): $(xlib.o)
@echo "======================optimized========= Linking library: libpetscall$(shared-lib-suffix)"
@$(SHLIBLD) $(LDFLAGS) $(SHLIBFLAGS) -o $(LIBDIR)/$(call DEAL_II_SHLIB_NAME,petscall) $(call DEAL_II_ADD_SONAME,petscall) $(xlib.o)
@ln -f -s $(call DEAL_II_SHLIB_NAME,petscall) $@
-else
+ # and then static libraries:
+ else
- # make static libraries. ensure that they are built one after the other because
- # both create temporary files with the same name
- external-links-petsc:
+ # make static libraries. ensure that they are built one after the other because
+ # both create temporary files with the same name
+ external-links-petsc:
@$(MAKE) libpetscall.g$(static-lib-suffix)
@$(MAKE) libpetscall$(static-lib-suffix)
- # As I don't know how to merge archives, here's a workaround: Extract each of
- # the archives and append the object files to the libpetsc archive. Do the
- # same for debug and optimized mode.
- libpetscall.g$(static-lib-suffix): $(xlib.g)
+ # As I don't know how to merge archives, here's a workaround: Extract each of
+ # the archives and append the object files to the libpetsc archive. Do the
+ # same for debug and optimized mode.
+ libpetscall.g$(static-lib-suffix): $(xlib.g)
@echo "======================debug============= Linking library: libpetscall.g$(static-lib-suffix)"
@rm -f $@
@rm -rf .ar_tmp
@rm -r .ar_tmp
@$(RANLIB) libpetscall.g$(static-lib-suffix)
- libpetscall$(static-lib-suffix): $(xlib.o)
+ libpetscall$(static-lib-suffix): $(xlib.o)
@echo "======================optimized========= Linking library: libpetscall$(static-lib-suffix)"
@rm -f $@
@rm -rf .ar_tmp
@cd ..
@rm -r .ar_tmp
@$(RANLIB) libpetscall$(static-lib-suffix)
-endif
+ endif
+ # and this is how it is done with PETSc version >= 3.1.0:
+ else
+ external-links-petsc: # do nothing.
+ endif
else
external-links-petsc:
endif
-
######################### CLEAN TARGETS ###################
# clean everything
clean: clean-objects
clean-objects: clean-debug clean-optimized \
clean-contrib
-
# clean targets for the individual subdirectories. remove
# object files and template instantiation files.
# extract dir name from target
case UpwindEuler:
{
Point<dim> q1;
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
for (unsigned int i=0; i<dim; ++i)
{
q1=points[p]-ht[i];
case Euler:
{
Point<dim> q1, q2;
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
for (unsigned int i=0; i<dim; ++i)
{
q1=points[p]+ht[i];
case FourthOrder:
{
Point<dim> q1, q2, q3, q4;
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
for (unsigned int i=0; i<dim; ++i)
{
q2=points[p]+ht[i];
{
Assert (gradients.size() == points.size(),
ExcDimensionMismatch(gradients.size(), points.size()));
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
Assert (gradients[p].size() == this->n_components,
ExcDimensionMismatch(gradients.size(), this->n_components));
case UpwindEuler:
{
Point<dim> q1;
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
for (unsigned int i=0; i<dim; ++i)
{
q1=points[p]-ht[i];
case Euler:
{
Point<dim> q1, q2;
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
for (unsigned int i=0; i<dim; ++i)
{
q1=points[p]+ht[i];
case FourthOrder:
{
Point<dim> q1, q2, q3, q4;
- for (unsigned p=0; p<points.size(); ++p)
+ for (unsigned int p=0; p<points.size(); ++p)
for (unsigned int i=0; i<dim; ++i)
{
q2=points[p]+ht[i];
# include <zlib.h>
#endif
+#ifdef DEAL_II_HAVE_HDF5
+#include <hdf5.h>
+#endif
DEAL_II_NAMESPACE_OPEN
};
+ class HDF5MemStream
+ {
+ public:
+ /**
+ * Constructor, storing
+ * persistent values for
+ * later use.
+ */
+ HDF5MemStream (const unsigned int local_points_cell_count[2], const unsigned int global_points_cell_offsets[2], const unsigned int dim);
+
+ /**
+ * Output operator for points.
+ */
+ template <int dim>
+ void write_point (const unsigned int index,
+ const Point<dim>&);
+
+ /**
+ * Do whatever is necessary to
+ * terminate the list of points.
+ * In this case, nothing.
+ */
+ void flush_points () {};
+
+ /**
+ * Write dim-dimensional cell
+ * with first vertex at
+ * number start and further
+ * vertices offset by the
+ * specified values. Values
+ * not needed are ignored.
+ *
+ * The order of vertices for
+ * these cells in different
+ * dimensions is
+ * <ol>
+ * <li> [0,1]
+ * <li> []
+ * <li> []
+ * </ol>
+ */
+ template <int dim>
+ void write_cell(const unsigned int index,
+ const unsigned int start,
+ const unsigned int x_offset,
+ const unsigned int y_offset,
+ const unsigned int z_offset);
+
+ /**
+ * Do whatever is necessary to
+ * terminate the list of cells.
+ * In this case, nothing.
+ */
+ void flush_cells () {};
+
+ const double *node_data(void) const { return &vertices[0]; };
+ const unsigned int *cell_data(void) const { return &cells[0]; };
+
+ private:
+ /**
+ * A list of vertices and
+ * cells, used to write HDF5 data.
+ */
+ std::vector<double> vertices;
+ std::vector<unsigned int> cells;
+ unsigned int cell_offset;
+ };
+
+
//----------------------------------------------------------------------//
DXStream::DXStream(std::ostream& out,
return stream;
}
+ HDF5MemStream::HDF5MemStream(const unsigned int local_points_cell_count[2], const unsigned int global_points_cell_offsets[2], const unsigned int dim) {
+ unsigned int entries_per_cell = (2 << (dim-1));
+
+ vertices.resize(local_points_cell_count[0]*dim);
+ cells.resize(local_points_cell_count[1]*entries_per_cell);
+ cell_offset = global_points_cell_offsets[1]*entries_per_cell;
+ }
+
+ template<int dim>
+ void
+ HDF5MemStream::write_point (const unsigned int index,
+ const Point<dim>& p)
+ {
+ for (int i=0;i<dim;++i) vertices[index*dim+i] = p(i);
+ }
+
+ template<int dim>
+ void
+ HDF5MemStream::write_cell(
+ unsigned int index,
+ unsigned int start,
+ unsigned int d1,
+ unsigned int d2,
+ unsigned int d3)
+ {
+ unsigned int base_entry = index * GeometryInfo<dim>::vertices_per_cell;
+ cells[base_entry+0] = cell_offset+start;
+ cells[base_entry+1] = cell_offset+start+d1;
+ if (dim>=2)
+ {
+ cells[base_entry+2] = cell_offset+start+d2+d1;
+ cells[base_entry+3] = cell_offset+start+d2;
+ if (dim>=3)
+ {
+ cells[base_entry+4] = cell_offset+start+d3;
+ cells[base_entry+5] = cell_offset+start+d3+d1;
+ cells[base_entry+6] = cell_offset+start+d3+d2+d1;
+ cells[base_entry+7] = cell_offset+start+d3+d2;
+ }
+ }
+ }
template <typename T>
std::ostream&
if (format_name == "deal.II intermediate")
return deal_II_intermediate;
+ if (format_name == "hdf5")
+ return hdf5;
+
AssertThrow (false,
ExcMessage ("The given file format name is not recognized: <"
+ format_name + ">"));
std::string
DataOutBase::get_output_format_names ()
{
- return "none|dx|ucd|gnuplot|povray|eps|gmv|tecplot|tecplot_binary|vtk|vtu|deal.II intermediate";
+ return "none|dx|ucd|gnuplot|povray|eps|gmv|tecplot|tecplot_binary|vtk|vtu|hdf5|deal.II intermediate";
}
return ".vtu";
case deal_II_intermediate:
return ".d2";
+ case hdf5:
+ return ".h5";
default:
Assert (false, ExcNotImplemented());
return "";
}
+template <int dim, int spacedim>
+XDMFEntry DataOutInterface<dim,spacedim>::
+create_xdmf_entry (const char *h5_filename, const double cur_time, MPI_Comm comm) const
+{
+ return DataOutBase::create_xdmf_entry(get_patches(), get_dataset_names(), get_vector_data_ranges(),
+ h5_filename, cur_time, comm);
+}
+
+template <int dim, int spacedim>
+XDMFEntry DataOutBase::create_xdmf_entry (const std::vector<Patch<dim,spacedim> > &patches,
+ const std::vector<std::string> &data_names,
+ const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
+ const char* h5_filename,
+ const double cur_time,
+ MPI_Comm comm)
+{
+ unsigned int local_node_cell_count[2], global_node_cell_count[2];
+ const unsigned int n_data_sets = data_names.size();
+ int myrank;
+
+#ifndef DEAL_II_HAVE_HDF5
+ // throw an exception, but first make
+ // sure the compiler does not warn about
+ // the now unused function arguments
+ (void)patches;
+ (void)data_names;
+ (void)vector_data_ranges;
+ (void)h5_filename;
+ (void)cur_time;
+ (void)comm;
+ AssertThrow(false, ExcMessage ("XDMF support requires HDF5 to be turned on."));
+#endif
+ AssertThrow(dim == 2 || dim == 3, ExcMessage ("XDMF only supports 2 or 3 dimensions."));
+
+ compute_sizes<dim,spacedim>(patches, local_node_cell_count[0], local_node_cell_count[1]);
+
+ // And compute the global total
+#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
+ MPI_Comm_rank(comm, &myrank);
+ MPI_Allreduce(local_node_cell_count, global_node_cell_count, 2, MPI_UNSIGNED, MPI_SUM, comm);
+#else
+ myrank = 0;
+ global_node_cell_count[0] = local_node_cell_count[0];
+ global_node_cell_count[1] = local_node_cell_count[1];
+#endif
+
+ // Output the XDMF file only on the root process
+ if (myrank == 0) {
+ XDMFEntry entry(h5_filename, cur_time, global_node_cell_count[0], global_node_cell_count[1], dim);
+
+ // The vector names generated here must match those generated in the HDF5 file
+ unsigned int i, n_th_vector, data_set, pt_data_vector_dim;
+ std::string vector_name;
+ for (n_th_vector=0,data_set=0;data_set<n_data_sets;) {
+ // Advance n_th_vector to at least the current data set we are on
+ while (n_th_vector < vector_data_ranges.size() && std_cxx1x::get<0>(vector_data_ranges[n_th_vector]) < data_set) n_th_vector++;
+
+ // Determine whether the data is multiple dimensions or one
+ if (std_cxx1x::get<0>(vector_data_ranges[n_th_vector]) == data_set) {
+ // Multiple dimensions
+ pt_data_vector_dim = std_cxx1x::get<1>(vector_data_ranges[n_th_vector]) - std_cxx1x::get<0>(vector_data_ranges[n_th_vector])+1;
+
+ // Ensure the dimensionality of the data is correct
+ AssertThrow (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]) >= std_cxx1x::get<0>(vector_data_ranges[n_th_vector]),
+ ExcLowerRange (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]), std_cxx1x::get<0>(vector_data_ranges[n_th_vector])));
+ AssertThrow (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]) < n_data_sets,
+ ExcIndexRange (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]), 0, n_data_sets));
+
+ // Determine the vector name
+ // Concatenate all the
+ // component names with double
+ // underscores unless a vector
+ // name has been specified
+ if (std_cxx1x::get<2>(vector_data_ranges[n_th_vector]) != "") {
+ vector_name = std_cxx1x::get<2>(vector_data_ranges[n_th_vector]);
+ } else {
+ vector_name = "";
+ for (i=std_cxx1x::get<0>(vector_data_ranges[n_th_vector]);i<std_cxx1x::get<1>(vector_data_ranges[n_th_vector]);++i)
+ vector_name += data_names[i] + "__";
+ vector_name += data_names[std_cxx1x::get<1>(vector_data_ranges[n_th_vector])];
+ }
+ } else {
+ // One dimension
+ pt_data_vector_dim = 1;
+ vector_name = data_names[data_set];
+ }
+
+ entry.add_attribute(vector_name, pt_data_vector_dim);
+
+ // Advance the current data set
+ data_set += pt_data_vector_dim;
+ }
+
+ return entry;
+ } else {
+ return XDMFEntry();
+ }
+}
+
+template <int dim, int spacedim>
+void DataOutInterface<dim,spacedim>::
+write_xdmf_file (const std::vector<XDMFEntry> &entries,
+ const char *filename,
+ MPI_Comm comm) const
+{
+ DataOutBase::write_xdmf_file(get_patches(), entries, filename, comm);
+}
+
+
+
+template <int dim, int spacedim>
+void DataOutBase::write_xdmf_file (const std::vector<Patch<dim,spacedim> > &,
+ const std::vector<XDMFEntry> &entries,
+ const char *filename,
+ MPI_Comm comm)
+{
+ int myrank;
+
+#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
+ MPI_Comm_rank(comm, &myrank);
+#else
+ (void)comm;
+ myrank = 0;
+#endif
+
+ // Only rank 0 process writes the XDMF file
+ if (myrank == 0)
+ {
+ std::ofstream xdmf_file(filename);
+ std::vector<XDMFEntry>::const_iterator it;
+
+ xdmf_file << "<?xml version=\"1.0\" ?>\n";
+ xdmf_file << "<!DOCTYPE Xdmf SYSTEM \"Xdmf.dtd\" []>\n";
+ xdmf_file << "<Xdmf Version=\"2.0\">\n";
+ xdmf_file << " <Domain>\n";
+ xdmf_file << " <Grid Name=\"CellTime\" GridType=\"Collection\" CollectionType=\"Temporal\">\n";
+
+ // Write out all the entries indented
+ for (it=entries.begin();it!=entries.end();++it)
+ xdmf_file << it->get_xdmf_content(3);
+
+ xdmf_file << " </Grid>\n";
+ xdmf_file << " </Domain>\n";
+ xdmf_file << "</Xdmf>\n";
+
+ xdmf_file.close();
+ }
+}
+
+
+// Get the XDMF content associated with this entry
+// If the entry is not valid, this returns false
+std::string XDMFEntry::get_xdmf_content(const unsigned int indent_level) const
+{
+ std::stringstream ss;
+ std::map<std::string, unsigned int>::const_iterator it;
+
+ if (!valid) return "";
+
+ ss << indent(indent_level+0) << "<Grid Name=\"mesh\" GridType=\"Uniform\">\n";
+ ss << indent(indent_level+1) << "<Time Value=\"" << entry_time << "\"/>\n";
+ ss << indent(indent_level+1) << "<Geometry GeometryType=\"" << (dimension == 2 ? "XY" : "XYZ" ) << "\">\n";
+ ss << indent(indent_level+2) << "<DataItem Dimensions=\"" << num_nodes << " " << dimension << "\" NumberType=\"Float\" Precision=\"8\" Format=\"HDF\">\n";
+ ss << indent(indent_level+3) << h5_filename << ":/nodes\n";
+ ss << indent(indent_level+2) << "</DataItem>\n";
+ ss << indent(indent_level+1) << "</Geometry>\n";
+ // If we have cells defined, use a quadrilateral (2D) or hexahedron (3D) topology
+ if (num_cells > 0) {
+ ss << indent(indent_level+1) << "<Topology TopologyType=\"" << (dimension == 2 ? "Quadrilateral" : "Hexahedron") << "\" NumberOfElements=\"" << num_cells << "\">\n";
+ ss << indent(indent_level+2) << "<DataItem Dimensions=\"" << num_cells << " " << (2 << (dimension-1)) << "\" NumberType=\"UInt\" Format=\"HDF\">\n";
+ ss << indent(indent_level+3) << h5_filename << ":/cells\n";
+ ss << indent(indent_level+2) << "</DataItem>\n";
+ ss << indent(indent_level+1) << "</Topology>\n";
+ } else {
+ // Otherwise, we assume the points are isolated in space and use a Polyvertex topology
+ ss << indent(indent_level+1) << "<Topology TopologyType=\"Polyvertex\" NumberOfElements=\"" << num_nodes << "\">\n";
+ ss << indent(indent_level+1) << "</Topology>\n";
+ }
+
+ for (it=attribute_dims.begin();it!=attribute_dims.end();++it) {
+ ss << indent(indent_level+1) << "<Attribute Name=\"" << it->first << "\" AttributeType=\"" << (it->second > 1 ? "Vector" : "Scalar") << "\" Center=\"Node\">\n";
+ // Vectors must have 3 elements even for 2D models
+ ss << indent(indent_level+2) << "<DataItem Dimensions=\"" << num_nodes << " " << (it->second > 1 ? 3 : 1) << "\" NumberType=\"Float\" Precision=\"8\" Format=\"HDF\">\n";
+ ss << indent(indent_level+3) << h5_filename << ":/" << it->first << "\n";
+ ss << indent(indent_level+2) << "</DataItem>\n";
+ ss << indent(indent_level+1) << "</Attribute>\n";
+ }
+
+ ss << indent(indent_level+0) << "</Grid>\n";
+
+ return ss.str();
+}
+
+template <int dim, int spacedim>
+void DataOutInterface<dim,spacedim>::
+write_hdf5_parallel (const char* filename, MPI_Comm comm) const
+{
+#ifndef DEAL_II_HAVE_HDF5
+ AssertThrow(false, ExcMessage ("HDF5 support is disabled."));
+#endif
+ DataOutBase::write_hdf5_parallel(get_patches(), get_dataset_names(),
+ get_vector_data_ranges(),
+ filename, comm);
+}
+
+template <int dim, int spacedim>
+void DataOutBase::write_hdf5_parallel (const std::vector<Patch<dim,spacedim> > &patches,
+ const std::vector<std::string> &data_names,
+ const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
+ const char* filename,
+ MPI_Comm comm)
+{
+#ifndef DEAL_II_HAVE_HDF5
+ // throw an exception, but first make
+ // sure the compiler does not warn about
+ // the now unused function arguments
+ (void)patches;
+ (void)data_names;
+ (void)vector_data_ranges;
+ (void)filename;
+ (void)comm;
+ AssertThrow(false, ExcMessage ("HDF5 support is disabled."));
+#else
+ int world_size;
+ hid_t h5_file_id, plist_id;
+ hid_t node_dataspace, node_dataset, node_file_dataspace, node_memory_dataspace;
+ hid_t cell_dataspace, cell_dataset, cell_file_dataspace, cell_memory_dataspace;
+ hid_t pt_data_dataspace, pt_data_dataset, pt_data_file_dataspace, pt_data_memory_dataspace;
+ herr_t status;
+ unsigned int local_node_cell_count[2], global_node_cell_count[2], global_node_cell_offsets[2];
+ hsize_t count[2], offset[2], node_ds_dim[2], cell_ds_dim[2];
+ const unsigned int n_data_sets = data_names.size();
+
+ // If HDF5 is not parallel and we're using multiple processes, abort
+#ifndef H5_HAVE_PARALLEL
+#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
+ MPI_Comm_size(comm, &world_size);
+ AssertThrow (world_size <= 1,
+ ExcMessage ("Serial HDF5 output on multiple processes is not yet supported."));
+#endif
+#endif
+
+ compute_sizes<dim,spacedim>(patches, local_node_cell_count[0], local_node_cell_count[1]);
+
+ Table<2,double> data_vectors (n_data_sets, local_node_cell_count[0]);
+ void (*fun_ptr) (const std::vector<Patch<dim,spacedim> > &, Table<2,double> &) = &DataOutBase::template write_gmv_reorder_data_vectors<dim,spacedim>;
+ Threads::Task<> reorder_task = Threads::new_task (fun_ptr, patches, data_vectors);
+
+ // Create file access properties
+ plist_id = H5Pcreate(H5P_FILE_ACCESS);
+ AssertThrow(plist_id != -1, ExcIO());
+ // If MPI is enabled *and* HDF5 is parallel, we can do parallel output
+#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
+#ifdef H5_HAVE_PARALLEL
+ // Set the access to use the specified MPI_Comm object
+ status = H5Pset_fapl_mpio(plist_id, comm, MPI_INFO_NULL);
+ AssertThrow(status >= 0, ExcIO());
+#endif
+#endif
+
+ // Overwrite any existing files (change this to an option?) and close the property list
+ h5_file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist_id);
+ AssertThrow(h5_file_id >= 0, ExcIO());
+ status = H5Pclose(plist_id);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Compute the global total number of nodes/cells
+ // And determine the offset of the data for this process
+#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
+ MPI_Allreduce(local_node_cell_count, global_node_cell_count, 2, MPI_UNSIGNED, MPI_SUM, comm);
+ MPI_Scan(local_node_cell_count, global_node_cell_offsets, 2, MPI_UNSIGNED, MPI_SUM, comm);
+ global_node_cell_offsets[0] -= local_node_cell_count[0];
+ global_node_cell_offsets[1] -= local_node_cell_count[1];
+#else
+ global_node_cell_offsets[0] = global_node_cell_offsets[1] = 0;
+#endif
+
+ // Write the nodes/cells to the HDF5 "stream" object. Record the process offset
+ // so that node reference indices are correctly calculated
+ HDF5MemStream hdf5_data(local_node_cell_count, global_node_cell_offsets, dim);
+ write_nodes(patches, hdf5_data);
+ write_cells(patches, hdf5_data);
+
+ // Create the dataspace for the nodes and cells
+ node_ds_dim[0] = global_node_cell_count[0];
+ node_ds_dim[1] = dim;
+ node_dataspace = H5Screate_simple(2, node_ds_dim, NULL);
+ AssertThrow(node_dataspace >= 0, ExcIO());
+
+ cell_ds_dim[0] = global_node_cell_count[1];
+ cell_ds_dim[1] = GeometryInfo<dim>::vertices_per_cell;
+ cell_dataspace = H5Screate_simple(2, cell_ds_dim, NULL);
+ AssertThrow(cell_dataspace >= 0, ExcIO());
+
+ // Create the dataset for the nodes and cells
+#if H5Gcreate_vers == 1
+ node_dataset = H5Dcreate(h5_file_id, "nodes", H5T_NATIVE_DOUBLE, node_dataspace, H5P_DEFAULT);
+#else
+ node_dataset = H5Dcreate(h5_file_id, "nodes", H5T_NATIVE_DOUBLE, node_dataspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#endif
+ AssertThrow(node_dataset >= 0, ExcIO());
+#if H5Gcreate_vers == 1
+ cell_dataset = H5Dcreate(h5_file_id, "cells", H5T_NATIVE_UINT, cell_dataspace, H5P_DEFAULT);
+#else
+ cell_dataset = H5Dcreate(h5_file_id, "cells", H5T_NATIVE_UINT, cell_dataspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#endif
+ AssertThrow(cell_dataset >= 0, ExcIO());
+
+ // Close the node and cell dataspaces since we're done with them
+ status = H5Sclose(node_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+ status = H5Sclose(cell_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Create the data subset we'll use to read from memory
+ count[0] = local_node_cell_count[0];
+ count[1] = dim;
+ offset[0] = global_node_cell_offsets[0];
+ offset[1] = 0;
+ node_memory_dataspace = H5Screate_simple(2, count, NULL);
+ AssertThrow(node_memory_dataspace >= 0, ExcIO());
+
+ // Select the hyperslab in the file
+ node_file_dataspace = H5Dget_space(node_dataset);
+ AssertThrow(node_file_dataspace >= 0, ExcIO());
+ status = H5Sselect_hyperslab(node_file_dataspace, H5S_SELECT_SET, offset, NULL, count, NULL);
+ AssertThrow(status >= 0, ExcIO());
+
+ // And repeat for cells
+ count[0] = local_node_cell_count[1];
+ count[1] = GeometryInfo<dim>::vertices_per_cell;
+ offset[0] = global_node_cell_offsets[1];
+ offset[1] = 0;
+ cell_memory_dataspace = H5Screate_simple(2, count, NULL);
+ AssertThrow(cell_memory_dataspace >= 0, ExcIO());
+
+ cell_file_dataspace = H5Dget_space(cell_dataset);
+ AssertThrow(cell_file_dataspace >= 0, ExcIO());
+ status = H5Sselect_hyperslab(cell_file_dataspace, H5S_SELECT_SET, offset, NULL, count, NULL);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Create the property list for a collective write
+ plist_id = H5Pcreate(H5P_DATASET_XFER);
+ AssertThrow(plist_id >= 0, ExcIO());
+#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
+#ifdef H5_HAVE_PARALLEL
+ status = H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);
+ AssertThrow(status >= 0, ExcIO());
+#endif
+#endif
+
+ // And finally, write the node data
+ status = H5Dwrite(node_dataset, H5T_NATIVE_DOUBLE, node_memory_dataspace, node_file_dataspace, plist_id, hdf5_data.node_data());
+ AssertThrow(status >= 0, ExcIO());
+
+ // And the cell data
+ status = H5Dwrite(cell_dataset, H5T_NATIVE_UINT, cell_memory_dataspace, cell_file_dataspace, plist_id, hdf5_data.cell_data());
+ AssertThrow(status >= 0, ExcIO());
+
+ reorder_task.join ();
+
+ // when writing, first write out
+ // all vector data, then handle the
+ // scalar data sets that have been
+ // left over
+ unsigned int i, n, q, r, n_th_vector, data_set, pt_data_vector_dim, mem_vector_dim;
+ double *pt_data;
+ std::string vector_name;
+ for (n_th_vector=0,data_set=0;data_set<n_data_sets;) {
+ // Advance n_th_vector to at least the current data set we are on
+ while (n_th_vector < vector_data_ranges.size() && std_cxx1x::get<0>(vector_data_ranges[n_th_vector]) < data_set) n_th_vector++;
+
+ // Determine the dimension of this data
+ if (std_cxx1x::get<0>(vector_data_ranges[n_th_vector]) == data_set) {
+ // Multiple dimensions
+ pt_data_vector_dim = std_cxx1x::get<1>(vector_data_ranges[n_th_vector]) - std_cxx1x::get<0>(vector_data_ranges[n_th_vector])+1;
+
+ // Ensure the dimensionality of the data is correct
+ AssertThrow (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]) >= std_cxx1x::get<0>(vector_data_ranges[n_th_vector]),
+ ExcLowerRange (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]), std_cxx1x::get<0>(vector_data_ranges[n_th_vector])));
+ AssertThrow (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]) < n_data_sets,
+ ExcIndexRange (std_cxx1x::get<1>(vector_data_ranges[n_th_vector]), 0, n_data_sets));
+
+ // Determine the vector name
+ // Concatenate all the
+ // component names with double
+ // underscores unless a vector
+ // name has been specified
+ if (std_cxx1x::get<2>(vector_data_ranges[n_th_vector]) != "") {
+ vector_name = std_cxx1x::get<2>(vector_data_ranges[n_th_vector]);
+ } else {
+ vector_name = "";
+ for (i=std_cxx1x::get<0>(vector_data_ranges[n_th_vector]);i<std_cxx1x::get<1>(vector_data_ranges[n_th_vector]);++i)
+ vector_name += data_names[i] + "__";
+ vector_name += data_names[std_cxx1x::get<1>(vector_data_ranges[n_th_vector])];
+ }
+ } else {
+ // One dimension
+ pt_data_vector_dim = 1;
+ vector_name = data_names[data_set];
+ }
+
+ // Allocate space for the point data
+ // Must be either 1D or 3D
+ mem_vector_dim = (pt_data_vector_dim>1?3:1);
+ pt_data = new double[local_node_cell_count[0]*mem_vector_dim];
+
+ // Create the dataspace for the point data
+ node_ds_dim[0] = global_node_cell_count[0];
+ node_ds_dim[1] = mem_vector_dim;
+ pt_data_dataspace = H5Screate_simple(2, node_ds_dim, NULL);
+ AssertThrow(pt_data_dataspace >= 0, ExcIO());
+
+#if H5Gcreate_vers == 1
+ pt_data_dataset = H5Dcreate(h5_file_id, vector_name.c_str(), H5T_NATIVE_DOUBLE, pt_data_dataspace, H5P_DEFAULT);
+#else
+ pt_data_dataset = H5Dcreate(h5_file_id, vector_name.c_str(), H5T_NATIVE_DOUBLE, pt_data_dataspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#endif
+ AssertThrow(pt_data_dataset >= 0, ExcIO());
+
+ // Create the data subset we'll use to read from memory
+ count[0] = local_node_cell_count[0];
+ count[1] = mem_vector_dim;
+ offset[0] = global_node_cell_offsets[0];
+ offset[1] = 0;
+ pt_data_memory_dataspace = H5Screate_simple(2, count, NULL);
+ AssertThrow(pt_data_memory_dataspace >= 0, ExcIO());
+
+ // Select the hyperslab in the file
+ pt_data_file_dataspace = H5Dget_space(pt_data_dataset);
+ AssertThrow(pt_data_file_dataspace >= 0, ExcIO());
+ status = H5Sselect_hyperslab(pt_data_file_dataspace, H5S_SELECT_SET, offset, NULL, count, NULL);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Write point data to the memory array
+ r = 0;
+ for (i=0;i<local_node_cell_count[0];++i) {
+ // Get the offset to the vector
+ q = data_set;
+ // Write the data vector
+ for (n=0;n<pt_data_vector_dim;++n) pt_data[r++] = data_vectors(q+n, i);
+ // Write 0 for the remainder of entries in 2D
+ for (;n<mem_vector_dim;++n) pt_data[r++] = 0;
+ }
+
+ // And finally, write the data
+ status = H5Dwrite(pt_data_dataset, H5T_NATIVE_DOUBLE, pt_data_memory_dataspace, pt_data_file_dataspace, plist_id, pt_data);
+ AssertThrow(status >= 0, ExcIO());
+
+ delete pt_data;
+
+ // Close the dataspaces
+ status = H5Sclose(pt_data_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+ status = H5Sclose(pt_data_memory_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+ status = H5Sclose(pt_data_file_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+ // Close the dataset
+ status = H5Dclose(pt_data_dataset);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Advance the current data set
+ data_set += pt_data_vector_dim;
+ }
+
+ // Close the file dataspaces
+ status = H5Sclose(node_file_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+ status = H5Sclose(cell_file_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Close the memory dataspaces
+ status = H5Sclose(node_memory_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+ status = H5Sclose(cell_memory_dataspace);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Close the datasets
+ status = H5Dclose(node_dataset);
+ AssertThrow(status >= 0, ExcIO());
+ status = H5Dclose(cell_dataset);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Close the parallel access
+ status = H5Pclose(plist_id);
+ AssertThrow(status >= 0, ExcIO());
+
+ // Close the file
+ status = H5Fclose(h5_file_id);
+ AssertThrow(status >= 0, ExcIO());
+#endif
+}
+
+
template <int dim, int spacedim>
void
GeometryInfo<dim>::project_to_unit_cell (const Point<dim> &q)
{
Point<dim> p = q;
- for(unsigned i=0; i<dim; i++)
+ for(unsigned int i=0; i<dim; i++)
if (p[i] < 0.) p[i] = 0.;
else if (p[i] > 1.) p[i] = 1.;
{
double result = 0.0;
- for(unsigned i=0; i<dim; i++)
+ for(unsigned int i=0; i<dim; i++)
if ((-p[i]) > result)
result = -p[i];
else if ((p[i]-1.) > result)
unsigned int
-LogStream::depth_console (const unsigned n)
+LogStream::depth_console (const unsigned int n)
{
Threads::ThreadMutex::ScopedLock lock(log_lock);
const unsigned int h = std_depth;
unsigned int
-LogStream::depth_file (const unsigned n)
+LogStream::depth_file (const unsigned int n)
{
Threads::ThreadMutex::ScopedLock lock(log_lock);
const unsigned int h = file_depth;
#include <list>
#include <sstream>
#include <cctype>
+#include <limits>
-#ifdef HAVE_STD_NUMERIC_LIMITS
-# include <limits>
-#endif
#ifdef DEAL_II_MSVC
// on Windows systems with MS Visual C/C++, there is a
- const int Integer::min_int_value =
-#ifdef HAVE_STD_NUMERIC_LIMITS
- std::numeric_limits<int>::min();
-#else
- 1;
-#endif
-
- const int Integer::max_int_value =
-#ifdef HAVE_STD_NUMERIC_LIMITS
- std::numeric_limits<int>::max();
-#else
- 0;
-#endif
-
+ const int Integer::min_int_value = std::numeric_limits<int>::min();
+ const int Integer::max_int_value = std::numeric_limits<int>::max();
const char* Integer::description_init = "[Integer";
- const double Double::min_double_value =
-#ifdef HAVE_STD_NUMERIC_LIMITS
- -std::numeric_limits<double>::max();
-#else
- 1;
-#endif
-
- const double Double::max_double_value =
-#ifdef HAVE_STD_NUMERIC_LIMITS
- std::numeric_limits<double>::max();
-#else
- 0;
-#endif
+ const double Double::min_double_value = -std::numeric_limits<double>::max();
+ const double Double::max_double_value = std::numeric_limits<double>::max();
const char* Double::description_init = "[Double";
- const unsigned int List::max_int_value =
-#ifdef HAVE_STD_NUMERIC_LIMITS
- std::numeric_limits<unsigned int>::max();
-#else
- numbers::invalid_unsigned_int;
-#endif
-
+ const unsigned int List::max_int_value
+ = std::numeric_limits<unsigned int>::max();
const char* List::description_init = "[List";
- const unsigned int Map::max_int_value =
-#ifdef HAVE_STD_NUMERIC_LIMITS
- std::numeric_limits<unsigned int>::max();
-#else
- numbers::invalid_unsigned_int;
-#endif
-
+ const unsigned int Map::max_int_value
+ = std::numeric_limits<unsigned int>::max();
const char* Map::description_init = "[Map";
#include <deal.II/base/thread_management.h>
#include <cmath>
-#ifdef HAVE_STD_NUMERIC_LIMITS
-# include <limits>
-#endif
+#include <limits>
DEAL_II_NAMESPACE_OPEN
}
// check for underflow and overflow
-#ifdef HAVE_STD_NUMERIC_LIMITS
Assert (std::fabs(tmp_lagrange_weight) > std::numeric_limits<number>::min(),
ExcMessage ("Underflow in computation of Lagrange denominator."));
Assert (std::fabs(tmp_lagrange_weight) < std::numeric_limits<number>::max(),
ExcMessage ("Overflow in computation of Lagrange denominator."));
-#endif
+
lagrange_weight = static_cast<number>(1.)/tmp_lagrange_weight;
}
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/geometry_info.h>
-#include <cmath>
-#ifdef HAVE_STD_NUMERIC_LIMITS
-# include <limits>
-#endif
+#include <cmath>
+#include <limits>
DEAL_II_NAMESPACE_OPEN
// emulator only supports 64 bit
// arithmetic, even for 80 bit long
// doubles.
-#ifdef HAVE_STD_NUMERIC_LIMITS
const long double
long_double_eps = static_cast<long double>(std::numeric_limits<long double>::epsilon()),
double_eps = static_cast<long double>(std::numeric_limits<double>::epsilon());
-#else
- const long double
- long_double_eps = 1.09-19L,
- double_eps = 2.23-16;
-#endif
// now check whether long double is more
// accurate than double, and set
// Set tolerance. See class QGauss
// for detailed explanation.
-#ifdef HAVE_STD_NUMERIC_LIMITS
const long double
long_double_eps = static_cast<long double>(std::numeric_limits<long double>::epsilon()),
double_eps = static_cast<long double>(std::numeric_limits<double>::epsilon());
-#else
- const long double
- long_double_eps = 1.09-19L,
- double_eps = 2.23-16;
-#endif
// check whether long double is
// more accurate than double, and
const unsigned int nrows = n_rows();
const unsigned int n_cols = sel_columns.size();
+ // handle the simple format separately first
+ if (format==simple_table_with_separate_column_description)
+ {
+ // write the captions
+ for (unsigned int j=0; j<column_order.size(); ++j)
+ {
+ const std::string & key = column_order[j];
+ out << "# " << j+1 << ": " << key << '\n';
+ }
+
+ // cache the columns
+ std::vector<const Column*> cols;
+ for (unsigned int j=0; j<n_cols; ++j)
+ {
+ std::string key=sel_columns[j];
+ const std::map<std::string, Column>::const_iterator
+ col_iter=columns.find(key);
+ Assert(col_iter!=columns.end(), ExcInternalError());
+ cols.push_back(&(col_iter->second));
+ }
+
+ // write the body
+ for (unsigned int i=0; i<nrows; ++i)
+ {
+ for (unsigned int j=0; j<n_cols; ++j)
+ {
+ const Column &column=*(cols[j]);
+
+ out << std::setprecision(column.precision);
+
+ if (column.scientific)
+ out.setf(std::ios::scientific, std::ios::floatfield);
+ else
+ out.setf(std::ios::fixed, std::ios::floatfield);
+
+ // write "" instead of an empty string
+ const std::string * val = boost::get<std::string>(&(column.entries[i].value));
+ if (val!=NULL && val->length()==0)
+ out << "\"\"";
+ else
+ out << column.entries[i].value;
+
+ out << ' ';
+ }
+ out << '\n';
+ }
+
+ out << std::flush;
+ return;
+ }
+
// first compute the widths of each
// entry of the table, in order to
- // have a nicer alignement
+ // have a nicer alignment
Table<2,unsigned int> entry_widths (nrows, n_cols);
for (unsigned int i=0; i<nrows; ++i)
for (unsigned int j=0; j<n_cols; ++j)
{
// print column key with column number. enumerate
// columns starting with 1
- out << "# " << j+1 << ": " << key << std::endl;
+ out << "# " << j+1 << ": " << key << '\n';
break;
}
}
}
if (format == table_with_headers)
- out << std::endl;
+ out << '\n';
for (unsigned int i=0; i<nrows; ++i)
{
// pad after this column
out << " ";
}
- out << std::endl;
+ out << '\n';
}
+ out << std::flush;
}
const pid_t this_id = getpid();
#else
# ifdef DEAL_II_MSVC
- const unsigned this_id = 0;
+ const unsigned int this_id = 0;
# else
const pid_t this_id = 0;
# endif
#include <sys/types.h>
#include <sstream>
#include <iostream>
-
-#ifdef HAVE_STD_NUMERIC_LIMITS
-# include <limits>
-#else
-# include <limits.h>
-#endif
-
+#include <limits>
#ifdef DEAL_II_USE_TRILINOS
# ifdef DEAL_II_COMPILER_SUPPORTS_MPI
{
std::istringstream ss(s);
-#ifdef HAVE_STD_NUMERIC_LIMITS
- static const int max_int = std::numeric_limits<int>::max();
-#else
- static const int max_int = INT_MAX;
-#endif
-
- int i = max_int;
+ int i = std::numeric_limits<int>::max();
ss >> i;
// check for errors
- AssertThrow (i != max_int, ExcCantConvertString (s));
+ AssertThrow (i != std::numeric_limits<int>::max(),
+ ExcCantConvertString (s));
//TODO: The test for errors above doesn't work, as can easily be
//verified. furthermore, it doesn't catch cases like when calling
{
std::istringstream ss(s);
-#ifdef HAVE_STD_NUMERIC_LIMITS
- static const double max_double = std::numeric_limits<double>::max();
-#else
- static const double max_double = DBL_MAX;
-#endif
-
- double i = max_double;
+ double i = std::numeric_limits<double>::max();
ss >> i;
// check for errors
- AssertThrow (i != max_double, ExcCantConvertString (s));
+ AssertThrow (i != std::numeric_limits<double>::max(),
+ ExcCantConvertString (s));
//TODO: The test for errors above doesn't work, as can easily be
//verified. furthermore, it doesn't catch cases like when calling
//---------------------------------------------------------------------------
-// $Id: solution_transfer.cc 23752 2011-05-30 00:16:00Z bangerth $
+// $Id$
// Version: $Name$
//
// Copyright (C) 2009, 2010, 2011, 2012 by the deal.II authors
namespace distributed
{
- namespace
- {
- template <class VECTOR>
- void compress_vector_insert(VECTOR & vec)
- {
- vec.compress();
- }
-
-#ifdef DEAL_II_USE_TRILINOS
- void compress_vector_insert(TrilinosWrappers::Vector & vec)
- {
- vec.compress(Insert);
- }
-
- void compress_vector_insert(TrilinosWrappers::BlockVector & vec)
- {
- for (unsigned int i=0;i<vec.n_blocks();++i)
- vec.block(i).compress(Insert);
- }
-
- void compress_vector_insert(TrilinosWrappers::MPI::Vector & vec)
- {
- vec.compress(Insert);
- }
-
- void compress_vector_insert(TrilinosWrappers::MPI::BlockVector & vec)
- {
- for (unsigned int i=0;i<vec.n_blocks();++i)
- vec.block(i).compress(Insert);
- }
-#endif
- }
-
-
-
template<int dim, typename VECTOR, class DH>
SolutionTransfer<dim, VECTOR, DH>::SolutionTransfer(const DH &dof)
:
std_cxx1x::_3,
std_cxx1x::ref(all_out)));
+
for (typename std::vector<VECTOR*>::iterator it=all_out.begin();
it !=all_out.end();
++it)
- compress_vector_insert(*(*it));
+ (*it)->compress(::dealii::VectorOperation::insert);
input_vectors.clear();
}
long *length);
static
- unsigned (&checksum) (types<2>::forest * p4est);
+ unsigned int (&checksum) (types<2>::forest * p4est);
static
void (&vtk_write_file) (types<2>::forest * p4est,
long *length)
= p4est_connectivity_load;
- unsigned (&functions<2>::checksum) (types<2>::forest * p4est)
+ unsigned int (&functions<2>::checksum) (types<2>::forest * p4est)
= p4est_checksum;
void (&functions<2>::vtk_write_file) (types<2>::forest * p4est,
long *length);
static
- unsigned (&checksum) (types<3>::forest * p8est);
+ unsigned int (&checksum) (types<3>::forest * p8est);
static
void (&vtk_write_file) (types<3>::forest * p8est,
long *length)
= p8est_connectivity_load;
- unsigned (&functions<3>::checksum) (types<3>::forest * p8est)
+ unsigned int (&functions<3>::checksum) (types<3>::forest * p8est)
= p8est_checksum;
void (&functions<3>::vtk_write_file) (types<3>::forest * p8est,
if (f>cell->neighbor_of_neighbor (f))
smaller_idx = 1;
- unsigned larger_idx = (smaller_idx+1) % 2;
+ unsigned int larger_idx = (smaller_idx+1) % 2;
//smaller = *_list[smaller_idx]
//larger = *_list[larger_idx]
const typename Triangulation<dim,spacedim>::cell_iterator &dealii_cell,
const typename internal::p4est::types<dim>::quadrant &p4est_cell,
const typename internal::p4est::types<dim>::forest &forest,
- const types::subdomain_id_t my_subdomain)
+ const types::subdomain_id my_subdomain)
{
// check if this cell exists in
// the local p4est cell
public:
RefineAndCoarsenList (const Triangulation<dim,spacedim> &triangulation,
const std::vector<unsigned int> &p4est_tree_to_coarse_cell_permutation,
- const types::subdomain_id_t my_subdomain,
+ const types::subdomain_id my_subdomain,
typename internal::p4est::types<dim>::forest &forest);
/**
RefineAndCoarsenList<dim,spacedim>::
RefineAndCoarsenList (const Triangulation<dim,spacedim> &triangulation,
const std::vector<unsigned int> &p4est_tree_to_coarse_cell_permutation,
- const types::subdomain_id_t my_subdomain,
+ const types::subdomain_id my_subdomain,
typename internal::p4est::types<dim>::forest &forest)
:
forest(forest)
RefineAndCoarsenList<dim,spacedim>::
build_lists (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
const typename internal::p4est::types<dim>::quadrant &p4est_cell,
- const types::subdomain_id_t my_subdomain)
+ const types::subdomain_id my_subdomain)
{
if (!cell->has_children())
{
template <int dim, int spacedim>
- types::subdomain_id_t
+ types::subdomain_id
Triangulation<dim,spacedim>::locally_owned_subdomain () const
{
Assert (dim > 1, ExcNotImplemented());
template <>
- types::subdomain_id_t
+ types::subdomain_id
Triangulation<1,1>::locally_owned_subdomain () const
{
Assert (false, ExcNotImplemented());
template <>
- types::subdomain_id_t
+ types::subdomain_id
Triangulation<1,2>::locally_owned_subdomain () const
{
Assert (false, ExcNotImplemented());
template <>
- types::subdomain_id_t
+ types::subdomain_id
Triangulation<1,3>::locally_owned_subdomain () const
{
Assert (false, ExcNotImplemented());
template <int dim, int spacedim>
- types::subdomain_id_t
+ types::subdomain_id
Triangulation<dim,spacedim>::locally_owned_subdomain () const
{
Assert (false, ExcNotImplemented());
dof_handler.levels
.push_back (new internal::DoFHandler::DoFLevel<1>);
- dof_handler.levels.back()->lines.dofs
+ dof_handler.levels.back()->dof_object.dofs
.resize (dof_handler.tria->n_raw_lines(i) *
dof_handler.selected_fe->dofs_per_line,
DoFHandler<1,spacedim>::invalid_dof_index);
{
dof_handler.levels.push_back (new internal::DoFHandler::DoFLevel<2>);
- dof_handler.levels.back()->quads.dofs
+ dof_handler.levels.back()->dof_object.dofs
.resize (dof_handler.tria->n_raw_quads(i) *
dof_handler.selected_fe->dofs_per_quad,
DoFHandler<2,spacedim>::invalid_dof_index);
{
dof_handler.levels.push_back (new internal::DoFHandler::DoFLevel<3>);
- dof_handler.levels.back()->hexes.dofs
+ dof_handler.levels.back()->dof_object.dofs
.resize (dof_handler.tria->n_raw_hexs(i) *
dof_handler.selected_fe->dofs_per_hex,
DoFHandler<3,spacedim>::invalid_dof_index);
template <>
-unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const
+unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const
{
// check that only boundary
// indicators 0 and 1 are allowed
// in 1d
- for (std::set<types::boundary_id_t>::const_iterator i=boundary_indicators.begin();
+ for (std::set<types::boundary_id>::const_iterator i=boundary_indicators.begin();
i!=boundary_indicators.end(); ++i)
Assert ((*i == 0) || (*i == 1),
ExcInvalidBoundaryIndicator());
template <>
-unsigned int DoFHandler<1,2>::n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const
+unsigned int DoFHandler<1,2>::n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const
{
// check that only boundary
// indicators 0 and 1 are allowed
// in 1d
- for (std::set<types::boundary_id_t>::const_iterator i=boundary_indicators.begin();
+ for (std::set<types::boundary_id>::const_iterator i=boundary_indicators.begin();
i!=boundary_indicators.end(); ++i)
Assert ((*i == 0) || (*i == 1),
ExcInvalidBoundaryIndicator());
unsigned int
DoFHandler<dim,spacedim>::n_boundary_dofs (const FunctionMap &boundary_indicators) const
{
- Assert (boundary_indicators.find(types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find(numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
std::set<int> boundary_dofs;
template<int dim, int spacedim>
unsigned int
-DoFHandler<dim,spacedim>::n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const
+DoFHandler<dim,spacedim>::n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const
{
- Assert (boundary_indicators.find (types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find (numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
std::set<int> boundary_dofs;
template<int dim, int spacedim>
void DoFHandler<dim,spacedim>::
-distribute_dofs (const FiniteElement<dim,spacedim> &ff,
- const unsigned int offset)
+distribute_dofs (const FiniteElement<dim,spacedim> &ff)
{
selected_fe = &ff;
internal::DoFHandler::Implementation::reserve_space (*this);
// hand things off to the policy
- number_cache = policy->distribute_dofs (offset,
- *this);
+ number_cache = policy->distribute_dofs (*this);
// initialize the block info object
// only if this is a sequential
static
unsigned int
distribute_dofs (const unsigned int offset,
- const types::subdomain_id_t subdomain_id,
+ const types::subdomain_id subdomain_id,
DoFHandler<dim,spacedim> &dof_handler)
{
const dealii::Triangulation<dim,spacedim> & tria
for (unsigned int level=0; level<dof_handler.levels.size(); ++level)
for (std::vector<unsigned int>::iterator
- i=dof_handler.levels[level]->lines.dofs.begin();
- i!=dof_handler.levels[level]->lines.dofs.end(); ++i)
+ i=dof_handler.levels[level]->dof_object.dofs.begin();
+ i!=dof_handler.levels[level]->dof_object.dofs.end(); ++i)
if (*i != DoFHandler<1,spacedim>::invalid_dof_index)
*i = new_numbers[*i];
for (unsigned int level=0; level<dof_handler.levels.size(); ++level)
{
for (std::vector<unsigned int>::iterator
- i=dof_handler.levels[level]->quads.dofs.begin();
- i!=dof_handler.levels[level]->quads.dofs.end(); ++i)
+ i=dof_handler.levels[level]->dof_object.dofs.begin();
+ i!=dof_handler.levels[level]->dof_object.dofs.end(); ++i)
if (*i != DoFHandler<2,spacedim>::invalid_dof_index)
*i = ((indices.n_elements() == 0) ?
new_numbers[*i] :
for (unsigned int level=0; level<dof_handler.levels.size(); ++level)
{
for (std::vector<unsigned int>::iterator
- i=dof_handler.levels[level]->hexes.dofs.begin();
- i!=dof_handler.levels[level]->hexes.dofs.end(); ++i)
+ i=dof_handler.levels[level]->dof_object.dofs.begin();
+ i!=dof_handler.levels[level]->dof_object.dofs.end(); ++i)
if (*i != DoFHandler<3,spacedim>::invalid_dof_index)
*i = ((indices.n_elements() == 0) ?
new_numbers[*i] :
template <int dim, int spacedim>
NumberCache
Sequential<dim,spacedim>::
- distribute_dofs (const unsigned int offset,
- DoFHandler<dim,spacedim> &dof_handler) const
+ distribute_dofs (DoFHandler<dim,spacedim> &dof_handler) const
{
const unsigned int n_dofs =
- Implementation::distribute_dofs (offset,
+ Implementation::distribute_dofs (0,
types::invalid_subdomain_id,
dof_handler);
const unsigned int tree_index,
const typename DoFHandler<dim,spacedim>::cell_iterator &dealii_cell,
const typename dealii::internal::p4est::types<dim>::quadrant &p4est_cell,
- const std::map<unsigned int, std::set<dealii::types::subdomain_id_t> > &vertices_with_ghost_neighbors,
- std::map<dealii::types::subdomain_id_t, typename types<dim>::cellinfo> &needs_to_get_cell)
+ const std::map<unsigned int, std::set<dealii::types::subdomain_id> > &vertices_with_ghost_neighbors,
+ std::map<dealii::types::subdomain_id, typename types<dim>::cellinfo> &needs_to_get_cell)
{
// see if we have to
// recurse...
// check each vertex if
// it is interesting and
// push dofindices if yes
- std::set<dealii::types::subdomain_id_t> send_to;
+ std::set<dealii::types::subdomain_id> send_to;
for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
{
- const std::map<unsigned int, std::set<dealii::types::subdomain_id_t> >::const_iterator
+ const std::map<unsigned int, std::set<dealii::types::subdomain_id> >::const_iterator
neighbor_subdomains_of_vertex
= vertices_with_ghost_neighbors.find (dealii_cell->vertex_index(v));
local_dof_indices (dealii_cell->get_fe().dofs_per_cell);
dealii_cell->get_dof_indices (local_dof_indices);
- for (std::set<dealii::types::subdomain_id_t>::iterator it=send_to.begin();
+ for (std::set<dealii::types::subdomain_id>::iterator it=send_to.begin();
it!=send_to.end();++it)
{
- const dealii::types::subdomain_id_t subdomain = *it;
+ const dealii::types::subdomain_id subdomain = *it;
// get an iterator
// to what needs to
// already exists),
// or create such
// an object
- typename std::map<dealii::types::subdomain_id_t, typename types<dim>::cellinfo>::iterator
+ typename std::map<dealii::types::subdomain_id, typename types<dim>::cellinfo>::iterator
p
= needs_to_get_cell.insert (std::make_pair(subdomain,
typename types<dim>::cellinfo()))
void
communicate_dof_indices_on_marked_cells
(const DoFHandler<1,spacedim> &,
- const std::map<unsigned int, std::set<dealii::types::subdomain_id_t> > &,
+ const std::map<unsigned int, std::set<dealii::types::subdomain_id> > &,
const std::vector<unsigned int> &,
const std::vector<unsigned int> &)
{
void
communicate_dof_indices_on_marked_cells
(const DoFHandler<dim,spacedim> &dof_handler,
- const std::map<unsigned int, std::set<dealii::types::subdomain_id_t> > &vertices_with_ghost_neighbors,
+ const std::map<unsigned int, std::set<dealii::types::subdomain_id> > &vertices_with_ghost_neighbors,
const std::vector<unsigned int> &coarse_cell_to_p4est_tree_permutation,
const std::vector<unsigned int> &p4est_tree_to_coarse_cell_permutation)
{
// dof_indices for the
// interested neighbors
typedef
- std::map<dealii::types::subdomain_id_t, typename types<dim>::cellinfo>
+ std::map<dealii::types::subdomain_id, typename types<dim>::cellinfo>
cellmap_t;
cellmap_t needs_to_get_cells;
// mark all own cells, that miss some
// dof_data and collect the neighbors
// that are going to send stuff to us
- std::set<dealii::types::subdomain_id_t> senders;
+ std::set<dealii::types::subdomain_id> senders;
{
std::vector<unsigned int> local_dof_indices;
typename DoFHandler<dim,spacedim>::active_cell_iterator
template <int dim, int spacedim>
NumberCache
ParallelDistributed<dim, spacedim>::
- distribute_dofs (const unsigned int offset,
- DoFHandler<dim,spacedim> &dof_handler) const
+ distribute_dofs (DoFHandler<dim,spacedim> &dof_handler) const
{
- Assert(offset==0, ExcNotImplemented());
NumberCache number_cache;
#ifndef DEAL_II_USE_P4EST
// subdomain to the vertex and
// keep track of interesting
// neighbors
- std::map<unsigned int, std::set<dealii::types::subdomain_id_t> >
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> >
vertices_with_ghost_neighbors;
for (typename DoFHandler<dim,spacedim>::active_cell_iterator
cell = dof_handler.begin_active();
// subdomain to the vertex and
// keep track of interesting
// neighbors
- std::map<unsigned int, std::set<dealii::types::subdomain_id_t> >
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> >
vertices_with_ghost_neighbors;
for (typename DoFHandler<dim,spacedim>::active_cell_iterator
cell = dof_handler.begin_active();
DoFLevel<1>::memory_consumption () const
{
return (DoFLevel<0>::memory_consumption () +
- MemoryConsumption::memory_consumption (lines));
+ MemoryConsumption::memory_consumption (dof_object));
}
DoFLevel<2>::memory_consumption () const
{
return (DoFLevel<0>::memory_consumption () +
- MemoryConsumption::memory_consumption (quads));
+ MemoryConsumption::memory_consumption (dof_object));
}
DoFLevel<3>::memory_consumption () const
{
return (DoFLevel<0>::memory_consumption () +
- MemoryConsumption::memory_consumption (hexes));
+ MemoryConsumption::memory_consumption (dof_object));
}
}
for (unsigned int c=0; c<n_buckets; ++c)
{
shifts[c]=cumulated;
- for (types::subdomain_id_t i=0; i<tria->locally_owned_subdomain(); ++i)
+ for (types::subdomain_id i=0; i<tria->locally_owned_subdomain(); ++i)
shifts[c] += all_dof_counts[c+n_buckets*i];
for (unsigned int i=0; i<Utilities::MPI::n_mpi_processes (tria->get_communicator()); ++i)
cumulated += all_dof_counts[c+n_buckets*i];
+ template <class DH>
+ void
+ sort_selected_dofs_back (DH& dof_handler,
+ const std::vector<bool>& selected_dofs,
+ const unsigned int level)
+ {
+ std::vector<unsigned int> renumbering(dof_handler.n_dofs(level),
+ DH::invalid_dof_index);
+ compute_sort_selected_dofs_back(renumbering, dof_handler, selected_dofs, level);
+
+ dof_handler.renumber_dofs(level, renumbering);
+ }
+
+
+
template <class DH>
void
compute_sort_selected_dofs_back (std::vector<unsigned int>& new_indices,
+ template <class DH>
+ void
+ compute_sort_selected_dofs_back (std::vector<unsigned int>& new_indices,
+ const DH& dof_handler,
+ const std::vector<bool>& selected_dofs,
+ const unsigned int level)
+ {
+ const unsigned int n_dofs = dof_handler.n_dofs(level);
+ Assert (selected_dofs.size() == n_dofs,
+ ExcDimensionMismatch (selected_dofs.size(), n_dofs));
+
+ // re-sort the dofs according to
+ // their selection state
+ Assert (new_indices.size() == n_dofs,
+ ExcDimensionMismatch(new_indices.size(), n_dofs));
+
+ const unsigned int n_selected_dofs = std::count (selected_dofs.begin(),
+ selected_dofs.end(),
+ false);
+
+ unsigned int next_unselected = 0;
+ unsigned int next_selected = n_selected_dofs;
+ for (unsigned int i=0; i<n_dofs; ++i)
+ if (selected_dofs[i] == false)
+ {
+ new_indices[i] = next_unselected;
+ ++next_unselected;
+ }
+ else
+ {
+ new_indices[i] = next_selected;
+ ++next_selected;
+ };
+ Assert (next_unselected == n_selected_dofs, ExcInternalError());
+ Assert (next_selected == n_dofs, ExcInternalError());
+ }
+
+
+
template <class DH>
void
cell_wise_dg (DH& dof,
Assert(new_indices.size() == n_dofs,
ExcDimensionMismatch(new_indices.size(), n_dofs));
- for (unsigned i=0; i<n_dofs; ++i)
+ for (unsigned int i=0; i<n_dofs; ++i)
new_indices[i] = i;
std::random_shuffle (new_indices.begin(), new_indices.end());
// first get the association of each dof
// with a subdomain and determine the total
// number of subdomain ids used
- std::vector<types::subdomain_id_t> subdomain_association (n_dofs);
+ std::vector<types::subdomain_id> subdomain_association (n_dofs);
DoFTools::get_subdomain_association (dof_handler,
subdomain_association);
const unsigned int n_subdomains
(DoFHandler<deal_II_dimension> &,
const std::vector<bool> &);
+ template
+ void sort_selected_dofs_back<MGDoFHandler<deal_II_dimension> >
+ (MGDoFHandler<deal_II_dimension> &,
+ const std::vector<bool> &,
+ const unsigned int);
+
template
void
compute_sort_selected_dofs_back<DoFHandler<deal_II_dimension> >
const DoFHandler<deal_II_dimension> &,
const std::vector<bool> &);
+ template
+ void
+ compute_sort_selected_dofs_back<MGDoFHandler<deal_II_dimension> >
+ (std::vector<unsigned int>&,
+ const MGDoFHandler<deal_II_dimension> &,
+ const std::vector<bool> &,
+ const unsigned int);
+
template
void random<hp::DoFHandler<deal_II_dimension> >
(hp::DoFHandler<deal_II_dimension> &);
#include <deal.II/hp/q_collection.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/multigrid/mg_dof_handler.h>
#include <deal.II/multigrid/mg_dof_accessor.h>
SparsityPattern &sparsity,
const ConstraintMatrix &constraints,
const bool keep_constrained_dofs,
- const types::subdomain_id_t subdomain_id)
+ const types::subdomain_id subdomain_id)
{
const unsigned int n_dofs = dof.n_dofs();
SparsityPattern &sparsity,
const ConstraintMatrix &constraints,
const bool keep_constrained_dofs,
- const types::subdomain_id_t subdomain_id)
+ const types::subdomain_id subdomain_id)
{
const unsigned int n_dofs = dof.n_dofs();
const unsigned int n_dofs = dof.n_dofs();
AssertDimension (dof_to_boundary_mapping.size(), n_dofs);
- Assert (boundary_indicators.find(types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find(numbers::internal_face_boundary_id) == boundary_indicators.end(),
typename DH::ExcInvalidBoundaryIndicator());
Assert (sparsity.n_rows() == dof.n_boundary_dofs (boundary_indicators),
ExcDimensionMismatch (sparsity.n_rows(), dof.n_boundary_dofs (boundary_indicators)));
SparsityPattern &sparsity,
const ConstraintMatrix &constraints,
const bool keep_constrained_dofs,
- const types::subdomain_id_t subdomain_id)
+ const types::subdomain_id subdomain_id)
{
const unsigned int n_dofs = dof.n_dofs();
template<typename DH>
void
make_periodicity_constraints (const DH &dof_handler,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
const int direction,
dealii::ConstraintMatrix &constraint_matrix,
const std::vector<bool> &component_mask)
template<typename DH>
void
make_periodicity_constraints (const DH &dof_handler,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
const int direction,
dealii::Tensor<1,DH::space_dimension>
&offset,
// assignment is done by blocks, not by
// components, as specified by
// component_select. The additional argument
- // component_select only is used for
+ // component_select is only used for
// non-primitive FEs, where we need it since
// more components couple, and no unique
// component can be assigned. Then, we sort
// them to the first selected component of the
// vector system.
+ //
+ // the output array dofs_by_component
+ // lists for each dof the corresponding
+ // vector component. if the DoFHandler is
+ // based on a parallel distributed
+ // triangulation then the output array is
+ // index by
+ // dof.locally_owned_dofs().index_within_set(indices[i])
template <class DH>
inline
void
ExcDimensionMismatch(dofs_by_component.size(),
dof.n_locally_owned_dofs()));
- // next set up a table for the
- // degrees of freedom on each of
- // the cells whether it is
- // something interesting or not
+ // next set up a table for the degrees
+ // of freedom on each of the cells
+ // (regardless of the fact whether it
+ // is listed in the component_select
+ // argument or not)
+ //
+ // for each element 'f' of the
+ // FECollection,
+ // local_component_association[f][d]
+ // then returns the vector component
+ // that degree of freedom 'd' belongs
+ // to (or, in the case of
+ // sort_by_blocks, the block that it
+ // corresponds to)
std::vector<std::vector<unsigned char> > local_component_association
(fe_collection.size());
for (unsigned int f=0; f<fe_collection.size(); ++f)
fe_collection[f];
local_component_association[f].resize(fe.dofs_per_cell);
if (sort_by_blocks == true)
+ // compute the block each
+ // local dof belongs to
{
for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
local_component_association[f][i]
= fe.system_to_block_index(i).first;
}
else
+ // compute the component each
+ // local dof belongs to
for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
if (fe.is_primitive(i))
local_component_association[f][i] =
extract_boundary_dofs (const DH &dof_handler,
const std::vector<bool> &component_select,
std::vector<bool> &selected_dofs,
- const std::set<types::boundary_id_t> &boundary_indicators)
+ const std::set<types::boundary_id> &boundary_indicators)
{
Assert ((dynamic_cast<const parallel::distributed::Triangulation<DH::dimension,DH::space_dimension>*>
(&dof_handler.get_tria())
extract_boundary_dofs (const DH &dof_handler,
const std::vector<bool> &component_select,
IndexSet &selected_dofs,
- const std::set<types::boundary_id_t> &boundary_indicators)
+ const std::set<types::boundary_id> &boundary_indicators)
{
AssertDimension (component_select.size(), n_components(dof_handler));
- Assert (boundary_indicators.find (types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find (numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
const unsigned int dim=DH::dimension;
extract_dofs_with_support_on_boundary (const DH &dof_handler,
const std::vector<bool> &component_select,
std::vector<bool> &selected_dofs,
- const std::set<types::boundary_id_t> &boundary_indicators)
+ const std::set<types::boundary_id> &boundary_indicators)
{
AssertDimension (component_select.size(), n_components(dof_handler));
- Assert (boundary_indicators.find (types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find (numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
// let's see whether we have to
template <class DH>
void
extract_subdomain_dofs (const DH &dof_handler,
- const types::subdomain_id_t subdomain_id,
+ const types::subdomain_id subdomain_id,
std::vector<bool> &selected_dofs)
{
Assert(selected_dofs.size() == dof_handler.n_dofs(),
template <class DH>
void
get_subdomain_association (const DH &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association)
+ std::vector<types::subdomain_id> &subdomain_association)
{
// if the Triangulation is distributed, the
// only thing we can usefully ask is for
ExcMessage ("You can't call this function for meshes that "
"have artificial cells."));
- const types::subdomain_id_t subdomain_id = cell->subdomain_id();
+ const types::subdomain_id subdomain_id = cell->subdomain_id();
const unsigned int dofs_per_cell = cell->get_fe().dofs_per_cell;
local_dof_indices.resize (dofs_per_cell);
cell->get_dof_indices (local_dof_indices);
template <class DH>
unsigned int
count_dofs_with_subdomain_association (const DH &dof_handler,
- const types::subdomain_id_t subdomain)
+ const types::subdomain_id subdomain)
{
- std::vector<types::subdomain_id_t> subdomain_association (dof_handler.n_dofs());
+ std::vector<types::subdomain_id> subdomain_association (dof_handler.n_dofs());
get_subdomain_association (dof_handler, subdomain_association);
return std::count (subdomain_association.begin(),
template <class DH>
IndexSet
dof_indices_with_subdomain_association (const DH &dof_handler,
- const types::subdomain_id_t subdomain)
+ const types::subdomain_id subdomain)
{
// If we have a distributed::Triangulation only
template <class DH>
void
count_dofs_with_subdomain_association (const DH &dof_handler,
- const types::subdomain_id_t subdomain,
+ const types::subdomain_id subdomain,
std::vector<unsigned int> &n_dofs_on_subdomain)
{
Assert (n_dofs_on_subdomain.size() == dof_handler.get_fe().n_components(),
}
#endif
- std::vector<types::subdomain_id_t> subdomain_association (dof_handler.n_dofs());
+ std::vector<types::subdomain_id> subdomain_association (dof_handler.n_dofs());
get_subdomain_association (dof_handler, subdomain_association);
std::vector<unsigned char> component_association (dof_handler.n_dofs());
void
count_dofs_per_block (const DH &dof_handler,
std::vector<unsigned int> &dofs_per_block,
- std::vector<unsigned int> target_block)
+ const std::vector<unsigned int> &target_block_)
{
+ std::vector<unsigned int> target_block = target_block_;
+
const dealii::hp::FECollection<DH::dimension,DH::space_dimension>
fe_collection (dof_handler.get_fe());
Assert (fe_collection.size() < 256, ExcNotImplemented());
template <class DH>
void map_dof_to_boundary_indices (
const DH &dof_handler,
- const std::set<types::boundary_id_t> &boundary_indicators,
+ const std::set<types::boundary_id> &boundary_indicators,
std::vector<unsigned int> &mapping)
{
Assert (&dof_handler.get_fe() != 0, ExcNoFESelected());
- Assert (boundary_indicators.find (types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find (numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
mapping.clear ();
template
void
DoFTools::make_periodicity_constraints(const DH &,
- const types::boundary_id_t,
+ const types::boundary_id,
const int,
dealii::ConstraintMatrix &,
const std::vector<bool> &);
template
void
DoFTools::make_periodicity_constraints(const DH &,
- const types::boundary_id_t,
+ const types::boundary_id,
const int,
dealii::Tensor<1,DH::space_dimension> &,
dealii::ConstraintMatrix &,
(const DoFHandler<deal_II_dimension> &,
const std::vector<bool> &,
std::vector<bool> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
template
void
DoFTools::extract_boundary_dofs<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &,
const std::vector<bool> &,
std::vector<bool> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
template
void
(const DoFHandler<deal_II_dimension> &,
const std::vector<bool> &,
std::vector<bool> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
template
void
DoFTools::extract_dofs_with_support_on_boundary<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &,
const std::vector<bool> &,
std::vector<bool> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
template
void
void
DoFTools::extract_subdomain_dofs<DoFHandler<deal_II_dimension> >
(const DoFHandler<deal_II_dimension> &dof_handler,
- const types::subdomain_id_t subdomain_id,
+ const types::subdomain_id subdomain_id,
std::vector<bool> &selected_dofs);
template
void
DoFTools::extract_subdomain_dofs<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &dof_handler,
- const types::subdomain_id_t subdomain_id,
+ const types::subdomain_id subdomain_id,
std::vector<bool> &selected_dofs);
template
void
DoFTools::get_subdomain_association<DoFHandler<deal_II_dimension> >
(const DoFHandler<deal_II_dimension> &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association);
+ std::vector<types::subdomain_id> &subdomain_association);
template
void
DoFTools::get_subdomain_association<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association);
+ std::vector<types::subdomain_id> &subdomain_association);
template
unsigned int
DoFTools::count_dofs_with_subdomain_association<DoFHandler<deal_II_dimension> >
(const DoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<DoFHandler<deal_II_dimension> >
(const DoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::count_dofs_with_subdomain_association<DoFHandler<deal_II_dimension> >
(const DoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
template
unsigned int
DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
#if deal_II_dimension < 3
(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
const std::vector<bool> &,
std::vector<bool> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
template
unsigned int
DoFTools::count_dofs_with_subdomain_association<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::count_dofs_with_subdomain_association<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
template
unsigned int
DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::get_subdomain_association<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association);
+ std::vector<types::subdomain_id> &subdomain_association);
template
void
DoFTools::get_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association);
+ std::vector<types::subdomain_id> &subdomain_association);
template
void
DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
#endif
(const DoFHandler<1,3> &,
const std::vector<bool> &,
std::vector<bool> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
template
void
DoFTools::get_subdomain_association<DoFHandler<1,3> >
(const DoFHandler<1,3> &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association);
+ std::vector<types::subdomain_id> &subdomain_association);
template
void
DoFTools::get_subdomain_association<hp::DoFHandler<1,3> >
(const hp::DoFHandler<1,3> &dof_handler,
- std::vector<types::subdomain_id_t> &subdomain_association);
+ std::vector<types::subdomain_id> &subdomain_association);
template
unsigned int
DoFTools::count_dofs_with_subdomain_association<DoFHandler<1,3> >
(const DoFHandler<1,3> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<DoFHandler<1,3> >
(const DoFHandler<1,3> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::count_dofs_with_subdomain_association<DoFHandler<1,3> >
(const DoFHandler<1,3> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
template
unsigned int
DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<1,3> >
(const hp::DoFHandler<1,3> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<hp::DoFHandler<1,3> >
(const hp::DoFHandler<1,3> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<1,3> >
(const hp::DoFHandler<1,3> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
#endif
unsigned int
DoFTools::count_dofs_with_subdomain_association<MGDoFHandler<deal_II_dimension> >
(const MGDoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
IndexSet
DoFTools::dof_indices_with_subdomain_association<MGDoFHandler<deal_II_dimension> >
(const MGDoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
void
DoFTools::count_dofs_with_subdomain_association<MGDoFHandler<deal_II_dimension> >
(const MGDoFHandler<deal_II_dimension> &,
- const types::subdomain_id_t,
+ const types::subdomain_id,
std::vector<unsigned int> &);
void
DoFTools::count_dofs_per_block<DoFHandler<deal_II_dimension> > (
const DoFHandler<deal_II_dimension>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<hp::DoFHandler<deal_II_dimension> > (
const hp::DoFHandler<deal_II_dimension>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<MGDoFHandler<deal_II_dimension> > (
const MGDoFHandler<deal_II_dimension>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
void
DoFTools::map_dof_to_boundary_indices<DoFHandler<deal_II_dimension> >
(const DoFHandler<deal_II_dimension> &,
- const std::set<types::boundary_id_t> &,
+ const std::set<types::boundary_id> &,
std::vector<unsigned int> &);
template
void
DoFTools::map_dof_to_boundary_indices<hp::DoFHandler<deal_II_dimension> >
(const hp::DoFHandler<deal_II_dimension> &,
- const std::set<types::boundary_id_t> &,
+ const std::set<types::boundary_id> &,
std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<DoFHandler<deal_II_dimension,deal_II_dimension+1> > (
const DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> > (
const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<MGDoFHandler<deal_II_dimension,deal_II_dimension+1> > (
const MGDoFHandler<deal_II_dimension,deal_II_dimension+1>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
#endif
void
DoFTools::count_dofs_per_block<DoFHandler<1,3> > (
const DoFHandler<1,3>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<hp::DoFHandler<1,3> > (
const hp::DoFHandler<1,3>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
template
void
DoFTools::count_dofs_per_block<MGDoFHandler<1,3> > (
const MGDoFHandler<1,3>&,
- std::vector<unsigned int>&, std::vector<unsigned int>);
+ std::vector<unsigned int>&,
+ const std::vector<unsigned int> &);
#endif
void
DoFTools::map_dof_to_boundary_indices<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const std::set<types::boundary_id_t> &,
+ const std::set<types::boundary_id> &,
std::vector<unsigned int> &);
template
void
DoFTools::map_dof_to_boundary_indices<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
(const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const std::set<types::boundary_id_t> &,
+ const std::set<types::boundary_id> &,
std::vector<unsigned int> &);
template
void
DoFTools::map_dof_to_boundary_indices<DoFHandler<1,3> >
(const DoFHandler<1,3> &,
- const std::set<types::boundary_id_t> &,
+ const std::set<types::boundary_id> &,
std::vector<unsigned int> &);
template
// assume that all entries were
// supposed to be equal.
+//TODO: Do the following in a better way by expanding these arrays in the member initializer section above
// Normally, we should be careful
// with const_cast, but since this
// is the constructor and we do it
template <int dim, int spacedim>
Point<dim>
-FiniteElement<dim,spacedim>::unit_support_point (const unsigned index) const
+FiniteElement<dim,spacedim>::unit_support_point (const unsigned int index) const
{
Assert (index < this->dofs_per_cell,
ExcIndexRange (index, 0, this->dofs_per_cell));
template <int dim, int spacedim>
Point<dim-1>
-FiniteElement<dim,spacedim>::unit_face_support_point (const unsigned index) const
+FiniteElement<dim,spacedim>::unit_face_support_point (const unsigned int index) const
{
Assert (index < this->dofs_per_face,
ExcIndexRange (index, 0, this->dofs_per_face));
template <int dim, int spacedim>
const FiniteElement<dim,spacedim>&
-FiniteElement<dim,spacedim>::base_element(const unsigned index) const
+FiniteElement<dim,spacedim>::base_element(const unsigned int index) const
{
Assert (index==0, ExcIndexRange(index,0,1));
// This function should not be
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_tools.h>
-#ifdef HAVE_STD_STRINGSTREAM
-# include <sstream>
-#else
-# include <strstream>
-#endif
-
+#include <sstream>
#include <iostream>
//TODO: implement the adjust_quad_dof_index_for_face_orientation_table and
// this function returns, so they
// have to be kept in synch
-#ifdef HAVE_STD_STRINGSTREAM
std::ostringstream namebuf;
-#else
- std::ostrstream namebuf;
-#endif
namebuf << "FE_ABF<" << dim << ">(" << rt_order << ")";
-#ifndef HAVE_STD_STRINGSTREAM
- namebuf << std::ends;
-#endif
return namebuf.str();
}
* values[face*n_face_points+k](GeometryInfo<dim>::unit_normal_direction[face]+offset);
}
- const unsigned start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
- const unsigned start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
+ const unsigned int start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
+ const unsigned int start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
for (unsigned int k=0;k<interior_weights.size(0);++k)
for (unsigned int i=0;i<interior_weights.size(1);++i)
for (unsigned int d=0;d<dim;++d)
local_dofs[start_cell_dofs+i*dim+d] += interior_weights(k,i,d) * values[k+start_cell_points](d+offset);
- const unsigned start_abf_dofs = start_cell_dofs + interior_weights.size(1) * dim;
+ const unsigned int start_abf_dofs = start_cell_dofs + interior_weights.size(1) * dim;
// Cell integral of ABF terms
for (unsigned int k=0;k<interior_weights_abf.size(0);++k)
* values[GeometryInfo<dim>::unit_normal_direction[face]][face*n_face_points+k];
}
- const unsigned start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
- const unsigned start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
+ const unsigned int start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
+ const unsigned int start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
for (unsigned int k=0;k<interior_weights.size(0);++k)
for (unsigned int i=0;i<interior_weights.size(1);++i)
for (unsigned int d=0;d<dim;++d)
local_dofs[start_cell_dofs+i*dim+d] += interior_weights(k,i,d) * values[d][k+start_cell_points];
- const unsigned start_abf_dofs = start_cell_dofs + interior_weights.size(1) * dim;
+ const unsigned int start_abf_dofs = start_cell_dofs + interior_weights.size(1) * dim;
// Cell integral of ABF terms
for (unsigned int k=0;k<interior_weights_abf.size(0);++k)
* n_edge_points],
1);
- for (unsigned i = 0; i < this->degree; ++i)
+ for (unsigned int i = 0; i < this->degree; ++i)
for (unsigned int j = 0; j < this->degree-1; ++j)
system_rhs (i * (this->degree-1) + j)
+= reference_quadrature.weight (q_point) * tmp
* n_edge_points],
2);
- for (unsigned i = 0; i < this->degree; ++i)
+ for (unsigned int i = 0; i < this->degree; ++i)
for (unsigned int j = 0; j < this->degree-1; ++j)
system_rhs (i * (this->degree-1) + j)
+= boundary_weights
+ n_face_points],
2);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= boundary_weights
* n_face_points],
2);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= boundary_weights
* n_face_points],
2);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= boundary_weights
* n_face_points],
1);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= boundary_weights
* n_face_points],
1);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= boundary_weights
* n_edge_points],
1);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= reference_quadrature.weight (q_point) * tmp
* n_edge_points],
face_coordinates[face][1]);
- for (unsigned i = 0; i <= deg; ++i)
+ for (unsigned int i = 0; i <= deg; ++i)
for (unsigned int j = 0; j < deg; ++j)
system_rhs (i * deg + j)
+= boundary_weights (q_point + n_edge_points,
template <int dim>
-FE_Nothing<dim>::FE_Nothing (const unsigned n_components)
+FE_Nothing<dim>::FE_Nothing (const unsigned int n_components)
:
FiniteElement<dim>
(FiniteElementData<dim>(std::vector<unsigned>(dim+1,0),
.TableBase<2,double>::reinit (fe.interface_constraints_size());
for (unsigned int i=0; i<constraint_points.size(); ++i)
- for (unsigned j=0; j<fe.degree+1; ++j)
+ for (unsigned int j=0; j<fe.degree+1; ++j)
{
fe.interface_constraints(i,j) =
polynomials[fe.face_index_map[j]].value (constraint_points[i](0));
constraint_point(k) = 1.0 - constraint_point(k);
}
- for (unsigned j=0; j<pnts; ++j)
+ for (unsigned int j=0; j<pnts; ++j)
{
unsigned int indices[2]
= { fe.face_index_map[j] % (fe.degree + 1),
* values[face*n_face_points+k](GeometryInfo<dim>::unit_normal_direction[face]+offset);
}
- const unsigned start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
- const unsigned start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
+ const unsigned int start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
+ const unsigned int start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
for (unsigned int k=0;k<interior_weights.size(0);++k)
for (unsigned int i=0;i<interior_weights.size(1);++i)
* values[GeometryInfo<dim>::unit_normal_direction[face]][face*n_face_points+k];
}
- const unsigned start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
- const unsigned start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
+ const unsigned int start_cell_dofs = GeometryInfo<dim>::faces_per_cell*this->dofs_per_face;
+ const unsigned int start_cell_points = GeometryInfo<dim>::faces_per_cell*n_face_points;
for (unsigned int k=0;k<interior_weights.size(0);++k)
for (unsigned int i=0;i<interior_weights.size(1);++i)
{
// delete base elements created in
// the constructor
- for (unsigned i=0; i<base_elements.size(); ++i)
+ for (unsigned int i=0; i<base_elements.size(); ++i)
{
base_elements[i].first->unsubscribe(typeid(*this).name());
delete base_elements[i].first;
this->system_to_component_table.resize(this->dofs_per_cell);
this->face_system_to_component_table.resize(this->dofs_per_face);
- unsigned total_index = 0;
+ unsigned int total_index = 0;
this->block_indices_data.reinit(0,0);
for (unsigned int base=0; base < this->n_base_elements(); ++base)
vertex_number<GeometryInfo<dim>::vertices_per_cell;
++vertex_number)
{
- unsigned comp_start = 0;
+ unsigned int comp_start = 0;
for(unsigned int base=0; base<this->n_base_elements(); ++base)
for (unsigned int m=0; m<this->element_multiplicity(base);
++m, comp_start+=base_element(base).n_components())
line_number != GeometryInfo<dim>::lines_per_cell;
++line_number)
{
- unsigned comp_start = 0;
+ unsigned int comp_start = 0;
for (unsigned int base=0; base<this->n_base_elements(); ++base)
for (unsigned int m=0; m<this->element_multiplicity(base);
++m, comp_start+=base_element(base).n_components())
// 2. Lines
if (GeometryInfo<dim>::lines_per_face > 0)
- for (unsigned line_number= 0;
+ for (unsigned int line_number= 0;
line_number != GeometryInfo<dim>::lines_per_face;
++line_number)
{
- unsigned comp_start = 0;
- for(unsigned base = 0; base < this->n_base_elements(); ++base)
- for (unsigned m=0; m<this->element_multiplicity(base);
+ unsigned int comp_start = 0;
+ for(unsigned int base = 0; base < this->n_base_elements(); ++base)
+ for (unsigned int m=0; m<this->element_multiplicity(base);
++m, comp_start += base_element(base).n_components())
- for (unsigned local_index = 0;
+ for (unsigned int local_index = 0;
local_index < base_element(base).dofs_per_line;
++local_index, ++total_index)
{
// 3. Quads
if (GeometryInfo<dim>::quads_per_face > 0)
- for (unsigned quad_number= 0;
+ for (unsigned int quad_number= 0;
quad_number != GeometryInfo<dim>::quads_per_face;
++quad_number)
{
- unsigned comp_start = 0;
- for(unsigned base=0; base<this->n_base_elements(); ++base)
- for (unsigned m=0; m<this->element_multiplicity(base);
+ unsigned int comp_start = 0;
+ for(unsigned int base=0; base<this->n_base_elements(); ++base)
+ for (unsigned int m=0; m<this->element_multiplicity(base);
++m, comp_start += base_element(base).n_components())
- for (unsigned local_index = 0;
+ for (unsigned int local_index = 0;
local_index < base_element(base).dofs_per_quad;
++local_index, ++total_index)
{
vertex_number<GeometryInfo<dim>::vertices_per_cell;
++vertex_number)
{
- unsigned comp_start = 0;
+ unsigned int comp_start = 0;
for(unsigned int base=0; base<fes.size(); ++base)
for (unsigned int m=0; m<multiplicities[base];
++m, comp_start+=fes[base]->n_components())
line_number != GeometryInfo<dim>::lines_per_cell;
++line_number)
{
- unsigned comp_start = 0;
+ unsigned int comp_start = 0;
for (unsigned int base=0; base<fes.size(); ++base)
for (unsigned int m=0; m<multiplicities[base];
++m, comp_start+=fes[base]->n_components())
template <int dim, int spacedim>
Point<dim>
-FESystem<dim,spacedim>::unit_support_point (const unsigned index) const
+FESystem<dim,spacedim>::unit_support_point (const unsigned int index) const
{
Assert (index < this->dofs_per_cell,
ExcIndexRange (index, 0, this->dofs_per_cell));
template <int dim, int spacedim>
Point<dim-1>
-FESystem<dim,spacedim>::unit_face_support_point (const unsigned index) const
+FESystem<dim,spacedim>::unit_face_support_point (const unsigned int index) const
{
Assert (index < this->dofs_per_face,
ExcIndexRange (index, 0, this->dofs_per_face));
// we can only interpolate u1 on
// a cell, which this processor owns,
// so we have to know the subdomain_id
- const types::subdomain_id_t subdomain_id =
+ const types::subdomain_id subdomain_id =
dof1.get_tria().locally_owned_subdomain();
for (; cell1!=endc1; ++cell1, ++cell2)
Vector<typename OutVector::value_type> u1_local(dofs_per_cell1);
Vector<typename OutVector::value_type> u1_int_local(dofs_per_cell1);
- const types::subdomain_id_t subdomain_id =
+ const types::subdomain_id subdomain_id =
dof1.get_tria().locally_owned_subdomain();
typename DoFHandler<dim,spacedim>::active_cell_iterator cell = dof1.begin_active(),
Vector<typename OutVector::value_type> u1_local(DoFTools::max_dofs_per_cell(dof1));
Vector<typename OutVector::value_type> u1_int_local(DoFTools::max_dofs_per_cell(dof1));
- const types::subdomain_id_t subdomain_id =
+ const types::subdomain_id subdomain_id =
dof1.get_tria().locally_owned_subdomain();
typename DH<dim>::active_cell_iterator cell = dof1.begin_active(),
Vector<typename OutVector::value_type> u1_local(dofs_per_cell);
Vector<typename OutVector::value_type> u1_diff_local(dofs_per_cell);
- const types::subdomain_id_t subdomain_id =
+ const types::subdomain_id subdomain_id =
dof1.get_tria().locally_owned_subdomain();
FullMatrix<double> difference_matrix(dofs_per_cell, dofs_per_cell);
// Assert that we can write all
// components into the result
// vectors
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
Assert (values[i].size() == n_components,
ExcDimensionMismatch(values[i].size(), n_components));
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
std::fill_n (values[i].begin(), values[i].size(), 0);
// add up contributions of trial
// finite element
const unsigned int result_components = indices.size() * n_components / dofs_per_cell;
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
Assert (values[i].size() == result_components,
ExcDimensionMismatch(values[i].size(), result_components));
Assert (this->update_flags & update_values, ExcAccessToUninitializedField());
// initialize with zero
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
std::fill_n (values[i].begin(), values[i].size(), 0);
// add up contributions of trial
{
Assert (values.size() == result_components,
ExcDimensionMismatch(values.size(), result_components));
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
Assert (values[i].size() == n_quadrature_points,
ExcDimensionMismatch(values[i].size(), n_quadrature_points));
}
{
Assert(values.size() == n_quadrature_points,
ExcDimensionMismatch(values.size(), n_quadrature_points));
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
Assert (values[i].size() == result_components,
ExcDimensionMismatch(values[i].size(), result_components));
}
Assert (this->update_flags & update_values, ExcAccessToUninitializedField());
// initialize with zero
- for (unsigned i=0;i<values.size();++i)
+ for (unsigned int i=0;i<values.size();++i)
std::fill_n (values[i].begin(), values[i].size(), 0);
// add up contributions of trial
ExcDimensionMismatch(gradients.size(), n_quadrature_points));
const unsigned int n_components = fe->n_components();
- for (unsigned i=0; i<gradients.size(); ++i)
+ for (unsigned int i=0; i<gradients.size(); ++i)
Assert (gradients[i].size() == n_components,
ExcDimensionMismatch(gradients[i].size(), n_components));
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
- for (unsigned i=0;i<gradients.size();++i)
+ for (unsigned int i=0;i<gradients.size();++i)
std::fill_n (gradients[i].begin(), gradients[i].size(), Tensor<1,spacedim>());
// add up contributions of trial
{
Assert (gradients.size() == result_components,
ExcDimensionMismatch(gradients.size(), result_components));
- for (unsigned i=0;i<gradients.size();++i)
+ for (unsigned int i=0;i<gradients.size();++i)
Assert (gradients[i].size() == n_quadrature_points,
ExcDimensionMismatch(gradients[i].size(), n_quadrature_points));
}
{
Assert(gradients.size() == n_quadrature_points,
ExcDimensionMismatch(gradients.size(), n_quadrature_points));
- for (unsigned i=0;i<gradients.size();++i)
+ for (unsigned int i=0;i<gradients.size();++i)
Assert (gradients[i].size() == result_components,
ExcDimensionMismatch(gradients[i].size(), result_components));
}
Assert (this->update_flags & update_gradients, ExcAccessToUninitializedField());
// initialize with zero
- for (unsigned i=0;i<gradients.size();++i)
+ for (unsigned int i=0;i<gradients.size();++i)
std::fill_n (gradients[i].begin(), gradients[i].size(), Tensor<1,spacedim>());
// add up contributions of trial
ExcDimensionMismatch(hessians.size(), n_quadrature_points));
const unsigned int n_components = fe->n_components();
- for (unsigned i=0;i<hessians.size();++i)
+ for (unsigned int i=0;i<hessians.size();++i)
Assert (hessians[i].size() == n_components,
ExcDimensionMismatch(hessians[i].size(), n_components));
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
- for (unsigned i=0;i<hessians.size();++i)
+ for (unsigned int i=0;i<hessians.size();++i)
std::fill_n (hessians[i].begin(), hessians[i].size(), Tensor<2,spacedim>());
// add up contributions of trial
{
Assert (hessians.size() == result_components,
ExcDimensionMismatch(hessians.size(), result_components));
- for (unsigned i=0;i<hessians.size();++i)
+ for (unsigned int i=0;i<hessians.size();++i)
Assert (hessians[i].size() == n_quadrature_points,
ExcDimensionMismatch(hessians[i].size(), n_quadrature_points));
}
{
Assert(hessians.size() == n_quadrature_points,
ExcDimensionMismatch(hessians.size(), n_quadrature_points));
- for (unsigned i=0;i<hessians.size();++i)
+ for (unsigned int i=0;i<hessians.size();++i)
Assert (hessians[i].size() == result_components,
ExcDimensionMismatch(hessians[i].size(), result_components));
}
const unsigned int component_multiple = result_components / n_components;
// initialize with zero
- for (unsigned i=0;i<hessians.size();++i)
+ for (unsigned int i=0;i<hessians.size();++i)
std::fill_n (hessians[i].begin(), hessians[i].size(), Tensor<2,spacedim>());
// add up contributions of trial
// Assert that we can write all
// components into the result
// vectors
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
Assert (laplacians[i].size() == n_components,
ExcDimensionMismatch(laplacians[i].size(), n_components));
present_cell->get_interpolated_dof_values(fe_function, dof_values);
// initialize with zero
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
std::fill_n (laplacians[i].begin(), laplacians[i].size(), 0);
// add up contributions of trial
// finite element
const unsigned int result_components = indices.size() * n_components / dofs_per_cell;
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
Assert (laplacians[i].size() == result_components,
ExcDimensionMismatch(laplacians[i].size(), result_components));
Assert (this->update_flags & update_hessians, ExcAccessToUninitializedField());
// initialize with zero
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
std::fill_n (laplacians[i].begin(), laplacians[i].size(), 0);
// add up contributions of trial
{
Assert (laplacians.size() == result_components,
ExcDimensionMismatch(laplacians.size(), result_components));
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
Assert (laplacians[i].size() == n_quadrature_points,
ExcDimensionMismatch(laplacians[i].size(), n_quadrature_points));
}
{
Assert(laplacians.size() == n_quadrature_points,
ExcDimensionMismatch(laplacians.size(), n_quadrature_points));
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
Assert (laplacians[i].size() == result_components,
ExcDimensionMismatch(laplacians[i].size(), result_components));
}
Assert (this->update_flags & update_hessians, ExcAccessToUninitializedField());
// initialize with zero
- for (unsigned i=0;i<laplacians.size();++i)
+ for (unsigned int i=0;i<laplacians.size();++i)
std::fill_n (laplacians[i].begin(), laplacians[i].size(), 0);
// add up contributions of trial
// map the unit tangentials to the
// real cell. checking for d!=dim-1
// eliminates compiler warnings
- // regarding unsigned expressions <
+ // regarding unsigned int expressions <
// 0.
for (unsigned int d=0; d!=dim-1; ++d)
{
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <iostream>
#include <cmath>
Triangulation<1>& tria,
const std::vector< std::vector<double> >& spacing,
const Point<1>& p,
- const Table<1,types::material_id_t>& material_id,
+ const Table<1,types::material_id>& material_id,
const bool colorize)
{
// contributed by Yaqi Wang 2006
// create the cells
unsigned int n_val_cells = 0;
for (unsigned int i=0; i<n_cells; i++)
- if (material_id[i]!=types::invalid_material_id) n_val_cells++;
+ if (material_id[i]!=numbers::invalid_material_id) n_val_cells++;
std::vector<CellData<1> > cells(n_val_cells);
unsigned int id = 0;
for (unsigned int x=0; x<n_cells; ++x)
- if (material_id[x] != types::invalid_material_id)
+ if (material_id[x] != numbers::invalid_material_id)
{
cells[id].vertices[0] = x;
cells[id].vertices[1] = x+1;
Triangulation<2>& tria,
const std::vector< std::vector<double> >& spacing,
const Point<2>& p,
- const Table<2,types::material_id_t>& material_id,
+ const Table<2,types::material_id>& material_id,
const bool colorize)
{
// contributed by Yaqi Wang 2006
unsigned int n_val_cells = 0;
for (unsigned int i=0; i<material_id.size(0); i++)
for (unsigned int j=0; j<material_id.size(1); j++)
- if (material_id[i][j] != types::invalid_material_id)
+ if (material_id[i][j] != numbers::invalid_material_id)
n_val_cells++;
std::vector<CellData<2> > cells(n_val_cells);
unsigned int id = 0;
for (unsigned int y=0; y<repetitions[1]; ++y)
for (unsigned int x=0; x<repetitions[0]; ++x)
- if (material_id[x][y]!=types::invalid_material_id)
+ if (material_id[x][y]!=numbers::invalid_material_id)
{
cells[id].vertices[0] = y*(repetitions[0]+1)+x;
cells[id].vertices[1] = y*(repetitions[0]+1)+x+1;
Triangulation<3>& tria,
const std::vector< std::vector<double> >& spacing,
const Point<3>& p,
- const Table<3,types::material_id_t>& material_id,
+ const Table<3,types::material_id>& material_id,
const bool colorize)
{
// contributed by Yaqi Wang 2006
for (unsigned int i=0; i<material_id.size(0); i++)
for (unsigned int j=0; j<material_id.size(1); j++)
for (unsigned int k=0; k<material_id.size(2); k++)
- if (material_id[i][j][k]!=types::invalid_material_id)
+ if (material_id[i][j][k]!=numbers::invalid_material_id)
n_val_cells++;
std::vector<CellData<dim> > cells(n_val_cells);
for (unsigned int z=0; z<repetitions[2]; ++z)
for (unsigned int y=0; y<repetitions[1]; ++y)
for (unsigned int x=0; x<repetitions[0]; ++x)
- if (material_id[x][y][z]!=types::invalid_material_id)
+ if (material_id[x][y][z]!=numbers::invalid_material_id)
{
cells[id].vertices[0] = z*n_xy + y*n_x + x;
cells[id].vertices[1] = z*n_xy + y*n_x + x+1;
for (unsigned int i1=0;i1<4;++i1)
vertices[k++] = Point<2>(coords[i1], coords[i0]);
- const types::material_id_t materials[9] = { 5, 4, 6,
+ const types::material_id materials[9] = { 5, 4, 6,
1, 0, 2,
9, 8,10
};
{
for (unsigned int i=0;i<GeometryInfo<2>::faces_per_cell;++i)
{
- if (cell->face(i)->boundary_indicator() == types::internal_face_boundary_id)
+ if (cell->face(i)->boundary_indicator() == numbers::internal_face_boundary_id)
continue;
// If x is zero, then this is part of the plane
for (unsigned int x=0;x<4;++x)
vertices[k++] = Point<3>(coords[x], coords[y], coords[z]);
- const types::material_id_t materials[27] = {
+ const types::material_id materials[27] = {
21,20,22,
17,16,18,
25,24,26,
in >> cells.back().vertices[i];
// to make sure that the cast wont fail
- Assert(material_id<= std::numeric_limits<types::material_id_t>::max(),
- ExcIndexRange(material_id,0,std::numeric_limits<types::material_id_t>::max()));
- // we use only material_ids in the range from 0 to types::invalid_material_id-1
- Assert(material_id < types::invalid_material_id,
- ExcIndexRange(material_id,0,types::invalid_material_id));
+ Assert(material_id<= std::numeric_limits<types::material_id>::max(),
+ ExcIndexRange(material_id,0,std::numeric_limits<types::material_id>::max()));
+ // we use only material_ids in the range from 0 to numbers::invalid_material_id-1
+ Assert(material_id < numbers::invalid_material_id,
+ ExcIndexRange(material_id,0,numbers::invalid_material_id));
- cells.back().material_id = static_cast<types::material_id_t>(material_id);
+ cells.back().material_id = static_cast<types::material_id>(material_id);
// transform from ucd to
// consecutive numbering
>> subcelldata.boundary_lines.back().vertices[1];
// to make sure that the cast wont fail
- Assert(material_id<= std::numeric_limits<types::boundary_id_t>::max(),
- ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id_t>::max()));
- // we use only boundary_ids in the range from 0 to types::internal_face_boundary_id-1
- Assert(material_id < types::internal_face_boundary_id,
- ExcIndexRange(material_id,0,types::internal_face_boundary_id));
+ Assert(material_id<= std::numeric_limits<types::boundary_id>::max(),
+ ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id>::max()));
+ // we use only boundary_ids in the range from 0 to numbers::internal_face_boundary_id-1
+ Assert(material_id < numbers::internal_face_boundary_id,
+ ExcIndexRange(material_id,0,numbers::internal_face_boundary_id));
subcelldata.boundary_lines.back().boundary_id
- = static_cast<types::boundary_id_t>(material_id);
+ = static_cast<types::boundary_id>(material_id);
// transform from ucd to
// consecutive numbering
>> subcelldata.boundary_quads.back().vertices[3];
// to make sure that the cast wont fail
- Assert(material_id<= std::numeric_limits<types::boundary_id_t>::max(),
- ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id_t>::max()));
- // we use only boundary_ids in the range from 0 to types::internal_face_boundary_id-1
- Assert(material_id < types::internal_face_boundary_id,
- ExcIndexRange(material_id,0,types::internal_face_boundary_id));
+ Assert(material_id<= std::numeric_limits<types::boundary_id>::max(),
+ ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id>::max()));
+ // we use only boundary_ids in the range from 0 to numbers::internal_face_boundary_id-1
+ Assert(material_id < numbers::internal_face_boundary_id,
+ ExcIndexRange(material_id,0,numbers::internal_face_boundary_id));
subcelldata.boundary_quads.back().boundary_id
- = static_cast<types::boundary_id_t>(material_id);
+ = static_cast<types::boundary_id>(material_id);
// transform from ucd to
// consecutive numbering
in >> cells.back().vertices[i];
// to make sure that the cast wont fail
- Assert(material_id<= std::numeric_limits<types::material_id_t>::max(),
- ExcIndexRange(material_id,0,std::numeric_limits<types::material_id_t>::max()));
- // we use only material_ids in the range from 0 to types::invalid_material_id-1
- Assert(material_id < types::invalid_material_id,
- ExcIndexRange(material_id,0,types::invalid_material_id));
+ Assert(material_id<= std::numeric_limits<types::material_id>::max(),
+ ExcIndexRange(material_id,0,std::numeric_limits<types::material_id>::max()));
+ // we use only material_ids in the range from 0 to numbers::invalid_material_id-1
+ Assert(material_id < numbers::invalid_material_id,
+ ExcIndexRange(material_id,0,numbers::invalid_material_id));
- cells.back().material_id = static_cast<types::material_id_t>(material_id);
+ cells.back().material_id = static_cast<types::material_id>(material_id);
// transform from ucd to
// consecutive numbering
>> subcelldata.boundary_lines.back().vertices[1];
// to make sure that the cast wont fail
- Assert(material_id<= std::numeric_limits<types::boundary_id_t>::max(),
- ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id_t>::max()));
- // we use only boundary_ids in the range from 0 to types::internal_face_boundary_id-1
- Assert(material_id < types::internal_face_boundary_id,
- ExcIndexRange(material_id,0,types::internal_face_boundary_id));
+ Assert(material_id<= std::numeric_limits<types::boundary_id>::max(),
+ ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id>::max()));
+ // we use only boundary_ids in the range from 0 to numbers::internal_face_boundary_id-1
+ Assert(material_id < numbers::internal_face_boundary_id,
+ ExcIndexRange(material_id,0,numbers::internal_face_boundary_id));
subcelldata.boundary_lines.back().boundary_id
- = static_cast<types::boundary_id_t>(material_id);
+ = static_cast<types::boundary_id>(material_id);
// transform from ucd to
// consecutive numbering
>> subcelldata.boundary_quads.back().vertices[3];
// to make sure that the cast wont fail
- Assert(material_id<= std::numeric_limits<types::boundary_id_t>::max(),
- ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id_t>::max()));
- // we use only boundary_ids in the range from 0 to types::internal_face_boundary_id-1
- Assert(material_id < types::internal_face_boundary_id,
- ExcIndexRange(material_id,0,types::internal_face_boundary_id));
+ Assert(material_id<= std::numeric_limits<types::boundary_id>::max(),
+ ExcIndexRange(material_id,0,std::numeric_limits<types::boundary_id>::max()));
+ // we use only boundary_ids in the range from 0 to numbers::internal_face_boundary_id-1
+ Assert(material_id < numbers::internal_face_boundary_id,
+ ExcIndexRange(material_id,0,numbers::internal_face_boundary_id));
subcelldata.boundary_quads.back().boundary_id
- = static_cast<types::boundary_id_t>(material_id);
+ = static_cast<types::boundary_id>(material_id);
// transform from gmsh to
// consecutive numbering
bmarker_var->get(&*bmarker.begin(), n_bquads);
// we only handle boundary
// indicators that fit into an
- // types::boundary_id_t. Also, we don't
- // take types::internal_face_boundary_id
+ // types::boundary_id. Also, we don't
+ // take numbers::internal_face_boundary_id
// as it denotes an internal face
for (unsigned int i=0; i<bmarker.size(); ++i)
- Assert(0<=bmarker[i] && bmarker[i]<types::internal_face_boundary_id, ExcIO());
+ Assert(0<=bmarker[i] && bmarker[i]<numbers::internal_face_boundary_id, ExcIO());
// finally we setup the boundary
// information
subcelldata.boundary_quads[i].vertices[v]=bvertex_indices[
i*GeometryInfo<dim>::vertices_per_face+v];
subcelldata.boundary_quads[i].boundary_id
- = static_cast<types::boundary_id_t>(bmarker[i]);
+ = static_cast<types::boundary_id>(bmarker[i]);
}
GridTools::delete_unused_vertices(vertices, cells, subcelldata);
{
Triangulation<dim>::face_iterator
face = cell->face(face_reorder[f]);
- const types::boundary_id_t bi = face->boundary_indicator();
- if (bi != types::internal_face_boundary_id)
+ const types::boundary_id bi = face->boundary_indicator();
+ if (bi != numbers::internal_face_boundary_id)
{
// Code for polyline
out << "2 1 "
// look at the mid-points of edges
for (; cell != endc; ++cell)
{
- for (unsigned v = 0; v < GeometryInfo<dim>::vertices_per_cell; v++)
+ for (unsigned int v = 0; v < GeometryInfo<dim>::vertices_per_cell; v++)
if (cell->vertex_index(v) == vertex)
{
// OK, we found a cell that contains
// neighbor. if this is the case, then we need to also
// add this neighbor
if (dim >= 2)
- for (unsigned vface = 0; vface < dim; vface++)
+ for (unsigned int vface = 0; vface < dim; vface++)
{
const unsigned int face =
GeometryInfo<dim>::vertex_to_face[v][vface];
// that cell. in either case, it is adjacent
// to the vertex, so add it to the list as well
// (if the cell was already in the list then
- // the std::set makes sure that we get it only once)
+ // the std::set makes sure that we get it only
+ // once)
adjacent_cells.insert (cell->neighbor(face));
goto next_cell;
}
// in 3d also loop over the edges
if (dim >= 3)
{
- for (unsigned e=0; e<GeometryInfo<dim>::lines_per_cell; ++e)
+ for (unsigned int e=0; e<GeometryInfo<dim>::lines_per_cell; ++e)
if (cell->line(e)->has_children())
// the only place where this vertex could have been
// hiding is on the mid-edge point of the edge we
template <int dim, int spacedim>
void
get_subdomain_association (const Triangulation<dim, spacedim> &triangulation,
- std::vector<types::subdomain_id_t> &subdomain)
+ std::vector<types::subdomain_id> &subdomain)
{
Assert (subdomain.size() == triangulation.n_active_cells(),
ExcDimensionMismatch (subdomain.size(),
unsigned int
count_cells_with_subdomain_association (const Triangulation<dim, spacedim> &triangulation,
- const types::subdomain_id_t subdomain)
+ const types::subdomain_id subdomain)
{
unsigned int count = 0;
for (typename Triangulation<dim, spacedim>::active_cell_iterator
typename Container<dim,spacedim>::face_iterator>
extract_boundary_mesh (const Container<dim,spacedim> &volume_mesh,
Container<dim-1,spacedim> &surface_mesh,
- const std::set<types::boundary_id_t> &boundary_ids)
+ const std::set<types::boundary_id> &boundary_ids)
{
// Assumption:
// We are relying below on the fact that Triangulation::create_triangulation(...) will keep the order
}
c_data.vertices[j] = map_vert_index[v_index];
- c_data.material_id = static_cast<types::material_id_t>(face->boundary_indicator());
+ c_data.material_id = static_cast<types::material_id>(face->boundary_indicator());
}
cells.push_back(c_data);
std::map<CellIterator, CellIterator>
collect_periodic_cell_pairs (const CellIterator &begin,
const typename identity<CellIterator>::type &end,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
int direction,
const dealii::Tensor<1,CellIterator::AccessorType::space_dimension>
&offset)
template<typename DH>
std::map<typename DH::cell_iterator, typename DH::cell_iterator>
collect_periodic_cell_pairs (const DH &dof_handler,
- const types::boundary_id_t boundary_component,
+ const types::boundary_id boundary_component,
int direction,
const dealii::Tensor<1,DH::space_dimension>
&offset)
template
void get_subdomain_association (const Triangulation<deal_II_dimension, deal_II_space_dimension> &,
- std::vector<types::subdomain_id_t> &);
+ std::vector<types::subdomain_id> &);
template
unsigned int count_cells_with_subdomain_association(
const Triangulation<deal_II_dimension, deal_II_space_dimension> &,
- const types::subdomain_id_t);
+ const types::subdomain_id);
template
double
Container<deal_II_dimension,deal_II_space_dimension>::face_iterator>
extract_boundary_mesh (const Container<deal_II_dimension, deal_II_space_dimension> &mesh,
Container<deal_II_dimension-1,deal_II_space_dimension> &boundary_mesh,
- const std::set<types::boundary_id_t> &boundary_ids);
+ const std::set<types::boundary_id> &boundary_ids);
\}
#endif
#endif
std::map<X::cell_iterator, X::cell_iterator>
collect_periodic_cell_pairs(const X::cell_iterator &,
const X::cell_iterator &,
- const types::boundary_id_t,
+ const types::boundary_id,
int,
const Tensor<1,deal_II_space_dimension> &);
template
std::map<X::cell_iterator, X::cell_iterator>
collect_periodic_cell_pairs (const X&,
- const types::boundary_id_t,
+ const types::boundary_id,
int,
const Tensor<1,deal_II_space_dimension> &);
if (n_adj_cells == 1)
line->set_boundary_indicator (0);
else
- // interior line -> types::internal_face_boundary_id
- line->set_boundary_indicator (types::internal_face_boundary_id);
+ // interior line -> numbers::internal_face_boundary_id
+ line->set_boundary_indicator (numbers::internal_face_boundary_id);
}
// set boundary indicators where
// assert that we only set
// boundary info once
AssertThrow (! (line->boundary_indicator() != 0 &&
- line->boundary_indicator() != types::internal_face_boundary_id),
+ line->boundary_indicator() != numbers::internal_face_boundary_id),
ExcMultiplySetLineInfoOfLine(line_vertices.first,
line_vertices.second));
// Assert that only exterior lines
// are given a boundary indicator
- AssertThrow (! (line->boundary_indicator() == types::internal_face_boundary_id),
+ AssertThrow (! (line->boundary_indicator() == numbers::internal_face_boundary_id),
ExcInteriorLineCantBeBoundary());
line->set_boundary_indicator (boundary_line->boundary_id);
if (n_adj_cells == 1)
quad->set_boundary_indicator (0);
else
- // interior quad -> types::internal_face_boundary_id
- quad->set_boundary_indicator (types::internal_face_boundary_id);
+ // interior quad -> numbers::internal_face_boundary_id
+ quad->set_boundary_indicator (numbers::internal_face_boundary_id);
}
/////////////////////////////////////////
// as interior
for (typename Triangulation<dim,spacedim>::line_iterator
line=triangulation.begin_line(); line!=triangulation.end_line(); ++line)
- line->set_boundary_indicator (types::internal_face_boundary_id);
+ line->set_boundary_indicator (numbers::internal_face_boundary_id);
// next reset all lines bounding
// boundary quads as on the
// boundary also. note that since
switch_1->line_orientation(1),
switch_1->line_orientation(2),
switch_1->line_orientation(3) };
- const types::boundary_id_t switch_1_boundary_indicator=switch_1->boundary_indicator();
+ const types::boundary_id switch_1_boundary_indicator=switch_1->boundary_indicator();
const unsigned int switch_1_user_index=switch_1->user_index();
const bool switch_1_user_flag=switch_1->user_flag_set();
// An assert to make sure that the
// static_cast in the next line has
// the chance to give reasonable results.
- Assert(cell->material_id()<= std::numeric_limits<types::material_id_t>::max(),
- ExcIndexRange(cell->material_id(),0,std::numeric_limits<types::material_id_t>::max()));
+ Assert(cell->material_id()<= std::numeric_limits<types::material_id>::max(),
+ ExcIndexRange(cell->material_id(),0,std::numeric_limits<types::material_id>::max()));
// new vertex is
// placed on the
// stored in the
// boundary class
triangulation.vertices[next_unused_vertex] =
- triangulation.get_boundary(static_cast<types::boundary_id_t>(cell->material_id()))
+ triangulation.get_boundary(static_cast<types::boundary_id>(cell->material_id()))
.get_new_point_on_quad (cell);
}
}
new_lines[l]->clear_user_data();
new_lines[l]->clear_children();
// interior line
- new_lines[l]->set_boundary_indicator(types::internal_face_boundary_id);
+ new_lines[l]->set_boundary_indicator(numbers::internal_face_boundary_id);
}
// Now add the four (two)
(cell->vertex(0) + cell->vertex(1)) / 2;
else
triangulation.vertices[next_unused_vertex] =
- triangulation.get_boundary(static_cast<types::boundary_id_t>(cell->material_id()))
+ triangulation.get_boundary(static_cast<types::boundary_id>(cell->material_id()))
.get_new_point_on_line(cell);
triangulation.vertices_used[next_unused_vertex] = true;
switch_1->line_orientation(1),
switch_1->line_orientation(2),
switch_1->line_orientation(3)};
- const types::boundary_id_t switch_1_boundary_indicator=switch_1->boundary_indicator();
+ const types::boundary_id switch_1_boundary_indicator=switch_1->boundary_indicator();
const unsigned int switch_1_user_index=switch_1->user_index();
const bool switch_1_user_flag=switch_1->user_flag_set();
const RefinementCase<dim-1> switch_1_refinement_case=switch_1->refinement_case();
new_lines[i]->clear_user_data();
new_lines[i]->clear_children();
// interior line
- new_lines[i]->set_boundary_indicator(types::internal_face_boundary_id);
+ new_lines[i]->set_boundary_indicator(numbers::internal_face_boundary_id);
}
// find some space for the newly to
new_quads[i]->clear_user_data();
new_quads[i]->clear_children();
// interior quad
- new_quads[i]->set_boundary_indicator (types::internal_face_boundary_id);
+ new_quads[i]->set_boundary_indicator (numbers::internal_face_boundary_id);
// set all line orientation
// flags to true by default,
// change this afterwards, if
{
if (dim == 1)
vertex_to_boundary_id_map_1d
- = new std::map<unsigned int, types::boundary_id_t>();
+ = new std::map<unsigned int, types::boundary_id>();
// connect the any_change signal to the other signals
signals.create.connect (signals.any_change);
template <int dim, int spacedim>
void
-Triangulation<dim, spacedim>::set_boundary (const types::boundary_id_t number,
+Triangulation<dim, spacedim>::set_boundary (const types::boundary_id number,
const Boundary<dim, spacedim>& boundary_object)
{
- Assert(number < types::internal_face_boundary_id, ExcIndexRange(number,0,types::internal_face_boundary_id));
+ Assert(number < numbers::internal_face_boundary_id, ExcIndexRange(number,0,numbers::internal_face_boundary_id));
boundary[number] = &boundary_object;
}
template <int dim, int spacedim>
void
-Triangulation<dim, spacedim>::set_boundary (const types::boundary_id_t number)
+Triangulation<dim, spacedim>::set_boundary (const types::boundary_id number)
{
- Assert(number < types::internal_face_boundary_id, ExcIndexRange(number,0,types::internal_face_boundary_id));
+ Assert(number < numbers::internal_face_boundary_id, ExcIndexRange(number,0,numbers::internal_face_boundary_id));
//delete the entry located at number.
boundary.erase(number);
template <int dim, int spacedim>
const Boundary<dim, spacedim> &
-Triangulation<dim, spacedim>::get_boundary (const types::boundary_id_t number) const
+Triangulation<dim, spacedim>::get_boundary (const types::boundary_id number) const
{
- Assert(number<types::internal_face_boundary_id, ExcIndexRange(number,0,types::internal_face_boundary_id));
+ Assert(number<numbers::internal_face_boundary_id, ExcIndexRange(number,0,numbers::internal_face_boundary_id));
//look, if there is a boundary stored at
//boundary_id number.
- typename std::map<types::boundary_id_t, SmartPointer<const Boundary<dim, spacedim>, Triangulation<dim, spacedim> > >::const_iterator it
+ typename std::map<types::boundary_id, SmartPointer<const Boundary<dim, spacedim>, Triangulation<dim, spacedim> > >::const_iterator it
= boundary.find(number);
if(it != boundary.end())
template <int dim, int spacedim>
-std::vector<types::boundary_id_t>
+std::vector<types::boundary_id>
Triangulation<dim, spacedim>::get_boundary_indicators () const
{
// in 1d, we store a map of all used
// purposes
if (dim == 1)
{
- std::vector<types::boundary_id_t> boundary_indicators;
- for (std::map<unsigned int, types::boundary_id_t>::const_iterator
+ std::vector<types::boundary_id> boundary_indicators;
+ for (std::map<unsigned int, types::boundary_id>::const_iterator
p = vertex_to_boundary_id_map_1d->begin();
p != vertex_to_boundary_id_map_1d->end();
++p)
{
//TODO: if boundary_id_t is a real integer type, this might become
//a humongously large array...
- std::vector<bool> bi_exists(types::internal_face_boundary_id, false);
+ std::vector<bool> bi_exists(numbers::internal_face_boundary_id, false);
active_cell_iterator cell=begin_active();
for (; cell!=end(); ++cell)
for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
const unsigned int n_bi=
std::count(bi_exists.begin(), bi_exists.end(), true);
- std::vector<types::boundary_id_t> boundary_indicators(n_bi);
+ std::vector<types::boundary_id> boundary_indicators(n_bi);
unsigned int bi_counter=0;
for (unsigned int i=0; i<bi_exists.size(); ++i)
if (bi_exists[i]==true)
faces = new internal::Triangulation::TriaFaces<dim>(*old_tria.faces);
- typename std::map<types::boundary_id_t, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > >::const_iterator
+ typename std::map<types::boundary_id, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > >::const_iterator
bdry_iterator = old_tria.boundary.begin();
for (; bdry_iterator != old_tria.boundary.end() ; bdry_iterator++)
boundary[bdry_iterator->first] = bdry_iterator->second;
{
delete vertex_to_boundary_id_map_1d;
vertex_to_boundary_id_map_1d
- = (new std::map<unsigned int, types::boundary_id_t>
+ = (new std::map<unsigned int, types::boundary_id>
(*old_tria.vertex_to_boundary_id_map_1d));
}
// vertices used on level 0
unsigned int max_vertex_index = 0;
for (; cell!=endc; ++cell)
- for (unsigned vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
+ for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
if (cell->vertex_index(vertex) > max_vertex_index)
max_vertex_index = cell->vertex_index(vertex);
// every time we find an adjacent
// element
for (cell=begin(); cell!=endc; ++cell)
- for (unsigned vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
+ for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_cell; ++vertex)
++usage_count[cell->vertex_index(vertex)];
return std::max (GeometryInfo<dim>::vertices_per_cell,
template <int dim, int spacedim>
-types::subdomain_id_t
+types::subdomain_id
Triangulation<dim,spacedim>::locally_owned_subdomain () const
{
return types::invalid_subdomain_id;
// explicit instantiations
#include "tria.inst"
-// this is a hack: we need to instantiate this one function because
-// TriaAccessor<1,1,3> uses it. We could instead instantiate
-// Triangulation<1,3>, but that requires a lot more specializations of
-// functions that currently only exist for <1,1> and <1,2>
-// template
-// const Boundary<1,3> &
-// Triangulation<1,3>::get_boundary (const types::boundary_id_t number) const;
-
DEAL_II_NAMESPACE_CLOSE
template <int dim, int spacedim>
-types::material_id_t CellAccessor<dim, spacedim>::material_id () const
+types::material_id CellAccessor<dim, spacedim>::material_id () const
{
Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
return this->tria->levels[this->present_level]->cells.boundary_or_material_id[this->present_index].material_id;
template <int dim, int spacedim>
-void CellAccessor<dim, spacedim>::set_material_id (const types::material_id_t mat_id) const
+void CellAccessor<dim, spacedim>::set_material_id (const types::material_id mat_id) const
{
Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
- Assert ( mat_id < types::invalid_material_id, ExcIndexRange(mat_id,0,types::invalid_material_id));
+ Assert ( mat_id < numbers::invalid_material_id, ExcIndexRange(mat_id,0,numbers::invalid_material_id));
this->tria->levels[this->present_level]->cells.boundary_or_material_id[this->present_index].material_id = mat_id;
}
template <int dim, int spacedim>
-void CellAccessor<dim, spacedim>::recursively_set_material_id (const types::material_id_t mat_id) const
+void CellAccessor<dim, spacedim>::recursively_set_material_id (const types::material_id mat_id) const
{
set_material_id (mat_id);
template <int dim, int spacedim>
-types::subdomain_id_t CellAccessor<dim, spacedim>::subdomain_id () const
+types::subdomain_id CellAccessor<dim, spacedim>::subdomain_id () const
{
Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
return this->tria->levels[this->present_level]->subdomain_ids[this->present_index];
template <int dim, int spacedim>
void
-CellAccessor<dim, spacedim>::set_subdomain_id (const types::subdomain_id_t new_subdomain_id) const
+CellAccessor<dim, spacedim>::set_subdomain_id (const types::subdomain_id new_subdomain_id) const
{
Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
this->tria->levels[this->present_level]->subdomain_ids[this->present_index]
template <int dim, int spacedim>
void
CellAccessor<dim, spacedim>::
-recursively_set_subdomain_id (const types::subdomain_id_t new_subdomain_id) const
+recursively_set_subdomain_id (const types::subdomain_id new_subdomain_id) const
{
set_subdomain_id (new_subdomain_id);
//Take care for periodic conditions,
//For instance phi0= 0, phi1= 3/2*Pi middle has to be 7/4*Pi not 3/4*Pi
//This also works for -Pi/2 + Pi, middle is 5/4*Pi
- for(unsigned i=0; i<2;i++)
+ for(unsigned int i=0; i<2;i++)
if(std::abs(p0(i)-p1(i))> numbers::PI)
middle(i)=2*numbers::PI;
//Just get the average
Point<2> p[4];
- for(unsigned i=0;i<4;i++)
+ for(unsigned int i=0;i<4;i++)
p[i]=get_surf_coord(quad->vertex(i));
Point<2> middle(0,0);
//Take care for periodic conditions, see get_new_point_on_line() above
//For instance phi0= 0, phi1= 3/2*Pi middle has to be 7/4*Pi not 3/4*Pi
//This also works for -Pi/2 + Pi + Pi- Pi/2, middle is 5/4*Pi
- for(unsigned i=0;i<2;i++)
- for(unsigned j=1;j<4;j++){
- if(std::abs(p[0](i)-p[j](i))> numbers::PI){
- middle(i)+=2*numbers::PI;
+ for(unsigned int i=0;i<2;i++)
+ for(unsigned int j=1;j<4;j++)
+ {
+ if(std::abs(p[0](i)-p[j](i))> numbers::PI)
+ {
+ middle(i)+=2*numbers::PI;
+ }
}
- }
- for(unsigned i=0;i<4;i++)
+ for(unsigned int i=0;i<4;i++)
middle+=p[i];
middle*= 0.25;
std::vector< Point< 3 > > & points) const
{
//Almost the same implementation as StraightBoundary<2,3>
- unsigned npoints=points.size();
+ unsigned int npoints=points.size();
if(npoints==0) return;
Point<2> p[2];
- for(unsigned i=0;i<2;i++)
+ for(unsigned int i=0;i<2;i++)
p[i]=get_surf_coord(line->vertex(i));
- unsigned offset[2];
+ unsigned int offset[2];
offset[0]=0;
offset[1]=0;
//see get_new_point_on_line() above
//Because we dont have a symmetric interpolation (just the middle) we need to
//add 2*Pi to each almost zero and negative angles.
- for(unsigned i=0;i<2;i++)
- for(unsigned j=1;j<2;j++){
- if(std::abs(p[0](i)-p[j](i))> numbers::PI){
- offset[i]++;
- break;
+ for(unsigned int i=0;i<2;i++)
+ for(unsigned int j=1;j<2;j++)
+ {
+ if(std::abs(p[0](i)-p[j](i))> numbers::PI)
+ {
+ offset[i]++;
+ break;
+ }
}
- }
- for(unsigned i=0;i<2;i++)
- for(unsigned j=0;j<2;j++)
+ for(unsigned int i=0;i<2;i++)
+ for(unsigned int j=0;j<2;j++)
if(p[j](i)<1.E-12 ) //Take care for periodic conditions & negative angles
p[j](i)+=2*numbers::PI*offset[i];
double dx=1.0/(npoints+1);
double x=dx;
Point<2> target;
- for(unsigned i=0; i<npoints;i++,x+=dx){
- target= (1-x)*p[0] + x*p[1];
- points[i]=get_real_coord(target);
- }
+ for(unsigned int i=0; i<npoints;i++,x+=dx)
+ {
+ target= (1-x)*p[0] + x*p[1];
+ points[i]=get_real_coord(target);
+ }
}
Point<2> p[4];
- for(unsigned i=0;i<4;i++)
+ for(unsigned int i=0;i<4;i++)
p[i]=get_surf_coord(quad->vertex(i));
Point<2> target;
- unsigned offset[2];
+ unsigned int offset[2];
offset[0]=0;
offset[1]=0;
//see get_new_point_on_line() above
//Because we dont have a symmetric interpolation (just the middle) we need to
//add 2*Pi to each almost zero and negative angles.
- for(unsigned i=0;i<2;i++)
- for(unsigned j=1;j<4;j++){
- if(std::abs(p[0](i)-p[j](i))> numbers::PI){
- offset[i]++;
- break;
+ for(unsigned int i=0;i<2;i++)
+ for(unsigned int j=1;j<4;j++)
+ {
+ if(std::abs(p[0](i)-p[j](i))> numbers::PI)
+ {
+ offset[i]++;
+ break;
+ }
}
- }
- for(unsigned i=0;i<2;i++)
- for(unsigned j=0;j<4;j++)
+ for(unsigned int i=0;i<2;i++)
+ for(unsigned int j=0;j<4;j++)
if(p[j](i)<1.E-12 ) //Take care for periodic conditions & negative angles
p[j](i)+=2*numbers::PI*offset[i];
- for (unsigned i=0; i<m; ++i, y+=ds)
+ for (unsigned int i=0; i<m; ++i, y+=ds)
{
double x=ds;
- for (unsigned j=0; j<m; ++j, x+=ds){
- target=((1-x) * p[0] +
- x * p[1]) * (1-y) +
- ((1-x) * p[2] +
- x * p[3]) * y;
-
- points[i*m+j]=get_real_coord(target);
- }
+ for (unsigned int j=0; j<m; ++j, x+=ds)
+ {
+ target=((1-x) * p[0] +
+ x * p[1]) * (1-y) +
+ ((1-x) * p[2] +
+ x * p[3]) * y;
+
+ points[i*m+j]=get_real_coord(target);
+ }
}
}
get_normals_at_vertices (const Triangulation<2,3 >::face_iterator &face,
Boundary<2,3>::FaceVertexNormals &face_vertex_normals) const
{
- for(unsigned i=0; i<GeometryInfo<2>::vertices_per_face; i++)
+ for(unsigned int i=0; i<GeometryInfo<2>::vertices_per_face; i++)
face_vertex_normals[i]=get_surf_norm(face->vertex(i));
}
// finite element is used for it
for (unsigned int level=0; level<dof_handler.tria->n_levels(); ++level)
{
- dof_handler.levels[level]->lines.dof_offsets
+ dof_handler.levels[level]->dof_object.dof_offsets
= std::vector<unsigned int> (dof_handler.tria->n_raw_lines(level),
DoFHandler<dim,spacedim>::invalid_dof_index);
cell!=dof_handler.end_active(level); ++cell)
if (!cell->has_children())
{
- dof_handler.levels[level]->lines.dof_offsets[cell->index()] = next_free_dof;
+ dof_handler.levels[level]->dof_object.dof_offsets[cell->index()] = next_free_dof;
next_free_dof += cell->get_fe().dofs_per_line;
}
- dof_handler.levels[level]->lines.dofs
+ dof_handler.levels[level]->dof_object.dofs
= std::vector<unsigned int> (next_free_dof,
DoFHandler<dim,spacedim>::invalid_dof_index);
}
if (!cell->has_children())
counter += cell->get_fe().dofs_per_line;
- Assert (dof_handler.levels[level]->lines.dofs.size() == counter,
+ Assert (dof_handler.levels[level]->dof_object.dofs.size() == counter,
ExcInternalError());
Assert (static_cast<unsigned int>
- (std::count (dof_handler.levels[level]->lines.dof_offsets.begin(),
- dof_handler.levels[level]->lines.dof_offsets.end(),
+ (std::count (dof_handler.levels[level]->dof_object.dof_offsets.begin(),
+ dof_handler.levels[level]->dof_object.dof_offsets.end(),
DoFHandler<dim,spacedim>::invalid_dof_index))
==
dof_handler.tria->n_raw_lines(level) - dof_handler.tria->n_active_lines(level),
// finite element is used for it
for (unsigned int level=0; level<dof_handler.tria->n_levels(); ++level)
{
- dof_handler.levels[level]->quads.dof_offsets
+ dof_handler.levels[level]->dof_object.dof_offsets
= std::vector<unsigned int> (dof_handler.tria->n_raw_quads(level),
DoFHandler<dim,spacedim>::invalid_dof_index);
cell!=dof_handler.end_active(level); ++cell)
if (!cell->has_children())
{
- dof_handler.levels[level]->quads.dof_offsets[cell->index()] = next_free_dof;
+ dof_handler.levels[level]->dof_object.dof_offsets[cell->index()] = next_free_dof;
next_free_dof += cell->get_fe().dofs_per_quad;
}
- dof_handler.levels[level]->quads.dofs
+ dof_handler.levels[level]->dof_object.dofs
= std::vector<unsigned int> (next_free_dof,
DoFHandler<dim,spacedim>::invalid_dof_index);
}
if (!cell->has_children())
counter += cell->get_fe().dofs_per_quad;
- Assert (dof_handler.levels[level]->quads.dofs.size() == counter,
+ Assert (dof_handler.levels[level]->dof_object.dofs.size() == counter,
ExcInternalError());
Assert (static_cast<unsigned int>
- (std::count (dof_handler.levels[level]->quads.dof_offsets.begin(),
- dof_handler.levels[level]->quads.dof_offsets.end(),
+ (std::count (dof_handler.levels[level]->dof_object.dof_offsets.begin(),
+ dof_handler.levels[level]->dof_object.dof_offsets.end(),
DoFHandler<dim,spacedim>::invalid_dof_index))
==
dof_handler.tria->n_raw_quads(level) - dof_handler.tria->n_active_quads(level),
// finite element is used for it
for (unsigned int level=0; level<dof_handler.tria->n_levels(); ++level)
{
- dof_handler.levels[level]->hexes.dof_offsets
+ dof_handler.levels[level]->dof_object.dof_offsets
= std::vector<unsigned int> (dof_handler.tria->n_raw_hexs(level),
DoFHandler<dim,spacedim>::invalid_dof_index);
cell!=dof_handler.end_active(level); ++cell)
if (!cell->has_children())
{
- dof_handler.levels[level]->hexes.dof_offsets[cell->index()] = next_free_dof;
+ dof_handler.levels[level]->dof_object.dof_offsets[cell->index()] = next_free_dof;
next_free_dof += cell->get_fe().dofs_per_hex;
}
- dof_handler.levels[level]->hexes.dofs
+ dof_handler.levels[level]->dof_object.dofs
= std::vector<unsigned int> (next_free_dof,
DoFHandler<dim,spacedim>::invalid_dof_index);
}
if (!cell->has_children())
counter += cell->get_fe().dofs_per_hex;
- Assert (dof_handler.levels[level]->hexes.dofs.size() == counter,
+ Assert (dof_handler.levels[level]->dof_object.dofs.size() == counter,
ExcInternalError());
Assert (static_cast<unsigned int>
- (std::count (dof_handler.levels[level]->hexes.dof_offsets.begin(),
- dof_handler.levels[level]->hexes.dof_offsets.end(),
+ (std::count (dof_handler.levels[level]->dof_object.dof_offsets.begin(),
+ dof_handler.levels[level]->dof_object.dof_offsets.end(),
DoFHandler<dim,spacedim>::invalid_dof_index))
==
dof_handler.tria->n_raw_hexs(level) - dof_handler.tria->n_active_hexs(level),
template <>
- unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const
+ unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const
{
Assert (finite_elements != 0, ExcNoFESelected());
// check that only boundary
// indicators 0 and 1 are allowed
// in 1d
- for (std::set<types::boundary_id_t>::const_iterator i=boundary_indicators.begin();
+ for (std::set<types::boundary_id>::const_iterator i=boundary_indicators.begin();
i!=boundary_indicators.end(); ++i)
Assert ((*i == 0) || (*i == 1),
ExcInvalidBoundaryIndicator());
}
template <>
- unsigned int DoFHandler<1,2>::n_boundary_dofs (const std::set<types::boundary_id_t> &) const
+ unsigned int DoFHandler<1,2>::n_boundary_dofs (const std::set<types::boundary_id> &) const
{
Assert(false,ExcNotImplemented());
return 0;
}
template <>
- unsigned int DoFHandler<1,3>::n_boundary_dofs (const std::set<types::boundary_id_t> &) const
+ unsigned int DoFHandler<1,3>::n_boundary_dofs (const std::set<types::boundary_id> &) const
{
Assert(false,ExcNotImplemented());
return 0;
DoFHandler<dim,spacedim>::n_boundary_dofs (const FunctionMap &boundary_indicators) const
{
Assert (finite_elements != 0, ExcNoFESelected());
- Assert (boundary_indicators.find(types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find(numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
// same as above, but with
template<int dim, int spacedim>
unsigned int
- DoFHandler<dim,spacedim>::n_boundary_dofs (const std::set<types::boundary_id_t> &boundary_indicators) const
+ DoFHandler<dim,spacedim>::n_boundary_dofs (const std::set<types::boundary_id> &boundary_indicators) const
{
Assert (finite_elements != 0, ExcNoFESelected());
- Assert (boundary_indicators.find (types::internal_face_boundary_id) == boundary_indicators.end(),
+ Assert (boundary_indicators.find (numbers::internal_face_boundary_id) == boundary_indicators.end(),
ExcInvalidBoundaryIndicator());
// same as above, but with
template <>
- unsigned int DoFHandler<2,3>::n_boundary_dofs (const std::set<types::boundary_id_t> &) const
+ unsigned int DoFHandler<2,3>::n_boundary_dofs (const std::set<types::boundary_id> &) const
{
Assert(false,ExcNotImplemented());
return 0;
DoFLevel<1>::memory_consumption () const
{
return (DoFLevel<0>::memory_consumption() +
- MemoryConsumption::memory_consumption (lines));
+ MemoryConsumption::memory_consumption (dof_object));
}
DoFLevel<2>::memory_consumption () const
{
return (DoFLevel<0>::memory_consumption () +
- MemoryConsumption::memory_consumption (quads));
+ MemoryConsumption::memory_consumption (dof_object));
}
DoFLevel<3>::memory_consumption () const
{
return (DoFLevel<0>::memory_consumption () +
- MemoryConsumption::memory_consumption (hexes));
+ MemoryConsumption::memory_consumption (dof_object));
}
&check_zero_weight),
line->entries.end());
+
+
+#ifdef DEBUG
+ // In debug mode we are computing an estimate for the maximum number
+ // of constraints so that we can bail out if there is a cycle in the
+ // constraints (which is easier than searching for cycles in the graph).
+ //
+ // Let us figure out the largest dof index. This is an upper bound for the
+ // number of constraints because it is an approximation for the number of dofs
+ // in our system.
+ unsigned int largest_idx = 0;
+ for (std::vector<ConstraintLine>::iterator line = lines.begin();
+ line!=lines.end(); ++line)
+ {
+ for (ConstraintLine::Entries::iterator it = line->entries.begin();it!=line->entries.end();++it)
+ {
+ largest_idx=std::max(largest_idx, it->first);
+ }
+ }
+#endif
+
// replace references to dofs that
// are themselves constrained. note
// that because we may replace
for (std::vector<ConstraintLine>::iterator line = lines.begin();
line!=lines.end(); ++line)
{
+#ifdef DEBUG
+ // we need to keep track of how many replacements we do in this line, because we can
+ // end up in a cycle A->B->C->A without the number of entries growing.
+ unsigned int n_replacements = 0;
+#endif
+
+
+
// loop over all entries of
// this line (including
// ones that we have
.push_back (std::make_pair (constrained_line->entries[i].first,
constrained_line->entries[i].second *
weight));
+
+#ifdef DEBUG
+ // keep track of how many entries we replace in this line. If we do more than
+ // there are constraints or dofs in our system, we must have a cycle.
+ ++n_replacements;
+ Assert(n_replacements/2<largest_idx, ExcMessage("Cycle in constraints detected!"));
+ if (n_replacements/2>=largest_idx)
+ return; // this enables us to test for this Exception.
+#endif
}
else
// the DoF that we
// constraints, so we need to explicitly
// state, that the others are doing an
// insert here:
- vec.compress (Insert);
+ vec.compress (::dealii::VectorOperation::insert);
}
it->entries[i].second);
vec(it->line) = new_value;
}
- vec.block(block).compress(Insert);
+ vec.block(block).compress(::dealii::VectorOperation::insert);
}
}
//---------------------------------------------------------------------------
-// $Id: vectors.inst.in 19046 2009-07-08 19:30:23Z bangerth $
+// $Id$
// Version: $Name$
//
// Copyright (C) 2010 by the deal.II authors
// get a representation of the present
// row
-#if DEAL_II_PETSC_VERSION_LT(2,2,1)
- int ncols;
- int *colnums;
- PetscScalar *values;
-#else
PetscInt ncols;
const PetscInt *colnums;
const PetscScalar *values;
-#endif
int ierr;
ierr = MatGetRow(*matrix, this->a_row, &ncols, &colnums, &values);
// now set all the entries of this row to
// zero
-#if DEAL_II_PETSC_VERSION_LT(2,2,1)
- const int petsc_row = row;
-#else
const PetscInt petsc_row = row;
-#endif
IS index_set;
#if DEAL_II_PETSC_VERSION_LT(3,2,0)
ISCreateGeneral (get_mpi_communicator(), 1, &petsc_row, PETSC_COPY_VALUES, &index_set);
#endif
-
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr
- = MatZeroRows(matrix, index_set, &new_diag_value);
-#else
#if DEAL_II_PETSC_VERSION_LT(3,2,0)
const int ierr
= MatZeroRowsIS(matrix, index_set, new_diag_value);
const int ierr
= MatZeroRowsIS(matrix, index_set, new_diag_value, PETSC_NULL, PETSC_NULL);
#endif
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
#if DEAL_II_PETSC_VERSION_LT(3,2,0)
// now set all the entries of these rows
// to zero
-#if DEAL_II_PETSC_VERSION_LT(2,2,1)
- const std::vector<int> petsc_rows (rows.begin(), rows.end());
-#else
const std::vector<PetscInt> petsc_rows (rows.begin(), rows.end());
-#endif
// call the functions. note that we have
// to call them even if #rows is empty,
&petsc_rows[0], PETSC_COPY_VALUES, &index_set);
#endif
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr
- = MatZeroRows(matrix, index_set, &new_diag_value);
-#else
#if DEAL_II_PETSC_VERSION_LT(3,2,0)
const int ierr
= MatZeroRowsIS(matrix, index_set, new_diag_value);
const int ierr
= MatZeroRowsIS(matrix, index_set, new_diag_value, PETSC_NULL, PETSC_NULL);
#endif
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
#if DEAL_II_PETSC_VERSION_LT(3,2,0)
void
- MatrixBase::compress ()
+ MatrixBase::compress (::dealii::VectorOperation::values operation)
{
// flush buffers
int ierr;
// get a representation of the present
// row
-#if DEAL_II_PETSC_VERSION_LT(2,2,1)
- int ncols;
- int *colnums;
- PetscScalar *values;
-#else
PetscInt ncols;
const PetscInt *colnums;
const PetscScalar *values;
-#endif
//TODO: this is probably horribly inefficient; we should lobby for a way to
//query this information from PETSc
}
+ PetscScalar
+ MatrixBase::matrix_norm_square (const VectorBase &v) const
+ {
+ Vector tmp(v.size());
+ vmult (tmp, v);
+ return tmp*v;
+ }
+
+
+ PetscScalar
+ MatrixBase::matrix_scalar_product (const VectorBase &u,
+ const VectorBase &v) const
+ {
+ Vector tmp(v.size());
+ vmult (tmp, v);
+ return u*tmp;
+ }
+
#if DEAL_II_PETSC_VERSION_GTE(3,1,0)
PetscReal
MatrixBase &
MatrixBase::operator *= (const PetscScalar a)
{
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = MatScale (&a, matrix);
-#else
const int ierr = MatScale (matrix, a);
-#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
return *this;
MatrixBase::operator /= (const PetscScalar a)
{
const PetscScalar factor = 1./a;
-
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = MatScale (&factor, matrix);
-#else
const int ierr = MatScale (matrix, factor);
-#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
void
MatrixBase::transpose ()
{
- int ierr;
-
-#if DEAL_II_PETSC_VERSION_LT(3,0,0)
- ierr = MatTranspose(matrix, PETSC_NULL);
-#else
- ierr = MatTranspose(matrix, MAT_REUSE_MATRIX, &matrix);
-#endif
-
+ int ierr = MatTranspose(matrix, MAT_REUSE_MATRIX, &matrix);
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
// First flush PETSc caches
compress ();
-
-#if DEAL_II_PETSC_VERSION_LT(3,0,0)
- // avoid warning about unused variables
- (void) tolerance;
-
- MatIsHermitian (matrix, &truth);
-#else
MatIsHermitian (matrix, tolerance, &truth);
-#endif
+
return truth;
}
compress ();
// Set options
-#if DEAL_II_PETSC_VERSION_LT(3,0,0)
- PetscViewerSetFormat (PETSC_VIEWER_STDOUT_WORLD,
- PETSC_VIEWER_ASCII_DEFAULT);
-#else
PetscViewerSetFormat (PETSC_VIEWER_STDOUT_WORLD,
PETSC_VIEWER_DEFAULT);
-#endif
+
// Write to screen
MatView (matrix,PETSC_VIEWER_STDOUT_WORLD);
}
{}
-
BlockSparseMatrix::~BlockSparseMatrix ()
{}
-
BlockSparseMatrix &
BlockSparseMatrix::operator = (const BlockSparseMatrix &m)
{
AssertThrow (ierr == 0, ExcPETScError(ierr));
// then set flags
-#if DEAL_II_PETSC_VERSION_LT(2,3,1)
- PCICCSetLevels (pc, additional_data.levels);
-#else
PCFactorSetLevels (pc, additional_data.levels);
-#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
ierr = PCSetFromOptions (pc);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// then set flags
-#if DEAL_II_PETSC_VERSION_LT(2,3,1)
- PCILUSetLevels (pc, additional_data.levels);
-#else
PCFactorSetLevels (pc, additional_data.levels);
-#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
ierr = PCSetFromOptions (pc);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// set flags as given
-#if DEAL_II_PETSC_VERSION_LT(2,3,1)
- ierr = PCLUSetPivoting (pc, additional_data.pivoting);
-#elif DEAL_II_PETSC_VERSION_LT(3,0,1)
+#if DEAL_II_PETSC_VERSION_LT(3,0,1)
ierr = PCFactorSetPivoting (pc, additional_data.pivoting);
#else
ierr = PCFactorSetColumnPivot (pc, additional_data.pivoting);
#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- ierr = PCLUSetZeroPivot (pc, additional_data.zero_pivot);
-#else
ierr = PCFactorSetZeroPivot (pc, additional_data.zero_pivot);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- ierr = PCLUSetDamping (pc, additional_data.damping);
-#elif DEAL_II_PETSC_VERSION_LT(3,0,1)
+#if DEAL_II_PETSC_VERSION_LT(3,0,1)
ierr = PCFactorSetShiftNonzero (pc, additional_data.damping);
#else
ierr = PCFactorSetShiftAmount (pc, additional_data.damping);
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
-
}
DEAL_II_NAMESPACE_CLOSE
//
//---------------------------------------------------------------------------
-
+#include <deal.II/base/logstream.h>
#include <deal.II/lac/petsc_solver.h>
#ifdef DEAL_II_USE_PETSC
# include <deal.II/lac/petsc_precondition.h>
# include <cmath>
-#if DEAL_II_PETSC_VERSION_LT(2,2,0)
-#include <petscsles.h>
-#endif
#include <petscversion.h>
DEAL_II_NAMESPACE_OPEN
#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
-
- // and destroy the solver object if we
- // are in old PETSc mode
-#if DEAL_II_PETSC_VERSION_LT(2,2,0)
- ierr = SLESDestroy (sles);
- AssertThrow (ierr == 0, ExcPETScError(ierr));
-#endif
}
// checks with the solver_control
// object we have in this object for
// convergence
-#if DEAL_II_PETSC_VERSION_LT(3,0,0)
- KSPSetConvergenceTest (solver_data->ksp, &convergence_test,
- reinterpret_cast<void *>(&solver_control));
-#else
KSPSetConvergenceTest (solver_data->ksp, &convergence_test,
reinterpret_cast<void *>(&solver_control),
PETSC_NULL);
-#endif
-
}
// set the command line option prefix name
void
SolverRichardson::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPRICHARDSON));
+ ierr = KSPSetType (ksp, KSPRICHARDSON);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// set the damping factor from the data
void
SolverChebychev::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
+ // set the type of solver. note the
+ // completely pointless change in
+ // spelling Chebyshev between PETSc 3.2
+ // and 3.3...
int ierr;
#if DEAL_II_PETSC_VERSION_LT(3,3,0)
- ierr = KSPSetType (ksp, const_cast<char *>(KSPCHEBYCHEV));
+ ierr = KSPSetType (ksp, KSPCHEBYCHEV);
#else
- ierr = KSPSetType (ksp, const_cast<char *>(KSPCHEBYSHEV));
+ ierr = KSPSetType (ksp, KSPCHEBYSHEV);
#endif
AssertThrow (ierr == 0, ExcPETScError(ierr));
void
SolverCG::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPCG));
+ ierr = KSPSetType (ksp, KSPCG);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverBiCG::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPBICG));
+ ierr = KSPSetType (ksp, KSPBICG);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverGMRES::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPGMRES));
+ ierr = KSPSetType (ksp, KSPGMRES);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// set the restart parameter from the
void
SolverBicgstab::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPBCGS));
+ ierr = KSPSetType (ksp, KSPBCGS);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverCGS::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPCGS));
+ ierr = KSPSetType (ksp, KSPCGS);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverTFQMR::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPTFQMR));
+ ierr = KSPSetType (ksp, KSPTFQMR);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverTCQMR::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPTCQMR));
+ ierr = KSPSetType (ksp, KSPTCQMR);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverCR::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPCR));
+ ierr = KSPSetType (ksp, KSPCR);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverLSQR::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPLSQR));
+ ierr = KSPSetType (ksp, KSPLSQR);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// in the deal.II solvers, we always
void
SolverPreOnly::set_solver_type (KSP &ksp) const
{
- // set the type of solver. work around a
- // problem in PETSc 2.1.6, where it asks
- // for a char*, even though KSPXXXX is of
- // type const char*
int ierr;
- ierr = KSPSetType (ksp, const_cast<char *>(KSPPREONLY));
+ ierr = KSPSetType (ksp, KSPPREONLY);
AssertThrow (ierr == 0, ExcPETScError(ierr));
// The KSPPREONLY solver of
KSPSetInitialGuessNonzero (ksp, PETSC_FALSE);
}
+
+/* ---------------------- SparseDirectMUMPS------------------------ */
+
+ SparseDirectMUMPS::SparseDirectMUMPS (SolverControl &cn,
+ const MPI_Comm &mpi_communicator,
+ const AdditionalData &data)
+ :
+ SolverBase (cn, mpi_communicator),
+ additional_data (data)
+ {}
+
+
+ void
+ SparseDirectMUMPS::set_solver_type (KSP &ksp) const
+ {
+ /**
+ * KSPPREONLY implements a stub
+ * method that applies only the
+ * preconditioner. Its use is due
+ * to SparseDirectMUMPS being
+ * a direct (rather than iterative)
+ * solver
+ */
+ int ierr;
+ ierr = KSPSetType (ksp, KSPPREONLY);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * The KSPPREONLY solver of
+ * PETSc never calls the convergence
+ * monitor, which leads to failure
+ * even when everything was ok.
+ * Therefore, the SolverControl
+ * status is set to some nice
+ * values, which guarantee a nice
+ * result at the end of the solution
+ * process.
+ */
+ solver_control.check (1, 0.0);
+
+ /**
+ * Using a PREONLY solver with a
+ * nonzero initial guess leads PETSc
+ * to produce some error messages.
+ */
+ KSPSetInitialGuessNonzero (ksp, PETSC_FALSE);
+ }
+
+ void
+ SparseDirectMUMPS::solve (const MatrixBase &A,
+ VectorBase &x,
+ const VectorBase &b)
+ {
+#ifdef PETSC_HAVE_MUMPS
+ /**
+ * had some trouble with the
+ * deallog printing to console
+ * the outcome of the solve function
+ * for every process. Brought
+ * down the depth level to zero
+ * to alleviate this
+ */
+ deallog.depth_console (0);
+ int ierr;
+
+ /**
+ * factorization matrix to be
+ * obtained from MUMPS
+ */
+ Mat F;
+
+ /**
+ * setting MUMPS integer control
+ * parameters ICNTL to be passed
+ * to MUMPS. Setting
+ * entry 7 of MUMPS ICNTL array
+ * (of size 40) to a value of 2.
+ * This sets use of Approximate
+ * Minimum Fill (AMF)
+ */
+ PetscInt ival=2, icntl=7;
+ /**
+ * number of iterations to
+ * solution (should be 1)
+ * for a direct solver
+ */
+ PetscInt its;
+ /**
+ * norm of residual
+ */
+ PetscReal rnorm;
+
+ /**
+ * creating a solver object
+ * if this is necessary
+ */
+ if (solver_data.get() == 0)
+ {
+ solver_data.reset (new SolverDataMUMPS ());
+
+ /**
+ * creates the default KSP
+ * context and puts it in
+ * the location solver_data->ksp
+ */
+ ierr = KSPCreate (mpi_communicator, &solver_data->ksp);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * set the matrices involved.
+ * the last argument is irrelevant
+ * here, since we use the solver
+ * only once anyway
+ */
+ ierr = KSPSetOperators (solver_data->ksp, A, A,
+ DIFFERENT_NONZERO_PATTERN);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * setting the solver type
+ */
+ set_solver_type (solver_data->ksp);
+
+ /**
+ * getting the associated
+ * preconditioner context
+ */
+ ierr = KSPGetPC (solver_data->ksp, & solver_data->pc);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * build PETSc PC for particular
+ * PCLU preconditioner
+ * (note: if the matrix is
+ * symmetric, then a cholesky
+ * decomposition PCCHOLESKY
+ * could be used)
+ */
+ ierr = PCSetType (solver_data->pc, PCLU);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * convergence monitor function
+ * that checks with the solver_control
+ * object for convergence
+ */
+ KSPSetConvergenceTest (solver_data->ksp, &convergence_test,
+ reinterpret_cast<void *>(&solver_control),
+ PETSC_NULL);
+
+ /**
+ * set the software that is to be
+ * used to perform the lu factorization
+ * here we start to see differences
+ * with the base class solve function
+ */
+ ierr = PCFactorSetMatSolverPackage (solver_data->pc, MATSOLVERMUMPS);
+ AssertThrow (ierr == 0, ExcPETScError (ierr));
+
+ /**
+ * set up the package to call
+ * for the factorization
+ */
+ ierr = PCFactorSetUpMatSolverPackage (solver_data->pc);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * get the factored matrix F from the
+ * preconditioner context. This routine
+ * is valid only for LU, ILU, Cholesky,
+ * and imcomplete Cholesky
+ */
+ ierr = PCFactorGetMatrix(solver_data->pc, &F);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * Passing the control parameters
+ * to MUMPS
+ */
+ ierr = MatMumpsSetIcntl (F, icntl, ival);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ }
+
+ /**
+ * solve the linear system
+ */
+ ierr = KSPSolve (solver_data->ksp, b, x);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * in case of failure
+ * throw exception
+ */
+ if (solver_control.last_check() != SolverControl::success)
+ throw SolverControl::NoConvergence (solver_control.last_step(),
+ solver_control.last_value());
+ else
+ {
+ PetscPrintf(PETSC_COMM_WORLD, "Success. MUMPS has solved.\n");
+
+ /**
+ * obtain convergence
+ * information. obtain
+ * the number of iterations
+ * and residual norm
+ */
+ ierr = KSPGetIterationNumber (solver_data->ksp, &its);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+ ierr = KSPGetResidualNorm (solver_data->ksp, &rnorm);
+ AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+ /**
+ * print the convergence
+ * information
+ */
+ PetscPrintf(PETSC_COMM_WORLD, "Norm of residual is %G in %D iteration(s)\n",
+ rnorm, its);
+ }
+
+#else // PETSC_HAVE_MUMPS
+ Assert (false,
+ ExcMessage ("Your PETSc installation does not include a copy of "
+ "MUMPS package necessary for this solver"));
+
+ // Cast to void to silence compiler
+ // warnings
+ (void) A; (void) x; (void) b;
+#endif
+
+ }
+
+ int SparseDirectMUMPS::convergence_test (KSP /*ksp*/,
+#ifdef PETSC_USE_64BIT_INDICES
+ const PetscInt iteration,
+#else
+ const int iteration,
+#endif
+ const PetscReal residual_norm,
+ KSPConvergedReason *reason,
+ void *solver_control_x)
+ {
+ SolverControl &solver_control = *reinterpret_cast<SolverControl*>(solver_control_x);
+
+ const SolverControl::State state
+ = solver_control.check (iteration, residual_norm);
+
+ switch (state)
+ {
+ case ::dealii::SolverControl::iterate:
+ *reason = KSP_CONVERGED_ITERATING;
+ break;
+
+ case ::dealii::SolverControl::success:
+ *reason = static_cast<KSPConvergedReason>(1);
+ break;
+
+ case ::dealii::SolverControl::failure:
+ if (solver_control.last_step() > solver_control.max_steps())
+ *reason = KSP_DIVERGED_ITS;
+ else
+ *reason = KSP_DIVERGED_DTOL;
+ break;
+
+ default:
+ Assert (false, ExcNotImplemented());
+ }
+
+ return 0;
+ }
+
}
DEAL_II_NAMESPACE_CLOSE
else
{
//ghost entry
- unsigned ghostidx
+ unsigned int ghostidx
= vector.ghost_indices.index_within_set(index);
Assert(ghostidx+end-begin<(unsigned int)lsize, ExcInternalError());
VectorBase::VectorBase ()
:
ghosted(false),
- last_action (LastAction::none),
+ last_action (::dealii::VectorOperation::unknown),
attained_ownership(true)
{}
Subscriptor (),
ghosted(v.ghosted),
ghost_indices(v.ghost_indices),
- last_action (LastAction::none),
+ last_action (::dealii::VectorOperation::unknown),
attained_ownership(true)
{
int ierr = VecDuplicate (v.vector, &vector);
Subscriptor (),
vector(v),
ghosted(false),
- last_action (LastAction::none),
+ last_action (::dealii::VectorOperation::unknown),
attained_ownership(false)
{}
// (see test bits/petsc_65)
compress ();
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecSet (&s, vector);
-#else
const int ierr = VecSet (vector, s);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
return *this;
void
- VectorBase::compress ()
+ VectorBase::compress (::dealii::VectorOperation::values operation)
{
- // note that one may think that we only need to do something
- // if in fact the state is anything but LastAction::none. but
- // that's not true: one frequently gets into situations where
- // only one processor (or a subset of processors) actually writes
- // something into a vector, but we still need to call
- // VecAssemblyBegin/End on all processors, even those that are
- // still in LastAction::none state
+ // note that one may think that
+ // we only need to do something
+ // if in fact the state is
+ // anything but
+ // last_action::unknown. but
+ // that's not true: one
+ // frequently gets into
+ // situations where only one
+ // processor (or a subset of
+ // processors) actually writes
+ // something into a vector, but
+ // we still need to call
+ // VecAssemblyBegin/End on all
+ // processors.
int ierr;
ierr = VecAssemblyBegin(vector);
AssertThrow (ierr == 0, ExcPETScError(ierr));
ierr = VecAssemblyEnd(vector);
AssertThrow (ierr == 0, ExcPETScError(ierr));
- // reset the last action field to indicate that we're back to
- // a pristine state
- last_action = VectorBase::LastAction::none;
+ // reset the last action field to
+ // indicate that we're back to a
+ // pristine state
+ last_action = ::dealii::VectorOperation::unknown;
}
Assert (numbers::is_finite(a), ExcNumberNotFinite());
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecScale (&a, vector);
-#else
const int ierr = VecScale (vector, a);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
return *this;
Assert (numbers::is_finite(a), ExcNumberNotFinite());
const PetscScalar factor = 1./a;
-
Assert (numbers::is_finite(factor), ExcNumberNotFinite());
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecScale (&factor, vector);
-#else
const int ierr = VecScale (vector, factor);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
return *this;
VectorBase &
VectorBase::operator += (const VectorBase &v)
{
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const PetscScalar one = 1.0;
- const int ierr = VecAXPY (&one, v, vector);
-#else
const int ierr = VecAXPY (vector, 1, v);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
return *this;
VectorBase &
VectorBase::operator -= (const VectorBase &v)
{
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const PetscScalar minus_one = -1.0;
- const int ierr = VecAXPY (&minus_one, v, vector);
-#else
const int ierr = VecAXPY (vector, -1, v);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
return *this;
void
VectorBase::add (const PetscScalar s)
{
-
Assert (numbers::is_finite(s), ExcNumberNotFinite());
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecShift (&s, vector);
-#else
const int ierr = VecShift (vector, s);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
VectorBase::add (const PetscScalar a,
const VectorBase &v)
{
-
Assert (numbers::is_finite(a), ExcNumberNotFinite());
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecAXPY (&a, v, vector);
-#else
const int ierr = VecAXPY (vector, a, v);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
const PetscScalar b,
const VectorBase &w)
{
-
Assert (numbers::is_finite(a), ExcNumberNotFinite());
Assert (numbers::is_finite(b), ExcNumberNotFinite());
const PetscScalar weights[2] = {a,b};
Vec addends[2] = {v.vector, w.vector};
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecMAXPY (2, weights, vector, addends);
-#else
const int ierr = VecMAXPY (vector, 2, weights, addends);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
VectorBase::sadd (const PetscScalar s,
const VectorBase &v)
{
-
Assert (numbers::is_finite(s), ExcNumberNotFinite());
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecAYPX (&s, v, vector);
-#else
const int ierr = VecAYPX (vector, s, v);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
const PetscScalar b,
const VectorBase &w)
{
-
Assert (numbers::is_finite(s), ExcNumberNotFinite());
Assert (numbers::is_finite(a), ExcNumberNotFinite());
Assert (numbers::is_finite(b), ExcNumberNotFinite());
const PetscScalar weights[2] = {a,b};
Vec addends[2] = {v.vector,w.vector};
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecMAXPY (2, weights, vector, addends);
-#else
const int ierr = VecMAXPY (vector, 2, weights, addends);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
const PetscScalar weights[3] = {a,b,c};
Vec addends[3] = {v.vector, w.vector, x.vector};
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecMAXPY (3, weights, vector, addends);
-#else
const int ierr = VecMAXPY (vector, 3, weights, addends);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
VectorBase::ratio (const VectorBase &a,
const VectorBase &b)
{
-#if DEAL_II_PETSC_VERSION_LT(2,3,0)
- const int ierr = VecPointwiseDivide (a, b, vector);
-#else
const int ierr = VecPointwiseDivide (vector, a, b);
-#endif
-
AssertThrow (ierr == 0, ExcPETScError(ierr));
}
std::size_t
VectorBase::memory_consumption () const
{
- std::size_t mem = sizeof(Vec)+sizeof(LastAction::Values)
+ std::size_t mem = sizeof(Vec)+sizeof(last_action)
+MemoryConsumption::memory_consumption(ghosted)
+MemoryConsumption::memory_consumption(ghost_indices);
const PetscScalar *values,
const bool add_values)
{
- Assert ((last_action == (add_values ?
- LastAction::add :
- LastAction::insert))
+ ::dealii::VectorOperation::values action = (add_values ?
+ ::dealii::VectorOperation::add :
+ ::dealii::VectorOperation::insert);
+ Assert ((last_action == action)
||
- (last_action == LastAction::none),
- internal::VectorReference::ExcWrongMode ((add_values ?
- LastAction::add :
- LastAction::insert),
+ (last_action == ::dealii::VectorOperation::unknown),
+ internal::VectorReference::ExcWrongMode (action,
last_action));
// VecSetValues complains if we
// set the mode here, independent of whether we have actually
// written elements or whether the list was empty
- last_action = (add_values ?
- VectorBase::LastAction::add :
- VectorBase::LastAction::insert);
+ last_action = action;
}
#endif
#ifdef DEAL_II_USE_METIS
-// This is sorta stupid. what we really would like to do here is this:
-// extern "C" {
-// # include <metis.h>
-// }
-// The problem with this is that (i) metis.h declares a couple of
-// functions with different exception specifications than are
-// declared in standard header files (in particular the drand48
-// function every one who's worked with Metis seems to know about);
-// and (ii) metis.h may include <mpi.h> which if we run a C++
-// compiler may include mpicxx.h -- but that leads to trouble
-// because we have wrapped an
-// extern "C" {...}
-// around the whole block that now also includes a C++ header :-(
-//
-// The correct solution, of course, would be if Metis would produce
-// a new dot release after 10 years that would remove the unnecessary
-// function prototypes, and that would wrap the contents into
-// #ifdef __C_PLUSPLUS__
-// extern "C" {
-// #endif
-// But that appears to not be happening, and so we have to do the
-// following hack where we just forward declare everything ourselves :-(
-
extern "C"
{
-// the following is from Metis-4.0/Lib/struct.h:
- typedef int idxtype;
-// and this is from proto.h
- void
- METIS_PartGraphKway(int *, idxtype *, idxtype *,
- idxtype *, idxtype *, int *,
- int *, int *, int *, int *, idxtype *);
- void
- METIS_PartGraphRecursive(int *, idxtype *, idxtype *,
- idxtype *, idxtype *, int *,
- int *, int *, int *, int *, idxtype *);
+#include <metis.h>
}
#endif
// simple, since METIS wants exactly our
// compressed row storage format. we only
// have to set up a few auxiliary arrays
- int
- n = static_cast<signed int>(sparsity_pattern.n_rows()),
- wgtflag = 0, // no weights on nodes or edges
- numflag = 0, // C-style 0-based numbering
+ idx_t
+ n = static_cast<signed int>(sparsity_pattern.n_rows()),
+ ncon = 1, // number of balancing constraints (should be >0)
+ wgtflag = 0, // no weights on nodes or edges
+ numflag = 0, // C-style 0-based numbering
nparts = static_cast<int>(n_partitions), // number of subdomains to create
- dummy; // the numbers of edges cut by the
- // resulting partition
+ dummy; // the numbers of edges cut by the
+ // resulting partition
// use default options for METIS
- int options[5] = { 0,0,0,0,0 };
+ idx_t options[METIS_NOPTIONS];
+ METIS_SetDefaultOptions (options);
// one more nuisance: we have to copy our
// own data to arrays that store signed
// integers :-(
- std::vector<idxtype> int_rowstart (sparsity_pattern.get_rowstart_indices(),
- sparsity_pattern.get_rowstart_indices() +
- sparsity_pattern.n_rows()+1);
- std::vector<idxtype> int_colnums (sparsity_pattern.get_column_numbers(),
- sparsity_pattern.get_column_numbers()+
- int_rowstart[sparsity_pattern.n_rows()]);
+ std::vector<idx_t> int_rowstart (sparsity_pattern.get_rowstart_indices(),
+ sparsity_pattern.get_rowstart_indices() +
+ sparsity_pattern.n_rows()+1);
+ std::vector<idx_t> int_colnums (sparsity_pattern.get_column_numbers(),
+ sparsity_pattern.get_column_numbers()+
+ int_rowstart[sparsity_pattern.n_rows()]);
+
+ std::vector<idx_t> int_partition_indices (sparsity_pattern.n_rows());
- std::vector<idxtype> int_partition_indices (sparsity_pattern.n_rows());
+ // Make use of METIS' error code.
+ int ierr;
// Select which type of partitioning to
// create
// Use recursive if the number of
// partitions is less than or equal to 8
if (n_partitions <= 8)
- METIS_PartGraphRecursive(&n, &int_rowstart[0], &int_colnums[0],
- NULL, NULL,
- &wgtflag, &numflag, &nparts, &options[0],
- &dummy, &int_partition_indices[0]);
+ ierr = METIS_PartGraphRecursive(&n, &ncon, &int_rowstart[0], &int_colnums[0],
+ NULL, NULL, NULL,
+ &nparts,NULL,NULL,&options[0],
+ &dummy,&int_partition_indices[0]);
- // Otherwise use kway
+ // Otherwise use kway
else
- METIS_PartGraphKway(&n, &int_rowstart[0], &int_colnums[0],
- NULL, NULL,
- &wgtflag, &numflag, &nparts, &options[0],
- &dummy, &int_partition_indices[0]);
+ ierr = METIS_PartGraphKway(&n, &ncon, &int_rowstart[0], &int_colnums[0],
+ NULL, NULL, NULL,
+ &nparts,NULL,NULL,&options[0],
+ &dummy,&int_partition_indices[0]);
+
+ // If metis returns normally, an
+ // error code METIS_OK=1 is
+ // returned from the above
+ // functions (see metish.h)
+ AssertThrow (ierr == 1, ExcMETISError (ierr));
// now copy back generated indices into the
// output array
MPI_Recv(&recv_buf[0], len, MPI_BYTE, status.MPI_SOURCE,
status.MPI_TAG, mpi_comm, &status);
- unsigned int *ptr=&recv_buf[0];
- unsigned int *end=&*(--recv_buf.end());
- while (ptr<end)
+ std::vector<unsigned int>::const_iterator ptr = recv_buf.begin();
+ std::vector<unsigned int>::const_iterator end = recv_buf.end();
+ while (ptr+1<end)
{
unsigned int num=*(ptr++);
unsigned int row=*(ptr++);
ptr++;
}
}
- Assert(ptr-1==end, ExcInternalError());
+ Assert(ptr==end, ExcInternalError());
}
}
- void
- BlockSparseMatrix::compress()
- {
- for (unsigned int r=0; r<this->n_block_rows(); ++r)
- for (unsigned int c=0; c<this->n_block_cols(); ++c)
- this->block(r,c).compress();
- }
-
void
- void
- BlockVector::compress (const Epetra_CombineMode last_action)
- {
- for (unsigned int i=0; i<n_blocks(); ++i)
- components[i].compress(last_action);
- }
-
-
-
void BlockVector::print (std::ostream &out,
const unsigned int precision,
const bool scientific,
SparseMatrix::diag_element (const unsigned int i) const
{
Assert (m() == n(), ExcNotQuadratic());
-
+
+#ifdef DEBUG
+ // use operator() in debug mode because
+ // it checks if this is a valid element
+ // (in parallel)
+ return operator()(i,i);
+#else
// Trilinos doesn't seem to have a
// more efficient way to access the
// diagonal than by just using the
// standard el(i,j) function.
return el(i,i);
+#endif
}
{
last_action = Zero;
vector.reset (new Epetra_FEVector(*v.vector));
+ has_ghosts = v.has_ghosts;
}
Assert (ierr == 0, ExcTrilinosError(ierr));
}
+ has_ghosts = vector->Map().UniqueGIDs()==false;
last_action = Zero;
}
if (vector->Map().SameAs(v.vector->Map()) == false)
{
vector.reset (new Epetra_FEVector(v.vector->Map()));
+ has_ghosts = v.has_ghosts;
last_action = Zero;
}
else if (fast == false)
{
vector.reset (new Epetra_FEVector(*v.vector));
last_action = Zero;
+ has_ghosts = v.has_ghosts;
}
return *this;
:
last_action (Zero),
compressed (true),
+ has_ghosts (false),
#ifdef DEAL_II_COMPILER_SUPPORTS_MPI
vector(new Epetra_FEVector(
Epetra_Map(0,0,Epetra_MpiComm(MPI_COMM_SELF))))
Subscriptor(),
last_action (Zero),
compressed (true),
+ has_ghosts (v.has_ghosts),
vector(new Epetra_FEVector(*v.vector))
{}
Epetra_Map map (0, 0, Epetra_SerialComm());
#endif
+ has_ghosts = false;
vector.reset (new Epetra_FEVector(map));
last_action = Zero;
}
{
last_action = Zero;
vector.reset (new Epetra_FEVector(*v.vector));
+ has_ghosts = v.has_ghosts;
}
else
{
const unsigned int local_index,
const int2type<1>)
{
- return mg_level.lines.
+ return mg_level.dof_object.
get_dof_index (mg_dof_handler,
obj_index,
fe_index,
const unsigned int global_index,
const int2type<1>)
{
- mg_level.lines.
+ mg_level.dof_object.
set_dof_index (mg_dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
const int2type<2>)
{
- return mg_level.quads.
+ return mg_level.dof_object.
get_dof_index (mg_dof_handler,
obj_index,
fe_index,
const unsigned int global_index,
const int2type<2>)
{
- mg_level.quads.
+ mg_level.dof_object.
set_dof_index (mg_dof_handler,
obj_index,
fe_index,
const unsigned int local_index,
const int2type<3>)
{
- return mg_level.hexes.
+ return mg_level.dof_object.
get_dof_index (mg_dof_handler,
obj_index,
fe_index,
const unsigned int global_index,
const int2type<3>)
{
- mg_level.hexes.
+ mg_level.dof_object.
set_dof_index (mg_dof_handler,
obj_index,
fe_index,
{
mg_dof_handler.mg_levels.push_back (new internal::DoFHandler::DoFLevel<1>);
- mg_dof_handler.mg_levels.back()->lines.dofs = std::vector<unsigned int>(mg_dof_handler.get_tria().n_raw_lines(i) *
+ mg_dof_handler.mg_levels.back()->dof_object.dofs = std::vector<unsigned int>(mg_dof_handler.get_tria().n_raw_lines(i) *
mg_dof_handler.get_fe().dofs_per_line,
DoFHandler<1>::invalid_dof_index);
}
{
mg_dof_handler.mg_levels.push_back (new internal::DoFHandler::DoFLevel<2>);
- mg_dof_handler.mg_levels.back()->quads.dofs = std::vector<unsigned int> (mg_dof_handler.get_tria().n_raw_quads(i) *
+ mg_dof_handler.mg_levels.back()->dof_object.dofs = std::vector<unsigned int> (mg_dof_handler.get_tria().n_raw_quads(i) *
mg_dof_handler.get_fe().dofs_per_quad,
DoFHandler<2>::invalid_dof_index);
}
{
mg_dof_handler.mg_levels.push_back (new internal::DoFHandler::DoFLevel<3>);
- mg_dof_handler.mg_levels.back()->hexes.dofs
+ mg_dof_handler.mg_levels.back()->dof_object.dofs
= std::vector<unsigned int> (mg_dof_handler.get_tria().n_raw_hexs(i) *
mg_dof_handler.get_fe().dofs_per_hex,
DoFHandler<3>::invalid_dof_index);
template <int dim, int spacedim>
-void MGDoFHandler<dim,spacedim>::distribute_dofs (const FiniteElement<dim,spacedim> &fe,
- const unsigned int offset)
+void MGDoFHandler<dim,spacedim>::distribute_dofs (const FiniteElement<dim,spacedim> &fe)
{
// first distribute global dofs
DoFHandler<dim,spacedim>::distribute_dofs (fe);
// separately
for (unsigned int level=0; level<this->get_tria().n_levels(); ++level)
{
- unsigned int next_free_dof = offset;
+ unsigned int next_free_dof = 0;
cell_iterator cell = begin(level),
endc = end(level);
new_numbers[i->get_index (level, d,
this->get_fe().dofs_per_vertex)]);
- for (std::vector<unsigned int>::iterator i=mg_levels[level]->lines.dofs.begin();
- i!=mg_levels[level]->lines.dofs.end(); ++i)
+ for (std::vector<unsigned int>::iterator i=mg_levels[level]->dof_object.dofs.begin();
+ i!=mg_levels[level]->dof_object.dofs.end(); ++i)
{
if (*i != DoFHandler<1>::invalid_dof_index)
{
const_cast<Triangulation<2> &>(this->get_tria()).load_user_flags (user_flags);
}
- for (std::vector<unsigned int>::iterator i=mg_levels[level]->quads.dofs.begin();
- i!=mg_levels[level]->quads.dofs.end(); ++i)
+ for (std::vector<unsigned int>::iterator i=mg_levels[level]->dof_object.dofs.begin();
+ i!=mg_levels[level]->dof_object.dofs.end(); ++i)
{
if (*i != DoFHandler<2>::invalid_dof_index)
{
}
//HEX DoFs
- for (std::vector<unsigned int>::iterator i=mg_levels[level]->hexes.dofs.begin();
- i!=mg_levels[level]->hexes.dofs.end(); ++i)
+ for (std::vector<unsigned int>::iterator i=mg_levels[level]->dof_object.dofs.begin();
+ i!=mg_levels[level]->dof_object.dofs.end(); ++i)
{
if (*i != DoFHandler<3>::invalid_dof_index)
{
{
const typename MGDoFHandler<dim,spacedim>::face_iterator
face = cell->face(face_no);
- const types::boundary_id_t bi = face->boundary_indicator();
+ const types::boundary_id bi = face->boundary_indicator();
// Face is listed in
// boundary map
if (function_map.find(bi) != function_map.end())
}
typename MGDoFHandler<dim,spacedim>::face_iterator face = cell->face(face_no);
- const types::boundary_id_t boundary_component = face->boundary_indicator();
+ const types::boundary_id boundary_component = face->boundary_indicator();
if (function_map.find(boundary_component) != function_map.end())
// face is of the right component
{
typename DH<dim,spacedim>::active_cell_iterator cell, endc;
cell = endc = dof_handler.begin_active();
// (static_cast to avoid warnings
- // about unsigned always >=0)
+ // about unsigned int always >=0)
std::advance (cell, static_cast<int>(index_interval.first));
std::advance (endc, static_cast<int>(index_interval.second));
//---------------------------------------------------------------------------
-// $Id: vectors.inst.in 19046 2009-07-08 19:30:23Z bangerth $
+// $Id$
// Version: $Name$
//
// Copyright (C) 2010, 2012 by the deal.II authors
* The subdomain id we are to care
* for.
*/
- const types::subdomain_id_t subdomain_id;
+ const types::subdomain_id subdomain_id;
/**
* The material id we are to care
* for.
*/
- const types::material_id_t material_id;
+ const types::material_id material_id;
/**
* Some more references to input data to
const dealii::hp::MappingCollection<DH::dimension, DH::space_dimension> &mapping,
const bool need_quadrature_points,
const unsigned int n_solution_vectors,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id,
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id,
const typename FunctionMap<spacedim>::type *neumann_bc,
const std::vector<bool> component_mask,
const Function<spacedim> *coefficients);
const dealii::hp::MappingCollection<DH::dimension, DH::space_dimension> &mapping,
const bool need_quadrature_points,
const unsigned int n_solution_vectors,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id,
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id,
const typename FunctionMap<spacedim>::type *neumann_bc,
const std::vector<bool> component_mask,
const Function<spacedim> *coefficients)
// difference between normal
// derivative and boundary function
{
- const types::boundary_id_t boundary_indicator = face->boundary_indicator();
+ const types::boundary_id boundary_indicator = face->boundary_indicator();
Assert (parallel_data.neumann_bc->find(boundary_indicator) !=
parallel_data.neumann_bc->end(),
{
const unsigned int n_solution_vectors = solutions.size();
- const types::subdomain_id_t subdomain_id = parallel_data.subdomain_id;
+ const types::subdomain_id subdomain_id = parallel_data.subdomain_id;
const unsigned int material_id = parallel_data.material_id;
// empty our own copy of the local face
||
(cell->subdomain_id() == subdomain_id))
&&
- ((material_id == types::invalid_material_id)
+ ((material_id == numbers::invalid_material_id)
||
(cell->material_id() == material_id))) )
{
&&
((cell->neighbor(face_no)->material_id()
== material_id) ||
- (material_id == types::invalid_material_id));
+ (material_id == numbers::invalid_material_id));
else
{
for (unsigned int sf=0; sf<face->n_children(); ++sf)
->subdomain_id() == subdomain_id)
&&
(material_id ==
- types::invalid_material_id))
+ numbers::invalid_material_id))
||
((cell->neighbor_child_on_subface(face_no,sf)
->material_id() == material_id)
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
// just pass on to the other function
const std::vector<const InputVector *> solutions (1, &solution);
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<1,spacedim>::mapping, dof_handler, quadrature, neumann_bc, solution,
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<1,spacedim>::mapping, dof_handler, quadrature, neumann_bc, solutions,
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
// just pass on to the other function
const std::vector<const InputVector *> solutions (1, &solution);
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<1,spacedim>::mapping, dof_handler, quadrature, neumann_bc, solution,
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<1,spacedim>::mapping, dof_handler, quadrature, neumann_bc, solutions,
const std::vector<bool> &/*component_mask_*/,
const Function<spacedim> */*coefficient*/,
const unsigned int,
- const types::subdomain_id_t /*subdomain_id*/,
- const types::material_id_t /*material_id*/)
+ const types::subdomain_id /*subdomain_id*/,
+ const types::material_id /*material_id*/)
{
Assert (false, ExcInternalError());
}
const std::vector<bool> &component_mask_,
const Function<spacedim> *coefficient,
const unsigned int,
- const types::subdomain_id_t subdomain_id_,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id_,
+ const types::material_id material_id)
{
#ifdef DEAL_II_USE_P4EST
if (dynamic_cast<const parallel::distributed::Triangulation<1,spacedim>*>
"valid subdomain_id that can be passed here is the "
"one that corresponds to the locally owned subdomain id."));
- const types::subdomain_id_t subdomain_id
+ const types::subdomain_id subdomain_id
= ((dynamic_cast<const parallel::distributed::Triangulation<1,spacedim>*>
(&dof_handler.get_tria())
!= 0)
:
subdomain_id_);
#else
- const types::subdomain_id_t subdomain_id
+ const types::subdomain_id subdomain_id
= subdomain_id_;
#endif
const unsigned int n_solution_vectors = solutions.size();
// sanity checks
- Assert (neumann_bc.find(types::internal_face_boundary_id) == neumann_bc.end(),
+ Assert (neumann_bc.find(numbers::internal_face_boundary_id) == neumann_bc.end(),
ExcInvalidBoundaryIndicator());
for (typename FunctionMap<spacedim>::type::const_iterator i=neumann_bc.begin();
||
(cell->subdomain_id() == subdomain_id))
&&
- ((material_id == types::invalid_material_id)
+ ((material_id == numbers::invalid_material_id)
||
(cell->material_id() == material_id)))
{
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
// just pass on to the other function
const std::vector<const InputVector *> solutions (1, &solution);
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<dim,spacedim>::mapping, dof_handler, quadrature, neumann_bc, solution,
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
// just pass on to the other function
const std::vector<const InputVector *> solutions (1, &solution);
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<dim, spacedim>::mapping, dof_handler, quadrature, neumann_bc, solution,
const std::vector<bool> &component_mask_,
const Function<spacedim> *coefficients,
const unsigned int ,
- const types::subdomain_id_t subdomain_id_,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id_,
+ const types::material_id material_id)
{
#ifdef DEAL_II_USE_P4EST
if (dynamic_cast<const parallel::distributed::Triangulation<dim,spacedim>*>
"valid subdomain_id that can be passed here is the "
"one that corresponds to the locally owned subdomain id."));
- const types::subdomain_id_t subdomain_id
+ const types::subdomain_id subdomain_id
= ((dynamic_cast<const parallel::distributed::Triangulation<dim,spacedim>*>
(&dof_handler.get_tria())
!= 0)
:
subdomain_id_);
#else
- const types::subdomain_id_t subdomain_id
+ const types::subdomain_id subdomain_id
= subdomain_id_;
#endif
||
(cell->subdomain_id() == subdomain_id))
&&
- ((material_id == types::invalid_material_id)
+ ((material_id == numbers::invalid_material_id)
||
(cell->material_id() == material_id)))
{
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
// forward to the function with the QCollection
estimate (mapping, dof_handler,
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<dim, spacedim>::mapping, dof_handler, quadrature, neumann_bc, solutions,
const std::vector<bool> &component_mask,
const Function<spacedim> *coefficients,
const unsigned int n_threads,
- const types::subdomain_id_t subdomain_id,
- const types::material_id_t material_id)
+ const types::subdomain_id subdomain_id,
+ const types::material_id material_id)
{
Assert (DEAL_II_COMPAT_MAPPING, ExcCompatibility("mapping"));
estimate(StaticMappingQ1<dim, spacedim>::mapping, dof_handler, quadrature, neumann_bc, solutions,
const Function<deal_II_dimension> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t); \
+ const types::material_id); \
\
template \
void \
const Function<deal_II_dimension> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t); \
+ const types::material_id); \
\
template \
void \
const Function<deal_II_dimension> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t); \
+ const types::material_id); \
\
template \
void \
const Function<deal_II_dimension> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t);\
+ const types::material_id);\
#if deal_II_dimension == 2 || deal_II_dimension == 1
const Function<deal_II_dimension+1> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t); \
+ const types::material_id); \
\
template \
void \
const Function<deal_II_dimension+1> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t); \
+ const types::material_id); \
\
template \
void \
const Function<deal_II_dimension+1> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t); \
+ const types::material_id); \
\
template \
void \
const Function<deal_II_dimension+1> *, \
const unsigned int , \
const unsigned int , \
- const types::material_id_t);\
+ const types::material_id);\
#else
#define INSTANTIATE_CODIM(InputVector,DH,Q)
#include <deal.II/grid/geometry_info.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/block_vector.h>
#include <deal.II/lac/full_matrix.h>
{
// remove this row, except for the
// diagonal element
- for (unsigned j=0; j<n_local_dofs; ++j)
+ for (unsigned int j=0; j<n_local_dofs; ++j)
if (i != j)
local_matrix(i,j) = 0;
// explicit instantiations
-#include "matrices.inst"
+#include "matrix_tools.inst"
namespace MatrixTools
{
//---------------------------------------------------------------------------
-// $Id: fe_field_function.inst.in 19046 2009-07-08 19:30:23Z bangerth $
+// $Id$
//
// Copyright (C) 2009, 2010, 2012 by the deal.II authors
//
#include <deal.II/lac/trilinos_vector.h>
#include <deal.II/lac/trilinos_block_vector.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/point_value_history.h>
void
-TimeStepBase::wake_up (const unsigned )
+TimeStepBase::wake_up (const unsigned int )
{}
template <int dim>
void
-TimeStepBase_Tria<dim>::wake_up (const unsigned wakeup_level)
+TimeStepBase_Tria<dim>::wake_up (const unsigned int wakeup_level)
{
TimeStepBase::wake_up (wakeup_level);
template <int dim>
void
-TimeStepBase_Tria<dim>::sleep (const unsigned sleep_level)
+TimeStepBase_Tria<dim>::sleep (const unsigned int sleep_level)
{
if (sleep_level == flags.sleep_level_to_delete_grid)
{
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/hp/dof_handler.h>
-#include <deal.II/numerics/vectors.templates.h>
+#include <deal.II/numerics/vector_tools.templates.h>
DEAL_II_NAMESPACE_OPEN
// ---------------------------- explicit instantiations --------------------
-#include "vectors.inst"
+#include "vector_tools.inst"
DEAL_II_NAMESPACE_CLOSE
void interpolate_boundary_values
(const Mapping<deal_II_dimension,deal_II_space_dimension> &,
const DH<deal_II_dimension,deal_II_space_dimension> &,
- const types::boundary_id_t,
+ const types::boundary_id,
const Function<deal_II_space_dimension> &,
std::map<unsigned int,double> &,
const std::vector<bool> &);
template
void interpolate_boundary_values (
const DH<deal_II_dimension,deal_II_space_dimension> &,
- const types::boundary_id_t,
+ const types::boundary_id,
const Function<deal_II_space_dimension> &,
std::map<unsigned int,double> &,
const std::vector<bool> &);
void interpolate_boundary_values
(const Mapping<deal_II_dimension,deal_II_space_dimension> &,
const DH<deal_II_dimension,deal_II_space_dimension> &,
- const types::boundary_id_t,
+ const types::boundary_id,
const Function<deal_II_space_dimension> &,
ConstraintMatrix &,
const std::vector<bool> &);
template
void interpolate_boundary_values (
const DH<deal_II_dimension,deal_II_space_dimension> &,
- const types::boundary_id_t,
+ const types::boundary_id,
const Function<deal_II_space_dimension> &,
ConstraintMatrix &,
const std::vector<bool> &);
const Quadrature<deal_II_dimension-1> &,
const Function<deal_II_dimension> &,
Vector<double> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
#endif
template
const Quadrature<deal_II_dimension-1> &,
const Function<deal_II_dimension> &,
Vector<double> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
#if deal_II_dimension > 1
template
const hp::QCollection<deal_II_dimension-1> &,
const Function<deal_II_dimension> &,
Vector<double> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
#endif
template
const hp::QCollection<deal_II_dimension-1> &,
const Function<deal_II_dimension> &,
Vector<double> &,
- const std::set<types::boundary_id_t> &);
+ const std::set<types::boundary_id> &);
(const DoFHandler<deal_II_dimension>&,
const unsigned int,
const Function<deal_II_dimension>&,
- const types::boundary_id_t,
+ const types::boundary_id,
ConstraintMatrix&,
const Mapping<deal_II_dimension>&);
template
(const hp::DoFHandler<deal_II_dimension>&,
const unsigned int,
const Function<deal_II_dimension>&,
- const types::boundary_id_t,
+ const types::boundary_id,
ConstraintMatrix&,
const hp::MappingCollection<deal_II_dimension>&);
template
(const DoFHandler<deal_II_dimension>&,
const unsigned int,
const Function<deal_II_dimension>&,
- const types::boundary_id_t,
+ const types::boundary_id,
ConstraintMatrix&,
const Mapping<deal_II_dimension>&);
template
(const hp::DoFHandler<deal_II_dimension>&,
const unsigned int,
const Function<deal_II_dimension>&,
- const types::boundary_id_t,
+ const types::boundary_id,
ConstraintMatrix&,
const hp::MappingCollection<deal_II_dimension>&);
template
void
compute_no_normal_flux_constraints (const DoFHandler<deal_II_dimension> &dof_handler,
const unsigned int first_vector_component,
- const std::set<types::boundary_id_t> &boundary_ids,
+ const std::set<types::boundary_id> &boundary_ids,
ConstraintMatrix &constraints,
const Mapping<deal_II_dimension> &mapping);
template
void
compute_no_normal_flux_constraints (const hp::DoFHandler<deal_II_dimension> &dof_handler,
const unsigned int first_vector_component,
- const std::set<types::boundary_id_t> &boundary_ids,
+ const std::set<types::boundary_id> &boundary_ids,
ConstraintMatrix &constraints,
const Mapping<deal_II_dimension> &mapping);
#endif
cd $$i ; $(MAKE) report ; cd .. ; \
done
+report+summary:
+ -@$(MAKE) -k nofail
+ @for i in $(nofail-dirs) fail all-headers ; do \
+ echo =======Report: $$i ======= ; \
+ cd $$i ; $(MAKE) report ; cd .. ; \
+ done
+ @echo " Compiling Linking Running Check OK all"
+ @for i in $(nofail-dirs) fail all-headers ; do \
+ printf "%20s\t" "$$i"; \
+ cd $$i ; $(MAKE) -s summary ; cd .. ; \
+ done
+
report+mail:
-@$(MAKE) -k nofail
@for i in $(nofail-dirs) fail all-headers ; do \
ID = `id -un`"@"`hostname`
############################################################
-# First how to create executables, including all necessary
-# flags:
+# First how to create object files, including all necessary
+# flags. Before we start the compilation, write the status
+# of the next operation into the test/status file. If these
+# are MPI tests, also remove all status files from the
+# test/ncpus_*/ directories
############################################################
flags = $(CXXFLAGS.g)
%/obj.g.$(OBJEXT) : %.cc
@echo =====debug========= $<
@echo Compiling > $(dir $@)/status
+ @-rm -f $(dir $@)/ncpu*/status
@$(CXX) $(flags) -c $< -o $@
%/obj.$(OBJEXT) : %.cc
@echo =====optimized===== $<
@echo Compiling > $(dir $@)/status
+ @-rm -f $(dir $@)/ncpu*/status
@$(CXX) $(CXXFLAGS.o) -c $< -o $@
######################################################################
if test -f $$testname/cmp/$$i ; then \
cmpfile_found=yes ; \
if test "x$(verbose)" = "xon" ; then \
- cmd="diff $(DIFFOPT) -w $< $$testname/cmp/$$i" ; \
+ cmd="diff $(DIFFOPT) $< $$testname/cmp/$$i" ; \
else \
- cmd="diff -w $< $$testname/cmp/$$i > /dev/null" ; \
+ cmd="diff $< $$testname/cmp/$$i > /dev/null" ; \
fi ; \
if eval $$cmd ; then \
echo '=====OK============' $@ ; \
done
+status=Compiling Linking Running Checking diff all
+
+summary:
+ @for curstatus in $(status) ; do \
+ counter=0 ; \
+ all=0 ; \
+ for test in $(sort $(tests)) ; do \
+ case $$test in \
+ *ncpu_*) \
+ if test -f $$test/status ; then \
+ file=$$test/status ; \
+ else \
+ file=`echo $$test | $(PERL) -pi -e 's/ncpu_\d+//g;'`/status ; \
+ fi ; \
+ ;; \
+ *) \
+ file=$$test/status ; \
+ ;; \
+ esac ; \
+ curcount=`if test -f $$file ; then grep -c $$curstatus $$file;else echo 0;fi;`; \
+ all=$$(($$all+1));\
+ counter=$$(($$counter+$$curcount)); \
+ done; \
+ if test "$$curstatus" = "all"; then printf "%s\t" $$all; \
+ else if test "$$curstatus" = "diff"; then printf "%s\t" $$counter; \
+ else if test "$$counter" != "0"; then printf "%s\t" $$counter; \
+ else printf "%s\t" $$counter ; fi;fi;fi;\
+ done;\
+ printf "\n";
+
report+mail:
@$(MAKE) report | tee testresults
@cat testresults | $(MAIL) regression-tests@dealii.org
@for i in $(PLATFORM-HIERARCHY) ; do \
testname=$(<:%/output=%) ; \
if test -f $$testname/cmp/$$i ; then \
- cmd="diff -w $< $$testname/cmp/$$i > /dev/null" ; \
+ cmd="diff $< $$testname/cmp/$$i > /dev/null" ; \
if eval ! $$cmd ; then \
echo '=====Creating======' $$testname/cmp/$(PLATFORM) ; \
cp $$testname/output $$testname/cmp/$(PLATFORM); \
clean:
-rm -f Makefile.depend Makefile.*tests */obj.$(OBJEXT) \
*/obj.g.$(OBJEXT) */output *~ */*.vtu */*.pvtu */*visit \
- */status */OK
+ */status */OK \
+ */ncpu*/status
distclean: clean
-rm -f */exe *.testcase *.gpl *.eps *.gnuplot
> $@
-.PHONY: report show-tests clean distclean %/ref
+.PHONY: report show-tests clean distclean summary %/ref
-rm -f Makefile.dep *.$(OBJEXT) \
*.g.$(OBJEXT) *.output *~ *.OK *.cc
+summary:
+ @echo "not implemented"
-.PHONY: report clean distclean all default report report+mail
+.PHONY: report clean distclean all default report report+mail summary
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/solution_transfer.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_dgq.h>
Writing deal_II_intermediate dimensions 1,2
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
first name
Writing deal_II_intermediate dimensions 2,2
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
first name
Writing deal_II_intermediate dimensions 2,3
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
first name
Writing deal_II_intermediate dimensions 3,3
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
first name
<?xml version="1.0"?>
<!--
-#This file was generated
- -->
+#This file was generated
+-->
<VTKFile type="PUnstructuredGrid" version="0.1" byte_order="LittleEndian">
<PUnstructuredGrid GhostLevel="0">
<PPointData Scalars="scalars">
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
5
x1
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
5
x1
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
5
x1
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
5
x1
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
5
x1
--- /dev/null
+//-----------------------------------------------------------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//-----------------------------------------------------------------------------
+
+// make sure a TableHandler can be copied
+
+
+#include "../tests.h"
+#include <deal.II/base/data_out_base.h>
+#include <deal.II/base/table_handler.h>
+#include <deal.II/base/logstream.h>
+
+#include <vector>
+#include <iomanip>
+#include <fstream>
+#include <string>
+
+
+int main ()
+{
+ std::ofstream logfile("table_handler_07/output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+/* Like in _06 */
+ TableHandler table;
+ table.set_auto_fill_mode (true);
+
+ std::string keys[3] = { "key1", "key2", "key3" };
+
+ // fill rows 1 and 2 partially
+ table.add_value(keys[0], 0);
+ table.add_value(keys[0], 1);
+ // now fill row 3 completely
+ table.add_value(keys[0], 2);
+ table.add_value(keys[1], 13);
+ table.add_value(keys[2], std::string("a"));
+
+ // now again fill row 4 partially
+ table.add_value(keys[0], 1);
+
+/* Now copy and write the file from the copy */
+ TableHandler table2;
+ table2 = table;
+
+ // produce output. hope that row 4 is
+ // completely padded
+ table2.write_text(deallog.get_file_stream(),
+ TableHandler::table_with_separate_column_description);
+}
--- /dev/null
+
+# 1: key1
+# 2: key2
+# 3: key3
+0 0 ""
+1 0 ""
+2 13 a
+1 0 ""
--- /dev/null
+//-----------------------------------------------------------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//-----------------------------------------------------------------------------
+
+// make sure a TableHandler can be copied, this time using the copy
+// constructor
+
+
+#include "../tests.h"
+#include <deal.II/base/data_out_base.h>
+#include <deal.II/base/table_handler.h>
+#include <deal.II/base/logstream.h>
+
+#include <vector>
+#include <iomanip>
+#include <fstream>
+#include <string>
+
+
+int main ()
+{
+ std::ofstream logfile("table_handler_08/output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+/* Like in _06 */
+ TableHandler table;
+ table.set_auto_fill_mode (true);
+
+ std::string keys[3] = { "key1", "key2", "key3" };
+
+ // fill rows 1 and 2 partially
+ table.add_value(keys[0], 0);
+ table.add_value(keys[0], 1);
+ // now fill row 3 completely
+ table.add_value(keys[0], 2);
+ table.add_value(keys[1], 13);
+ table.add_value(keys[2], std::string("a"));
+
+ // now again fill row 4 partially
+ table.add_value(keys[0], 1);
+
+/* Now copy and write the file from the copy */
+ TableHandler table2(table);
+
+ // produce output. hope that row 4 is
+ // completely padded
+ table2.write_text(deallog.get_file_stream(),
+ TableHandler::table_with_separate_column_description);
+}
--- /dev/null
+
+# 1: key1
+# 2: key2
+# 3: key3
+0 0 ""
+1 0 ""
+2 13 a
+1 0 ""
--- /dev/null
+//-----------------------------------------------------------------------------
+// $Id: table_handler_06.cc 24924 2012-01-25 12:35:17Z kormann $
+// Version: $Name$
+//
+// Copyright (C) 2010, 2011 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//-----------------------------------------------------------------------------
+
+// use the alternative format for the headers in TableHandler::write_text
+
+
+#include "../tests.h"
+#include <deal.II/base/data_out_base.h>
+#include <deal.II/base/table_handler.h>
+#include <deal.II/base/logstream.h>
+
+#include <vector>
+#include <iomanip>
+#include <fstream>
+#include <string>
+
+
+int main ()
+{
+ std::ofstream logfile("table_handler_09/output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ TableHandler table;
+ table.set_auto_fill_mode (true);
+
+ std::string keys[3] = { "key1", "key2", "key3" };
+
+ // fill rows 1 and 2 partially
+ table.add_value(keys[0], 0);
+ table.add_value(keys[0], 1);
+ // now fill row 3 completely
+ table.add_value(keys[0], 2);
+ table.add_value(keys[1], 113);
+ table.add_value(keys[2], std::string("a"));
+
+ // now again fill row 4 partially
+ table.add_value(keys[0], 1);
+
+ // produce output. hope that row 4 is
+ // completely padded
+ table.write_text(deallog.get_file_stream(),
+ TableHandler::simple_table_with_separate_column_description);
+}
--- /dev/null
+
+# 1: key1
+# 2: key2
+# 3: key3
+0 0 ""
+1 0 ""
+2 113 a
+1 0 ""
int main ()
{
- std::ofstream logfile("tensor_05/output");
- deallog << std::setprecision(3);
+ std::string logname = JobIdentifier::base_name(__FILE__) + std::string("/output");
+ std::ofstream logfile(logname.c_str());
deallog.attach(logfile);
deallog.depth_console(0);
+ deallog << std::setprecision(3);
deallog.threshold_double(1.e-10);
double a[3][3] = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}};
--- /dev/null
+//---------------------------- tensor_05.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2006, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- tensor_05.cc ---------------------------
+
+// check double_contract(Tensor<2,dim>,Tensor<2,dim>)
+
+#include "../tests.h"
+#include <deal.II/base/tensor.h>
+#include <deal.II/base/logstream.h>
+#include <deal.II/lac/vector.h>
+#include <fstream>
+#include <iomanip>
+
+template <int dim>
+void test_constant()
+{
+ Tensor<2,dim> t;
+ for (unsigned int i=0;i<dim;++i)
+ for (unsigned int j=0;j<dim;++j)
+ t[i][j] = 2.;
+ deallog << "Constant dim " << dim << '\t' << double_contract(t,t)
+ << " compare " << 4*dim*dim << std::endl;
+}
+
+
+template <int dim>
+void test_equal()
+{
+ Tensor<2,dim> t;
+ unsigned int sum = 0;
+ for (unsigned int i=0;i<dim;++i)
+ for (unsigned int j=0;j<dim;++j)
+ {
+ t[i][j] = i+dim*j;
+ sum += (i+dim*j)*(i+dim*j);
+ }
+
+ deallog << "Equal dim " << dim << '\t' << double_contract(t,t)
+ << " compare " << sum << std::endl;
+}
+
+
+template <int dim>
+void test_unequal()
+{
+ Tensor<2,dim> s;
+ Tensor<2,dim> t;
+ unsigned int sum = 0;
+ for (unsigned int i=0;i<dim;++i)
+ for (unsigned int j=0;j<dim;++j)
+ {
+ s[i][j] = i+dim*j;
+ t[i][j] = dim*i+j;
+ sum += (i+dim*j)*(dim*i+j);
+ }
+
+ deallog << "Unequal dim " << dim << '\t' << double_contract(s,t)
+ << " compare " << sum << std::endl;
+}
+
+
+int main ()
+{
+ std::string logname = JobIdentifier::base_name(__FILE__) + std::string("/output");
+ std::ofstream logfile(logname.c_str());
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ test_constant<2>();
+ test_constant<3>();
+ test_constant<4>();
+
+ test_equal<2>();
+ test_equal<3>();
+ test_equal<4>();
+
+ test_unequal<2>();
+ test_unequal<3>();
+ test_unequal<4>();
+}
--- /dev/null
+
+DEAL::Constant dim 2 16.0000 compare 16
+DEAL::Constant dim 3 36.0000 compare 36
+DEAL::Constant dim 4 64.0000 compare 64
+DEAL::Equal dim 2 14.0000 compare 14
+DEAL::Equal dim 3 204.000 compare 204
+DEAL::Equal dim 4 1240.00 compare 1240
+DEAL::Unequal dim 2 13.0000 compare 13
+DEAL::Unequal dim 3 180.000 compare 180
+DEAL::Unequal dim 4 1060.00 compare 1060
--- /dev/null
+//----------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 2006, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//----------------------------------------------------------------------
+
+// check contract(Tensor<1,dim>,Tensor<2,dim>,Tensor<1,dim>)
+
+#include "../tests.h"
+#include <deal.II/base/tensor.h>
+#include <deal.II/base/logstream.h>
+#include <deal.II/lac/vector.h>
+#include <fstream>
+#include <iomanip>
+
+template <int dim>
+void test_select(double f1, double f2)
+{
+ Tensor<2,dim> t;
+ unsigned int k = 0;
+ for (unsigned int i=0;i<dim;++i)
+ for (unsigned int j=0;j<dim;++j)
+ t[i][j] = ++k;
+
+ for (unsigned int i=0;i<dim;++i)
+ for (unsigned int j=0;j<dim;++j)
+ {
+ Tensor<1,dim> u, v;
+ u[i] = f1;
+ v[j] = f2;
+ deallog << '\t' << contract3(u,t,v);
+ }
+ deallog << std::endl;
+}
+
+
+int main ()
+{
+ std::string logname = JobIdentifier::base_name(__FILE__) + std::string("/output");
+ std::ofstream logfile(logname.c_str());
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog << std::setprecision(3);
+
+ test_select<2>(1.,1.);
+ test_select<3>(1.,1.);
+ test_select<4>(1.,1.);
+
+ test_select<2>(2.,3.);
+ test_select<3>(2.,3.);
+ test_select<4>(2.,3.);
+}
--- /dev/null
+
+DEAL:: 1.00 2.00 3.00 4.00
+DEAL:: 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00
+DEAL:: 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00 10.0 11.0 12.0 13.0 14.0 15.0 16.0
+DEAL:: 6.00 12.0 18.0 24.0
+DEAL:: 6.00 12.0 18.0 24.0 30.0 36.0 42.0 48.0 54.0
+DEAL:: 6.00 12.0 18.0 24.0 30.0 36.0 42.0 48.0 54.0 60.0 66.0 72.0 78.0 84.0 90.0 96.0
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_tools.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/numerics/derivative_approximation.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
// We need a FESystem
#include <deal.II/fe/fe_system.h>
std::vector<bool> fixed_dofs (dof_handler.n_dofs());
- std::set<types::boundary_id_t> boundary_indicators;
+ std::set<types::boundary_id> boundary_indicators;
boundary_indicators.insert (0);
// get a list of those boundary DoFs which
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
bc_component_select[2] = false;
std::vector<bool> ned_boundary_dofs (dof_handler.n_dofs());
- std::set<types::boundary_id_t> boundary_indicators;
+ std::set<types::boundary_id> boundary_indicators;
boundary_indicators.insert (0);
DoFTools::extract_boundary_dofs (dof_handler,
bc_component_select,
// (the pressure is assumed to be set to 1
// on the boundary)
std::vector<bool> p_boundary_dofs (dof_handler.n_dofs());
- std::set<types::boundary_id_t> boundary_indicators;
+ std::set<types::boundary_id> boundary_indicators;
boundary_indicators.insert (0);
DoFTools::extract_boundary_dofs (dof_handler,
bc_component_select,
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <iomanip>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <iomanip>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out_stack.h>
#include <fstream>
#include <iomanip>
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
3
node_data_0
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
4
node_data_0
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 1
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
3
node_data_0
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
4
node_data_0
#include <deal.II/fe/mapping_q_eulerian.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/multithread_info.h>
#include <fstream>
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
3
node_data_0
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
4
node_data_0
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
1 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
3
node_data_0
2 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
4
node_data_0
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
3
node_data_0
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
3 3
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
3
node_data_0
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
2 2
[deal.II intermediate format graphics data]
-[written by deal.II 7.2.pre]
+[written by deal.II 7.3.pre]
[Version: 3]
2
node_data
#include <deal.II/grid/grid_generator.h>
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/derivative_approximation.h>
#include <fstream>
// $Id$
// Version: $Name$
//
-// Copyright (C) 2003, 2004, 2006 by the deal.II authors
+// Copyright (C) 2003, 2004, 2006, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
// which sometimes rounds to 0.38 and
// sometimes to 0.37, depending on how
// intermediate errors have accumulated)
- deallog.get_file_stream().precision (5);
+ deallog << std::setprecision (5);
+
// don't run this test if hanging
// nodes are not implemented
if (dof_handler.get_fe().constraints_are_implemented() == false)
DEAL::2
DEAL::111111111111111111
DEAL::not identity constrained: 12
-DEAL:: line 0: 0.50
-DEAL:: line 1: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 1: 0.50000
DEAL::not identity constrained: 17
-DEAL:: line 1: 0.50
-DEAL:: line 4: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 4: 0.50000
DEAL::Checking Q1 in 3d:
DEAL::16
DEAL::4
DEAL::16
DEAL::111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 36
-DEAL:: line 0: 0.50
-DEAL:: line 1: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 1: 0.50000
DEAL::not identity constrained: 37
-DEAL:: line 0: 0.50
-DEAL:: line 4: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 38
-DEAL:: line 0: 0.25
-DEAL:: line 1: 0.25
-DEAL:: line 4: 0.25
-DEAL:: line 5: 0.25
+DEAL:: line 0: 0.25000
+DEAL:: line 1: 0.25000
+DEAL:: line 4: 0.25000
+DEAL:: line 5: 0.25000
DEAL::not identity constrained: 39
-DEAL:: line 1: 0.50
-DEAL:: line 5: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 40
-DEAL:: line 12: 0.50
-DEAL:: line 13: 0.50
+DEAL:: line 12: 0.50000
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 41
-DEAL:: line 4: 0.50
-DEAL:: line 12: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 12: 0.50000
DEAL::not identity constrained: 42
-DEAL:: line 4: 0.25
-DEAL:: line 5: 0.25
-DEAL:: line 12: 0.25
-DEAL:: line 13: 0.25
+DEAL:: line 4: 0.25000
+DEAL:: line 5: 0.25000
+DEAL:: line 12: 0.25000
+DEAL:: line 13: 0.25000
DEAL::not identity constrained: 43
-DEAL:: line 5: 0.50
-DEAL:: line 13: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 44
-DEAL:: line 4: 0.50
-DEAL:: line 5: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 53
-DEAL:: line 1: 0.50
-DEAL:: line 8: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 8: 0.50000
DEAL::not identity constrained: 54
-DEAL:: line 1: 0.25
-DEAL:: line 5: 0.25
-DEAL:: line 8: 0.25
-DEAL:: line 10: 0.25
+DEAL:: line 1: 0.25000
+DEAL:: line 5: 0.25000
+DEAL:: line 8: 0.25000
+DEAL:: line 10: 0.25000
DEAL::not identity constrained: 55
-DEAL:: line 8: 0.50
-DEAL:: line 10: 0.50
+DEAL:: line 8: 0.50000
+DEAL:: line 10: 0.50000
DEAL::not identity constrained: 56
-DEAL:: line 13: 0.50
-DEAL:: line 18: 0.50
+DEAL:: line 13: 0.50000
+DEAL:: line 18: 0.50000
DEAL::not identity constrained: 57
-DEAL:: line 5: 0.25
-DEAL:: line 10: 0.25
-DEAL:: line 13: 0.25
-DEAL:: line 18: 0.25
+DEAL:: line 5: 0.25000
+DEAL:: line 10: 0.25000
+DEAL:: line 13: 0.25000
+DEAL:: line 18: 0.25000
DEAL::not identity constrained: 58
-DEAL:: line 10: 0.50
-DEAL:: line 18: 0.50
+DEAL:: line 10: 0.50000
+DEAL:: line 18: 0.50000
DEAL::not identity constrained: 59
-DEAL:: line 5: 0.50
-DEAL:: line 10: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 10: 0.50000
DEAL::Checking Q2 in 1d:
DEAL::Checking Q2 in 2d:
DEAL::6
DEAL::6
DEAL::111111111111111111111111111111011111111111111111110111111
DEAL::not identity constrained: 30
-DEAL:: line 6: 1.0
+DEAL:: line 6: 1.0000
DEAL::not identity constrained: 33
-DEAL:: line 0: 0.38
-DEAL:: line 1: -0.12
-DEAL:: line 6: 0.75
+DEAL:: line 0: 0.37500
+DEAL:: line 1: -0.12500
+DEAL:: line 6: 0.75000
DEAL::not identity constrained: 36
-DEAL:: line 0: -0.12
-DEAL:: line 1: 0.38
-DEAL:: line 6: 0.75
+DEAL:: line 0: -0.12500
+DEAL:: line 1: 0.37500
+DEAL:: line 6: 0.75000
DEAL::not identity constrained: 50
-DEAL:: line 12: 1.0
+DEAL:: line 12: 1.0000
DEAL::not identity constrained: 52
-DEAL:: line 1: 0.38
-DEAL:: line 9: -0.12
-DEAL:: line 12: 0.75
+DEAL:: line 1: 0.37500
+DEAL:: line 9: -0.12500
+DEAL:: line 12: 0.75000
DEAL::not identity constrained: 55
-DEAL:: line 1: -0.12
-DEAL:: line 9: 0.38
-DEAL:: line 12: 0.75
+DEAL:: line 1: -0.12500
+DEAL:: line 9: 0.37500
+DEAL:: line 12: 0.75000
DEAL::Checking Q2 in 3d:
DEAL::72
DEAL::9
DEAL::72
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000111111111111110111111111100011111111111111011111111110111111111111111111111111111111111111111111111111111110011111111110111111111100111111111101111111111011111111111111
DEAL::not identity constrained: 150
-DEAL:: line 10: 1.0
+DEAL:: line 10: 1.0000
DEAL::not identity constrained: 151
-DEAL:: line 16: 1.0
+DEAL:: line 16: 1.0000
DEAL::not identity constrained: 152
-DEAL:: line 22: 1.0
+DEAL:: line 22: 1.0000
DEAL::not identity constrained: 155
-DEAL:: line 0: 0.38
-DEAL:: line 1: -0.12
-DEAL:: line 10: 0.75
+DEAL:: line 0: 0.37500
+DEAL:: line 1: -0.12500
+DEAL:: line 10: 0.75000
DEAL::not identity constrained: 158
-DEAL:: line 16: 0.38
-DEAL:: line 17: -0.12
-DEAL:: line 22: 0.75
+DEAL:: line 16: 0.37500
+DEAL:: line 17: -0.12500
+DEAL:: line 22: 0.75000
DEAL::not identity constrained: 159
-DEAL:: line 0: 0.38
-DEAL:: line 4: -0.12
-DEAL:: line 16: 0.75
+DEAL:: line 0: 0.37500
+DEAL:: line 4: -0.12500
+DEAL:: line 16: 0.75000
DEAL::not identity constrained: 160
-DEAL:: line 10: 0.38
-DEAL:: line 14: -0.12
-DEAL:: line 22: 0.75
+DEAL:: line 10: 0.37500
+DEAL:: line 14: -0.12500
+DEAL:: line 22: 0.75000
DEAL::not identity constrained: 163
-DEAL:: line 0: 0.14
-DEAL:: line 1: -0.047
-DEAL:: line 4: -0.047
-DEAL:: line 5: 0.016
-DEAL:: line 10: 0.28
-DEAL:: line 14: -0.094
-DEAL:: line 16: 0.28
-DEAL:: line 17: -0.094
-DEAL:: line 22: 0.56
+DEAL:: line 0: 0.14062
+DEAL:: line 1: -0.046875
+DEAL:: line 4: -0.046875
+DEAL:: line 5: 0.015625
+DEAL:: line 10: 0.28125
+DEAL:: line 14: -0.093750
+DEAL:: line 16: 0.28125
+DEAL:: line 17: -0.093750
+DEAL:: line 22: 0.56250
DEAL::not identity constrained: 167
-DEAL:: line 17: 1.0
+DEAL:: line 17: 1.0000
DEAL::not identity constrained: 169
-DEAL:: line 0: -0.12
-DEAL:: line 1: 0.38
-DEAL:: line 10: 0.75
+DEAL:: line 0: -0.12500
+DEAL:: line 1: 0.37500
+DEAL:: line 10: 0.75000
DEAL::not identity constrained: 171
-DEAL:: line 16: -0.12
-DEAL:: line 17: 0.38
-DEAL:: line 22: 0.75
+DEAL:: line 16: -0.12500
+DEAL:: line 17: 0.37500
+DEAL:: line 22: 0.75000
DEAL::not identity constrained: 172
-DEAL:: line 1: 0.38
-DEAL:: line 5: -0.12
-DEAL:: line 17: 0.75
+DEAL:: line 1: 0.37500
+DEAL:: line 5: -0.12500
+DEAL:: line 17: 0.75000
DEAL::not identity constrained: 174
-DEAL:: line 0: -0.047
-DEAL:: line 1: 0.14
-DEAL:: line 4: 0.016
-DEAL:: line 5: -0.047
-DEAL:: line 10: 0.28
-DEAL:: line 14: -0.094
-DEAL:: line 16: -0.094
-DEAL:: line 17: 0.28
-DEAL:: line 22: 0.56
+DEAL:: line 0: -0.046875
+DEAL:: line 1: 0.14062
+DEAL:: line 4: 0.015625
+DEAL:: line 5: -0.046875
+DEAL:: line 10: 0.28125
+DEAL:: line 14: -0.093750
+DEAL:: line 16: -0.093750
+DEAL:: line 17: 0.28125
+DEAL:: line 22: 0.56250
DEAL::not identity constrained: 178
-DEAL:: line 53: 1.0
+DEAL:: line 53: 1.0000
DEAL::not identity constrained: 179
-DEAL:: line 51: 1.0
+DEAL:: line 51: 1.0000
DEAL::not identity constrained: 180
-DEAL:: line 66: 1.0
+DEAL:: line 66: 1.0000
DEAL::not identity constrained: 181
-DEAL:: line 4: -0.12
-DEAL:: line 45: 0.38
-DEAL:: line 51: 0.75
+DEAL:: line 4: -0.12500
+DEAL:: line 45: 0.37500
+DEAL:: line 51: 0.75000
DEAL::not identity constrained: 182
-DEAL:: line 14: -0.12
-DEAL:: line 53: 0.38
-DEAL:: line 66: 0.75
+DEAL:: line 14: -0.12500
+DEAL:: line 53: 0.37500
+DEAL:: line 66: 0.75000
DEAL::not identity constrained: 183
-DEAL:: line 45: 0.38
-DEAL:: line 46: -0.12
-DEAL:: line 53: 0.75
+DEAL:: line 45: 0.37500
+DEAL:: line 46: -0.12500
+DEAL:: line 53: 0.75000
DEAL::not identity constrained: 184
-DEAL:: line 51: 0.38
-DEAL:: line 52: -0.12
-DEAL:: line 66: 0.75
+DEAL:: line 51: 0.37500
+DEAL:: line 52: -0.12500
+DEAL:: line 66: 0.75000
DEAL::not identity constrained: 193
-DEAL:: line 4: -0.047
-DEAL:: line 5: 0.016
-DEAL:: line 14: -0.094
-DEAL:: line 45: 0.14
-DEAL:: line 46: -0.047
-DEAL:: line 51: 0.28
-DEAL:: line 52: -0.094
-DEAL:: line 53: 0.28
-DEAL:: line 66: 0.56
+DEAL:: line 4: -0.046875
+DEAL:: line 5: 0.015625
+DEAL:: line 14: -0.093750
+DEAL:: line 45: 0.14062
+DEAL:: line 46: -0.046875
+DEAL:: line 51: 0.28125
+DEAL:: line 52: -0.093750
+DEAL:: line 53: 0.28125
+DEAL:: line 66: 0.56250
DEAL::not identity constrained: 195
-DEAL:: line 52: 1.0
+DEAL:: line 52: 1.0000
DEAL::not identity constrained: 196
-DEAL:: line 5: -0.12
-DEAL:: line 46: 0.38
-DEAL:: line 52: 0.75
+DEAL:: line 5: -0.12500
+DEAL:: line 46: 0.37500
+DEAL:: line 52: 0.75000
DEAL::not identity constrained: 197
-DEAL:: line 45: -0.12
-DEAL:: line 46: 0.38
-DEAL:: line 53: 0.75
+DEAL:: line 45: -0.12500
+DEAL:: line 46: 0.37500
+DEAL:: line 53: 0.75000
DEAL::not identity constrained: 198
-DEAL:: line 51: -0.12
-DEAL:: line 52: 0.38
-DEAL:: line 66: 0.75
+DEAL:: line 51: -0.12500
+DEAL:: line 52: 0.37500
+DEAL:: line 66: 0.75000
DEAL::not identity constrained: 204
-DEAL:: line 4: 0.016
-DEAL:: line 5: -0.047
-DEAL:: line 14: -0.094
-DEAL:: line 45: -0.047
-DEAL:: line 46: 0.14
-DEAL:: line 51: -0.094
-DEAL:: line 52: 0.28
-DEAL:: line 53: 0.28
-DEAL:: line 66: 0.56
+DEAL:: line 4: 0.015625
+DEAL:: line 5: -0.046875
+DEAL:: line 14: -0.093750
+DEAL:: line 45: -0.046875
+DEAL:: line 46: 0.14062
+DEAL:: line 51: -0.093750
+DEAL:: line 52: 0.28125
+DEAL:: line 53: 0.28125
+DEAL:: line 66: 0.56250
DEAL::not identity constrained: 206
-DEAL:: line 14: 1.0
+DEAL:: line 14: 1.0000
DEAL::not identity constrained: 207
-DEAL:: line 4: 0.38
-DEAL:: line 45: -0.12
-DEAL:: line 51: 0.75
+DEAL:: line 4: 0.37500
+DEAL:: line 45: -0.12500
+DEAL:: line 51: 0.75000
DEAL::not identity constrained: 208
-DEAL:: line 14: 0.38
-DEAL:: line 53: -0.12
-DEAL:: line 66: 0.75
+DEAL:: line 14: 0.37500
+DEAL:: line 53: -0.12500
+DEAL:: line 66: 0.75000
DEAL::not identity constrained: 209
-DEAL:: line 4: 0.38
-DEAL:: line 5: -0.12
-DEAL:: line 14: 0.75
+DEAL:: line 4: 0.37500
+DEAL:: line 5: -0.12500
+DEAL:: line 14: 0.75000
DEAL::not identity constrained: 210
-DEAL:: line 0: -0.12
-DEAL:: line 4: 0.38
-DEAL:: line 16: 0.75
+DEAL:: line 0: -0.12500
+DEAL:: line 4: 0.37500
+DEAL:: line 16: 0.75000
DEAL::not identity constrained: 211
-DEAL:: line 10: -0.12
-DEAL:: line 14: 0.38
-DEAL:: line 22: 0.75
+DEAL:: line 10: -0.12500
+DEAL:: line 14: 0.37500
+DEAL:: line 22: 0.75000
DEAL::not identity constrained: 214
-DEAL:: line 0: -0.047
-DEAL:: line 1: 0.016
-DEAL:: line 4: 0.14
-DEAL:: line 5: -0.047
-DEAL:: line 10: -0.094
-DEAL:: line 14: 0.28
-DEAL:: line 16: 0.28
-DEAL:: line 17: -0.094
-DEAL:: line 22: 0.56
+DEAL:: line 0: -0.046875
+DEAL:: line 1: 0.015625
+DEAL:: line 4: 0.14062
+DEAL:: line 5: -0.046875
+DEAL:: line 10: -0.093750
+DEAL:: line 14: 0.28125
+DEAL:: line 16: 0.28125
+DEAL:: line 17: -0.093750
+DEAL:: line 22: 0.56250
DEAL::not identity constrained: 215
-DEAL:: line 4: 0.14
-DEAL:: line 5: -0.047
-DEAL:: line 14: 0.28
-DEAL:: line 45: -0.047
-DEAL:: line 46: 0.016
-DEAL:: line 51: 0.28
-DEAL:: line 52: -0.094
-DEAL:: line 53: -0.094
-DEAL:: line 66: 0.56
+DEAL:: line 4: 0.14062
+DEAL:: line 5: -0.046875
+DEAL:: line 14: 0.28125
+DEAL:: line 45: -0.046875
+DEAL:: line 46: 0.015625
+DEAL:: line 51: 0.28125
+DEAL:: line 52: -0.093750
+DEAL:: line 53: -0.093750
+DEAL:: line 66: 0.56250
DEAL::not identity constrained: 217
-DEAL:: line 5: 0.38
-DEAL:: line 46: -0.12
-DEAL:: line 52: 0.75
+DEAL:: line 5: 0.37500
+DEAL:: line 46: -0.12500
+DEAL:: line 52: 0.75000
DEAL::not identity constrained: 218
-DEAL:: line 4: -0.12
-DEAL:: line 5: 0.38
-DEAL:: line 14: 0.75
+DEAL:: line 4: -0.12500
+DEAL:: line 5: 0.37500
+DEAL:: line 14: 0.75000
DEAL::not identity constrained: 219
-DEAL:: line 1: -0.12
-DEAL:: line 5: 0.38
-DEAL:: line 17: 0.75
+DEAL:: line 1: -0.12500
+DEAL:: line 5: 0.37500
+DEAL:: line 17: 0.75000
DEAL::not identity constrained: 221
-DEAL:: line 0: 0.016
-DEAL:: line 1: -0.047
-DEAL:: line 4: -0.047
-DEAL:: line 5: 0.14
-DEAL:: line 10: -0.094
-DEAL:: line 14: 0.28
-DEAL:: line 16: -0.094
-DEAL:: line 17: 0.28
-DEAL:: line 22: 0.56
+DEAL:: line 0: 0.015625
+DEAL:: line 1: -0.046875
+DEAL:: line 4: -0.046875
+DEAL:: line 5: 0.14062
+DEAL:: line 10: -0.093750
+DEAL:: line 14: 0.28125
+DEAL:: line 16: -0.093750
+DEAL:: line 17: 0.28125
+DEAL:: line 22: 0.56250
DEAL::not identity constrained: 222
-DEAL:: line 4: -0.047
-DEAL:: line 5: 0.14
-DEAL:: line 14: 0.28
-DEAL:: line 45: 0.016
-DEAL:: line 46: -0.047
-DEAL:: line 51: -0.094
-DEAL:: line 52: 0.28
-DEAL:: line 53: -0.094
-DEAL:: line 66: 0.56
+DEAL:: line 4: -0.046875
+DEAL:: line 5: 0.14062
+DEAL:: line 14: 0.28125
+DEAL:: line 45: 0.015625
+DEAL:: line 46: -0.046875
+DEAL:: line 51: -0.093750
+DEAL:: line 52: 0.28125
+DEAL:: line 53: -0.093750
+DEAL:: line 66: 0.56250
DEAL::not identity constrained: 260
-DEAL:: line 32: 1.0
+DEAL:: line 32: 1.0000
DEAL::not identity constrained: 261
-DEAL:: line 40: 1.0
+DEAL:: line 40: 1.0000
DEAL::not identity constrained: 263
-DEAL:: line 1: 0.38
-DEAL:: line 27: -0.12
-DEAL:: line 32: 0.75
+DEAL:: line 1: 0.37500
+DEAL:: line 27: -0.12500
+DEAL:: line 32: 0.75000
DEAL::not identity constrained: 265
-DEAL:: line 17: 0.38
-DEAL:: line 37: -0.12
-DEAL:: line 40: 0.75
+DEAL:: line 17: 0.37500
+DEAL:: line 37: -0.12500
+DEAL:: line 40: 0.75000
DEAL::not identity constrained: 266
-DEAL:: line 32: 0.38
-DEAL:: line 35: -0.12
-DEAL:: line 40: 0.75
+DEAL:: line 32: 0.37500
+DEAL:: line 35: -0.12500
+DEAL:: line 40: 0.75000
DEAL::not identity constrained: 268
-DEAL:: line 1: 0.14
-DEAL:: line 5: -0.047
-DEAL:: line 17: 0.28
-DEAL:: line 27: -0.047
-DEAL:: line 29: 0.016
-DEAL:: line 32: 0.28
-DEAL:: line 35: -0.094
-DEAL:: line 37: -0.094
-DEAL:: line 40: 0.56
+DEAL:: line 1: 0.14062
+DEAL:: line 5: -0.046875
+DEAL:: line 17: 0.28125
+DEAL:: line 27: -0.046875
+DEAL:: line 29: 0.015625
+DEAL:: line 32: 0.28125
+DEAL:: line 35: -0.093750
+DEAL:: line 37: -0.093750
+DEAL:: line 40: 0.56250
DEAL::not identity constrained: 272
-DEAL:: line 37: 1.0
+DEAL:: line 37: 1.0000
DEAL::not identity constrained: 274
-DEAL:: line 1: -0.12
-DEAL:: line 27: 0.38
-DEAL:: line 32: 0.75
+DEAL:: line 1: -0.12500
+DEAL:: line 27: 0.37500
+DEAL:: line 32: 0.75000
DEAL::not identity constrained: 276
-DEAL:: line 17: -0.12
-DEAL:: line 37: 0.38
-DEAL:: line 40: 0.75
+DEAL:: line 17: -0.12500
+DEAL:: line 37: 0.37500
+DEAL:: line 40: 0.75000
DEAL::not identity constrained: 277
-DEAL:: line 27: 0.38
-DEAL:: line 29: -0.12
-DEAL:: line 37: 0.75
+DEAL:: line 27: 0.37500
+DEAL:: line 29: -0.12500
+DEAL:: line 37: 0.75000
DEAL::not identity constrained: 279
-DEAL:: line 1: -0.047
-DEAL:: line 5: 0.016
-DEAL:: line 17: -0.094
-DEAL:: line 27: 0.14
-DEAL:: line 29: -0.047
-DEAL:: line 32: 0.28
-DEAL:: line 35: -0.094
-DEAL:: line 37: 0.28
-DEAL:: line 40: 0.56
+DEAL:: line 1: -0.046875
+DEAL:: line 5: 0.015625
+DEAL:: line 17: -0.093750
+DEAL:: line 27: 0.14062
+DEAL:: line 29: -0.046875
+DEAL:: line 32: 0.28125
+DEAL:: line 35: -0.093750
+DEAL:: line 37: 0.28125
+DEAL:: line 40: 0.56250
DEAL::not identity constrained: 283
-DEAL:: line 73: 1.0
+DEAL:: line 73: 1.0000
DEAL::not identity constrained: 284
-DEAL:: line 82: 1.0
+DEAL:: line 82: 1.0000
DEAL::not identity constrained: 285
-DEAL:: line 35: -0.12
-DEAL:: line 73: 0.38
-DEAL:: line 82: 0.75
+DEAL:: line 35: -0.12500
+DEAL:: line 73: 0.37500
+DEAL:: line 82: 0.75000
DEAL::not identity constrained: 286
-DEAL:: line 46: 0.38
-DEAL:: line 69: -0.12
-DEAL:: line 73: 0.75
+DEAL:: line 46: 0.37500
+DEAL:: line 69: -0.12500
+DEAL:: line 73: 0.75000
DEAL::not identity constrained: 287
-DEAL:: line 52: 0.38
-DEAL:: line 72: -0.12
-DEAL:: line 82: 0.75
+DEAL:: line 52: 0.37500
+DEAL:: line 72: -0.12500
+DEAL:: line 82: 0.75000
DEAL::not identity constrained: 293
-DEAL:: line 5: -0.047
-DEAL:: line 29: 0.016
-DEAL:: line 35: -0.094
-DEAL:: line 46: 0.14
-DEAL:: line 52: 0.28
-DEAL:: line 69: -0.047
-DEAL:: line 72: -0.094
-DEAL:: line 73: 0.28
-DEAL:: line 82: 0.56
+DEAL:: line 5: -0.046875
+DEAL:: line 29: 0.015625
+DEAL:: line 35: -0.093750
+DEAL:: line 46: 0.14062
+DEAL:: line 52: 0.28125
+DEAL:: line 69: -0.046875
+DEAL:: line 72: -0.093750
+DEAL:: line 73: 0.28125
+DEAL:: line 82: 0.56250
DEAL::not identity constrained: 295
-DEAL:: line 72: 1.0
+DEAL:: line 72: 1.0000
DEAL::not identity constrained: 296
-DEAL:: line 29: -0.12
-DEAL:: line 69: 0.38
-DEAL:: line 72: 0.75
+DEAL:: line 29: -0.12500
+DEAL:: line 69: 0.37500
+DEAL:: line 72: 0.75000
DEAL::not identity constrained: 297
-DEAL:: line 46: -0.12
-DEAL:: line 69: 0.38
-DEAL:: line 73: 0.75
+DEAL:: line 46: -0.12500
+DEAL:: line 69: 0.37500
+DEAL:: line 73: 0.75000
DEAL::not identity constrained: 298
-DEAL:: line 52: -0.12
-DEAL:: line 72: 0.38
-DEAL:: line 82: 0.75
+DEAL:: line 52: -0.12500
+DEAL:: line 72: 0.37500
+DEAL:: line 82: 0.75000
DEAL::not identity constrained: 304
-DEAL:: line 5: 0.016
-DEAL:: line 29: -0.047
-DEAL:: line 35: -0.094
-DEAL:: line 46: -0.047
-DEAL:: line 52: -0.094
-DEAL:: line 69: 0.14
-DEAL:: line 72: 0.28
-DEAL:: line 73: 0.28
-DEAL:: line 82: 0.56
+DEAL:: line 5: 0.015625
+DEAL:: line 29: -0.046875
+DEAL:: line 35: -0.093750
+DEAL:: line 46: -0.046875
+DEAL:: line 52: -0.093750
+DEAL:: line 69: 0.14062
+DEAL:: line 72: 0.28125
+DEAL:: line 73: 0.28125
+DEAL:: line 82: 0.56250
DEAL::not identity constrained: 306
-DEAL:: line 35: 1.0
+DEAL:: line 35: 1.0000
DEAL::not identity constrained: 307
-DEAL:: line 35: 0.38
-DEAL:: line 73: -0.12
-DEAL:: line 82: 0.75
+DEAL:: line 35: 0.37500
+DEAL:: line 73: -0.12500
+DEAL:: line 82: 0.75000
DEAL::not identity constrained: 308
-DEAL:: line 5: 0.38
-DEAL:: line 29: -0.12
-DEAL:: line 35: 0.75
+DEAL:: line 5: 0.37500
+DEAL:: line 29: -0.12500
+DEAL:: line 35: 0.75000
DEAL::not identity constrained: 309
-DEAL:: line 32: -0.12
-DEAL:: line 35: 0.38
-DEAL:: line 40: 0.75
+DEAL:: line 32: -0.12500
+DEAL:: line 35: 0.37500
+DEAL:: line 40: 0.75000
DEAL::not identity constrained: 311
-DEAL:: line 1: -0.047
-DEAL:: line 5: 0.14
-DEAL:: line 17: 0.28
-DEAL:: line 27: 0.016
-DEAL:: line 29: -0.047
-DEAL:: line 32: -0.094
-DEAL:: line 35: 0.28
-DEAL:: line 37: -0.094
-DEAL:: line 40: 0.56
+DEAL:: line 1: -0.046875
+DEAL:: line 5: 0.14062
+DEAL:: line 17: 0.28125
+DEAL:: line 27: 0.015625
+DEAL:: line 29: -0.046875
+DEAL:: line 32: -0.093750
+DEAL:: line 35: 0.28125
+DEAL:: line 37: -0.093750
+DEAL:: line 40: 0.56250
DEAL::not identity constrained: 312
-DEAL:: line 5: 0.14
-DEAL:: line 29: -0.047
-DEAL:: line 35: 0.28
-DEAL:: line 46: -0.047
-DEAL:: line 52: 0.28
-DEAL:: line 69: 0.016
-DEAL:: line 72: -0.094
-DEAL:: line 73: -0.094
-DEAL:: line 82: 0.56
+DEAL:: line 5: 0.14062
+DEAL:: line 29: -0.046875
+DEAL:: line 35: 0.28125
+DEAL:: line 46: -0.046875
+DEAL:: line 52: 0.28125
+DEAL:: line 69: 0.015625
+DEAL:: line 72: -0.093750
+DEAL:: line 73: -0.093750
+DEAL:: line 82: 0.56250
DEAL::not identity constrained: 314
-DEAL:: line 29: 0.38
-DEAL:: line 69: -0.12
-DEAL:: line 72: 0.75
+DEAL:: line 29: 0.37500
+DEAL:: line 69: -0.12500
+DEAL:: line 72: 0.75000
DEAL::not identity constrained: 315
-DEAL:: line 5: -0.12
-DEAL:: line 29: 0.38
-DEAL:: line 35: 0.75
+DEAL:: line 5: -0.12500
+DEAL:: line 29: 0.37500
+DEAL:: line 35: 0.75000
DEAL::not identity constrained: 316
-DEAL:: line 27: -0.12
-DEAL:: line 29: 0.38
-DEAL:: line 37: 0.75
+DEAL:: line 27: -0.12500
+DEAL:: line 29: 0.37500
+DEAL:: line 37: 0.75000
DEAL::not identity constrained: 318
-DEAL:: line 1: 0.016
-DEAL:: line 5: -0.047
-DEAL:: line 17: -0.094
-DEAL:: line 27: -0.047
-DEAL:: line 29: 0.14
-DEAL:: line 32: -0.094
-DEAL:: line 35: 0.28
-DEAL:: line 37: 0.28
-DEAL:: line 40: 0.56
+DEAL:: line 1: 0.015625
+DEAL:: line 5: -0.046875
+DEAL:: line 17: -0.093750
+DEAL:: line 27: -0.046875
+DEAL:: line 29: 0.14062
+DEAL:: line 32: -0.093750
+DEAL:: line 35: 0.28125
+DEAL:: line 37: 0.28125
+DEAL:: line 40: 0.56250
DEAL::not identity constrained: 319
-DEAL:: line 5: -0.047
-DEAL:: line 29: 0.14
-DEAL:: line 35: 0.28
-DEAL:: line 46: 0.016
-DEAL:: line 52: -0.094
-DEAL:: line 69: -0.047
-DEAL:: line 72: 0.28
-DEAL:: line 73: -0.094
-DEAL:: line 82: 0.56
+DEAL:: line 5: -0.046875
+DEAL:: line 29: 0.14062
+DEAL:: line 35: 0.28125
+DEAL:: line 46: 0.015625
+DEAL:: line 52: -0.093750
+DEAL:: line 69: -0.046875
+DEAL:: line 72: 0.28125
+DEAL:: line 73: -0.093750
+DEAL:: line 82: 0.56250
DEAL::Checking Q3 in 1d:
DEAL::Checking Q3 in 2d:
DEAL::10
DEAL::10
DEAL::11111111111111111111111111111111111111111111111111111111111111011111101111111111111111111111111111111110111111011111
DEAL::not identity constrained: 56
-DEAL:: line 0: -0.062
-DEAL:: line 1: -0.062
-DEAL:: line 8: 0.56
-DEAL:: line 9: 0.56
+DEAL:: line 0: -0.062500
+DEAL:: line 1: -0.062500
+DEAL:: line 8: 0.56250
+DEAL:: line 9: 0.56250
DEAL::not identity constrained: 61
-DEAL:: line 0: 0.31
-DEAL:: line 1: 0.062
-DEAL:: line 8: 0.94
-DEAL:: line 9: -0.31
+DEAL:: line 0: 0.31250
+DEAL:: line 1: 0.062500
+DEAL:: line 8: 0.93750
+DEAL:: line 9: -0.31250
DEAL::not identity constrained: 62
-DEAL:: line 8: 1.0
+DEAL:: line 8: 1.0000
DEAL::not identity constrained: 69
-DEAL:: line 9: 1.0
+DEAL:: line 9: 1.0000
DEAL::not identity constrained: 70
-DEAL:: line 0: 0.063
-DEAL:: line 1: 0.31
-DEAL:: line 8: -0.31
-DEAL:: line 9: 0.94
+DEAL:: line 0: 0.062500
+DEAL:: line 1: 0.31250
+DEAL:: line 8: -0.31250
+DEAL:: line 9: 0.93750
DEAL::not identity constrained: 99
-DEAL:: line 1: -0.062
-DEAL:: line 16: -0.062
-DEAL:: line 20: 0.56
-DEAL:: line 21: 0.56
+DEAL:: line 1: -0.062500
+DEAL:: line 16: -0.062500
+DEAL:: line 20: 0.56250
+DEAL:: line 21: 0.56250
DEAL::not identity constrained: 102
-DEAL:: line 1: 0.31
-DEAL:: line 16: 0.062
-DEAL:: line 20: 0.94
-DEAL:: line 21: -0.31
+DEAL:: line 1: 0.31250
+DEAL:: line 16: 0.062500
+DEAL:: line 20: 0.93750
+DEAL:: line 21: -0.31250
DEAL::not identity constrained: 103
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::not identity constrained: 110
-DEAL:: line 21: 1.0
+DEAL:: line 21: 1.0000
DEAL::not identity constrained: 111
-DEAL:: line 1: 0.063
-DEAL:: line 16: 0.31
-DEAL:: line 20: -0.31
-DEAL:: line 21: 0.94
+DEAL:: line 1: 0.062500
+DEAL:: line 16: 0.31250
+DEAL:: line 20: -0.31250
+DEAL:: line 21: 0.93750
DEAL::Checking Q3 in 3d:
DEAL::160
DEAL::16
DEAL::160
DEAL::11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111101111111111111011111111111111111110111111011111011111111111111111111110111011111111111111111111111111111011111111110011111111111111111111101111111111011110011111111111110110111111111101010111110111011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111111111101111111111111111111011111101111101111111111111111111111101111111111111111111110111111111100111111111111111111111011111111111110111111110110111111111101010111110111011111111111
DEAL::not identity constrained: 392
-DEAL:: line 0: -0.062
-DEAL:: line 1: -0.062
-DEAL:: line 12: 0.56
-DEAL:: line 13: 0.56
+DEAL:: line 0: -0.062500
+DEAL:: line 1: -0.062500
+DEAL:: line 12: 0.56250
+DEAL:: line 13: 0.56250
DEAL::not identity constrained: 393
-DEAL:: line 0: -0.062
-DEAL:: line 4: -0.062
-DEAL:: line 24: 0.56
-DEAL:: line 25: 0.56
+DEAL:: line 0: -0.062500
+DEAL:: line 4: -0.062500
+DEAL:: line 24: 0.56250
+DEAL:: line 25: 0.56250
DEAL::not identity constrained: 394
-DEAL:: line 0: 0.0039
-DEAL:: line 1: 0.0039
-DEAL:: line 4: 0.0039
-DEAL:: line 5: 0.0039
-DEAL:: line 12: -0.035
-DEAL:: line 13: -0.035
-DEAL:: line 20: -0.035
-DEAL:: line 21: -0.035
-DEAL:: line 24: -0.035
-DEAL:: line 25: -0.035
-DEAL:: line 26: -0.035
-DEAL:: line 27: -0.035
-DEAL:: line 40: 0.32
-DEAL:: line 41: 0.32
-DEAL:: line 42: 0.32
-DEAL:: line 43: 0.32
+DEAL:: line 0: 0.0039062
+DEAL:: line 1: 0.0039062
+DEAL:: line 4: 0.0039062
+DEAL:: line 5: 0.0039062
+DEAL:: line 12: -0.035156
+DEAL:: line 13: -0.035156
+DEAL:: line 20: -0.035156
+DEAL:: line 21: -0.035156
+DEAL:: line 24: -0.035156
+DEAL:: line 25: -0.035156
+DEAL:: line 26: -0.035156
+DEAL:: line 27: -0.035156
+DEAL:: line 40: 0.31641
+DEAL:: line 41: 0.31641
+DEAL:: line 42: 0.31641
+DEAL:: line 43: 0.31641
DEAL::not identity constrained: 399
-DEAL:: line 0: 0.31
-DEAL:: line 1: 0.062
-DEAL:: line 12: 0.94
-DEAL:: line 13: -0.31
+DEAL:: line 0: 0.31250
+DEAL:: line 1: 0.062500
+DEAL:: line 12: 0.93750
+DEAL:: line 13: -0.31250
DEAL::not identity constrained: 400
-DEAL:: line 12: 1.0
+DEAL:: line 12: 1.0000
DEAL::not identity constrained: 405
-DEAL:: line 0: -0.020
-DEAL:: line 1: -0.0039
-DEAL:: line 4: -0.020
-DEAL:: line 5: -0.0039
-DEAL:: line 12: -0.059
-DEAL:: line 13: 0.020
-DEAL:: line 20: -0.059
-DEAL:: line 21: 0.020
-DEAL:: line 24: 0.18
-DEAL:: line 25: 0.18
-DEAL:: line 26: 0.035
-DEAL:: line 27: 0.035
-DEAL:: line 40: 0.53
-DEAL:: line 41: 0.53
-DEAL:: line 42: -0.18
-DEAL:: line 43: -0.18
+DEAL:: line 0: -0.019531
+DEAL:: line 1: -0.0039062
+DEAL:: line 4: -0.019531
+DEAL:: line 5: -0.0039062
+DEAL:: line 12: -0.058594
+DEAL:: line 13: 0.019531
+DEAL:: line 20: -0.058594
+DEAL:: line 21: 0.019531
+DEAL:: line 24: 0.17578
+DEAL:: line 25: 0.17578
+DEAL:: line 26: 0.035156
+DEAL:: line 27: 0.035156
+DEAL:: line 40: 0.52734
+DEAL:: line 41: 0.52734
+DEAL:: line 42: -0.17578
+DEAL:: line 43: -0.17578
DEAL::not identity constrained: 406
-DEAL:: line 12: -0.062
-DEAL:: line 20: -0.062
-DEAL:: line 40: 0.56
-DEAL:: line 41: 0.56
+DEAL:: line 12: -0.062500
+DEAL:: line 20: -0.062500
+DEAL:: line 40: 0.56250
+DEAL:: line 41: 0.56250
DEAL::not identity constrained: 407
-DEAL:: line 0: 0.31
-DEAL:: line 4: 0.062
-DEAL:: line 24: 0.94
-DEAL:: line 25: -0.31
+DEAL:: line 0: 0.31250
+DEAL:: line 4: 0.062500
+DEAL:: line 24: 0.93750
+DEAL:: line 25: -0.31250
DEAL::not identity constrained: 408
-DEAL:: line 24: 1.0
+DEAL:: line 24: 1.0000
DEAL::not identity constrained: 409
-DEAL:: line 0: -0.020
-DEAL:: line 1: -0.020
-DEAL:: line 4: -0.0039
-DEAL:: line 5: -0.0039
-DEAL:: line 12: 0.18
-DEAL:: line 13: 0.18
-DEAL:: line 20: 0.035
-DEAL:: line 21: 0.035
-DEAL:: line 24: -0.059
-DEAL:: line 25: 0.020
-DEAL:: line 26: -0.059
-DEAL:: line 27: 0.020
-DEAL:: line 40: 0.53
-DEAL:: line 41: -0.18
-DEAL:: line 42: 0.53
-DEAL:: line 43: -0.18
+DEAL:: line 0: -0.019531
+DEAL:: line 1: -0.019531
+DEAL:: line 4: -0.0039062
+DEAL:: line 5: -0.0039062
+DEAL:: line 12: 0.17578
+DEAL:: line 13: 0.17578
+DEAL:: line 20: 0.035156
+DEAL:: line 21: 0.035156
+DEAL:: line 24: -0.058594
+DEAL:: line 25: 0.019531
+DEAL:: line 26: -0.058594
+DEAL:: line 27: 0.019531
+DEAL:: line 40: 0.52734
+DEAL:: line 41: -0.17578
+DEAL:: line 42: 0.52734
+DEAL:: line 43: -0.17578
DEAL::not identity constrained: 410
-DEAL:: line 24: -0.062
-DEAL:: line 26: -0.062
-DEAL:: line 40: 0.56
-DEAL:: line 42: 0.56
+DEAL:: line 24: -0.062500
+DEAL:: line 26: -0.062500
+DEAL:: line 40: 0.56250
+DEAL:: line 42: 0.56250
DEAL::not identity constrained: 419
-DEAL:: line 0: 0.098
-DEAL:: line 1: 0.020
-DEAL:: line 4: 0.020
-DEAL:: line 5: 0.0039
-DEAL:: line 12: 0.29
-DEAL:: line 13: -0.098
-DEAL:: line 20: 0.059
-DEAL:: line 21: -0.020
-DEAL:: line 24: 0.29
-DEAL:: line 25: -0.098
-DEAL:: line 26: 0.059
-DEAL:: line 27: -0.020
-DEAL:: line 40: 0.88
-DEAL:: line 41: -0.29
-DEAL:: line 42: -0.29
-DEAL:: line 43: 0.098
+DEAL:: line 0: 0.097656
+DEAL:: line 1: 0.019531
+DEAL:: line 4: 0.019531
+DEAL:: line 5: 0.0039062
+DEAL:: line 12: 0.29297
+DEAL:: line 13: -0.097656
+DEAL:: line 20: 0.058594
+DEAL:: line 21: -0.019531
+DEAL:: line 24: 0.29297
+DEAL:: line 25: -0.097656
+DEAL:: line 26: 0.058594
+DEAL:: line 27: -0.019531
+DEAL:: line 40: 0.87891
+DEAL:: line 41: -0.29297
+DEAL:: line 42: -0.29297
+DEAL:: line 43: 0.097656
DEAL::not identity constrained: 420
-DEAL:: line 24: 0.31
-DEAL:: line 26: 0.062
-DEAL:: line 40: 0.94
-DEAL:: line 42: -0.31
+DEAL:: line 24: 0.31250
+DEAL:: line 26: 0.062500
+DEAL:: line 40: 0.93750
+DEAL:: line 42: -0.31250
DEAL::not identity constrained: 421
-DEAL:: line 12: 0.31
-DEAL:: line 20: 0.062
-DEAL:: line 40: 0.94
-DEAL:: line 41: -0.31
+DEAL:: line 12: 0.31250
+DEAL:: line 20: 0.062500
+DEAL:: line 40: 0.93750
+DEAL:: line 41: -0.31250
DEAL::not identity constrained: 422
-DEAL:: line 40: 1.0
+DEAL:: line 40: 1.0000
DEAL::not identity constrained: 439
-DEAL:: line 1: -0.062
-DEAL:: line 5: -0.062
-DEAL:: line 26: 0.56
-DEAL:: line 27: 0.56
+DEAL:: line 1: -0.062500
+DEAL:: line 5: -0.062500
+DEAL:: line 26: 0.56250
+DEAL:: line 27: 0.56250
DEAL::not identity constrained: 442
-DEAL:: line 13: 1.0
+DEAL:: line 13: 1.0000
DEAL::not identity constrained: 443
-DEAL:: line 0: 0.063
-DEAL:: line 1: 0.31
-DEAL:: line 12: -0.31
-DEAL:: line 13: 0.94
+DEAL:: line 0: 0.062500
+DEAL:: line 1: 0.31250
+DEAL:: line 12: -0.31250
+DEAL:: line 13: 0.93750
DEAL::not identity constrained: 446
-DEAL:: line 13: -0.062
-DEAL:: line 21: -0.062
-DEAL:: line 42: 0.56
-DEAL:: line 43: 0.56
+DEAL:: line 13: -0.062500
+DEAL:: line 21: -0.062500
+DEAL:: line 42: 0.56250
+DEAL:: line 43: 0.56250
DEAL::not identity constrained: 447
-DEAL:: line 0: -0.0039
-DEAL:: line 1: -0.020
-DEAL:: line 4: -0.0039
-DEAL:: line 5: -0.020
-DEAL:: line 12: 0.020
-DEAL:: line 13: -0.059
-DEAL:: line 20: 0.020
-DEAL:: line 21: -0.059
-DEAL:: line 24: 0.035
-DEAL:: line 25: 0.035
-DEAL:: line 26: 0.18
-DEAL:: line 27: 0.18
-DEAL:: line 40: -0.18
-DEAL:: line 41: -0.18
-DEAL:: line 42: 0.53
-DEAL:: line 43: 0.53
+DEAL:: line 0: -0.0039063
+DEAL:: line 1: -0.019531
+DEAL:: line 4: -0.0039063
+DEAL:: line 5: -0.019531
+DEAL:: line 12: 0.019531
+DEAL:: line 13: -0.058594
+DEAL:: line 20: 0.019531
+DEAL:: line 21: -0.058594
+DEAL:: line 24: 0.035156
+DEAL:: line 25: 0.035156
+DEAL:: line 26: 0.17578
+DEAL:: line 27: 0.17578
+DEAL:: line 40: -0.17578
+DEAL:: line 41: -0.17578
+DEAL:: line 42: 0.52734
+DEAL:: line 43: 0.52734
DEAL::not identity constrained: 448
-DEAL:: line 1: 0.31
-DEAL:: line 5: 0.062
-DEAL:: line 26: 0.94
-DEAL:: line 27: -0.31
+DEAL:: line 1: 0.31250
+DEAL:: line 5: 0.062500
+DEAL:: line 26: 0.93750
+DEAL:: line 27: -0.31250
DEAL::not identity constrained: 449
-DEAL:: line 26: 1.0
+DEAL:: line 26: 1.0000
DEAL::not identity constrained: 454
-DEAL:: line 13: 0.31
-DEAL:: line 21: 0.062
-DEAL:: line 42: 0.94
-DEAL:: line 43: -0.31
+DEAL:: line 13: 0.31250
+DEAL:: line 21: 0.062500
+DEAL:: line 42: 0.93750
+DEAL:: line 43: -0.31250
DEAL::not identity constrained: 455
-DEAL:: line 42: 1.0
+DEAL:: line 42: 1.0000
DEAL::not identity constrained: 456
-DEAL:: line 0: 0.020
-DEAL:: line 1: 0.098
-DEAL:: line 4: 0.0039
-DEAL:: line 5: 0.020
-DEAL:: line 12: -0.098
-DEAL:: line 13: 0.29
-DEAL:: line 20: -0.020
-DEAL:: line 21: 0.059
-DEAL:: line 24: 0.059
-DEAL:: line 25: -0.020
-DEAL:: line 26: 0.29
-DEAL:: line 27: -0.098
-DEAL:: line 40: -0.29
-DEAL:: line 41: 0.098
-DEAL:: line 42: 0.88
-DEAL:: line 43: -0.29
+DEAL:: line 0: 0.019531
+DEAL:: line 1: 0.097656
+DEAL:: line 4: 0.0039063
+DEAL:: line 5: 0.019531
+DEAL:: line 12: -0.097656
+DEAL:: line 13: 0.29297
+DEAL:: line 20: -0.019531
+DEAL:: line 21: 0.058594
+DEAL:: line 24: 0.058594
+DEAL:: line 25: -0.019531
+DEAL:: line 26: 0.29297
+DEAL:: line 27: -0.097656
+DEAL:: line 40: -0.29297
+DEAL:: line 41: 0.097656
+DEAL:: line 42: 0.87891
+DEAL:: line 43: -0.29297
DEAL::not identity constrained: 457
-DEAL:: line 24: 0.063
-DEAL:: line 26: 0.31
-DEAL:: line 40: -0.31
-DEAL:: line 42: 0.94
+DEAL:: line 24: 0.062500
+DEAL:: line 26: 0.31250
+DEAL:: line 40: -0.31250
+DEAL:: line 42: 0.93750
DEAL::not identity constrained: 474
-DEAL:: line 112: -0.062
-DEAL:: line 113: -0.062
-DEAL:: line 122: 0.56
-DEAL:: line 123: 0.56
+DEAL:: line 112: -0.062500
+DEAL:: line 113: -0.062500
+DEAL:: line 122: 0.56250
+DEAL:: line 123: 0.56250
DEAL::not identity constrained: 475
-DEAL:: line 4: -0.062
-DEAL:: line 112: -0.062
-DEAL:: line 118: 0.56
-DEAL:: line 119: 0.56
+DEAL:: line 4: -0.062500
+DEAL:: line 112: -0.062500
+DEAL:: line 118: 0.56250
+DEAL:: line 119: 0.56250
DEAL::not identity constrained: 476
-DEAL:: line 4: 0.0039
-DEAL:: line 5: 0.0039
-DEAL:: line 20: -0.035
-DEAL:: line 21: -0.035
-DEAL:: line 112: 0.0039
-DEAL:: line 113: 0.0039
-DEAL:: line 118: -0.035
-DEAL:: line 119: -0.035
-DEAL:: line 120: -0.035
-DEAL:: line 121: -0.035
-DEAL:: line 122: -0.035
-DEAL:: line 123: -0.035
-DEAL:: line 156: 0.32
-DEAL:: line 157: 0.32
-DEAL:: line 158: 0.32
-DEAL:: line 159: 0.32
+DEAL:: line 4: 0.0039062
+DEAL:: line 5: 0.0039062
+DEAL:: line 20: -0.035156
+DEAL:: line 21: -0.035156
+DEAL:: line 112: 0.0039062
+DEAL:: line 113: 0.0039062
+DEAL:: line 118: -0.035156
+DEAL:: line 119: -0.035156
+DEAL:: line 120: -0.035156
+DEAL:: line 121: -0.035156
+DEAL:: line 122: -0.035156
+DEAL:: line 123: -0.035156
+DEAL:: line 156: 0.31641
+DEAL:: line 157: 0.31641
+DEAL:: line 158: 0.31641
+DEAL:: line 159: 0.31641
DEAL::not identity constrained: 477
-DEAL:: line 4: 0.062
-DEAL:: line 112: 0.31
-DEAL:: line 118: 0.94
-DEAL:: line 119: -0.31
+DEAL:: line 4: 0.062500
+DEAL:: line 112: 0.31250
+DEAL:: line 118: 0.93750
+DEAL:: line 119: -0.31250
DEAL::not identity constrained: 478
-DEAL:: line 118: 1.0
+DEAL:: line 118: 1.0000
DEAL::not identity constrained: 479
-DEAL:: line 4: -0.0039
-DEAL:: line 5: -0.0039
-DEAL:: line 20: 0.035
-DEAL:: line 21: 0.035
-DEAL:: line 112: -0.020
-DEAL:: line 113: -0.020
-DEAL:: line 118: -0.059
-DEAL:: line 119: 0.020
-DEAL:: line 120: -0.059
-DEAL:: line 121: 0.020
-DEAL:: line 122: 0.18
-DEAL:: line 123: 0.18
-DEAL:: line 156: 0.53
-DEAL:: line 157: 0.53
-DEAL:: line 158: -0.18
-DEAL:: line 159: -0.18
+DEAL:: line 4: -0.0039062
+DEAL:: line 5: -0.0039062
+DEAL:: line 20: 0.035156
+DEAL:: line 21: 0.035156
+DEAL:: line 112: -0.019531
+DEAL:: line 113: -0.019531
+DEAL:: line 118: -0.058594
+DEAL:: line 119: 0.019531
+DEAL:: line 120: -0.058594
+DEAL:: line 121: 0.019531
+DEAL:: line 122: 0.17578
+DEAL:: line 123: 0.17578
+DEAL:: line 156: 0.52734
+DEAL:: line 157: 0.52734
+DEAL:: line 158: -0.17578
+DEAL:: line 159: -0.17578
DEAL::not identity constrained: 480
-DEAL:: line 118: -0.062
-DEAL:: line 120: -0.062
-DEAL:: line 156: 0.56
-DEAL:: line 157: 0.56
+DEAL:: line 118: -0.062500
+DEAL:: line 120: -0.062500
+DEAL:: line 156: 0.56250
+DEAL:: line 157: 0.56250
DEAL::not identity constrained: 481
-DEAL:: line 112: 0.31
-DEAL:: line 113: 0.062
-DEAL:: line 122: 0.94
-DEAL:: line 123: -0.31
+DEAL:: line 112: 0.31250
+DEAL:: line 113: 0.062500
+DEAL:: line 122: 0.93750
+DEAL:: line 123: -0.31250
DEAL::not identity constrained: 482
-DEAL:: line 122: 1.0
+DEAL:: line 122: 1.0000
DEAL::not identity constrained: 483
-DEAL:: line 4: -0.020
-DEAL:: line 5: -0.0039
-DEAL:: line 20: -0.059
-DEAL:: line 21: 0.020
-DEAL:: line 112: -0.020
-DEAL:: line 113: -0.0039
-DEAL:: line 118: 0.18
-DEAL:: line 119: 0.18
-DEAL:: line 120: 0.035
-DEAL:: line 121: 0.035
-DEAL:: line 122: -0.059
-DEAL:: line 123: 0.020
-DEAL:: line 156: 0.53
-DEAL:: line 157: -0.18
-DEAL:: line 158: 0.53
-DEAL:: line 159: -0.18
+DEAL:: line 4: -0.019531
+DEAL:: line 5: -0.0039062
+DEAL:: line 20: -0.058594
+DEAL:: line 21: 0.019531
+DEAL:: line 112: -0.019531
+DEAL:: line 113: -0.0039062
+DEAL:: line 118: 0.17578
+DEAL:: line 119: 0.17578
+DEAL:: line 120: 0.035156
+DEAL:: line 121: 0.035156
+DEAL:: line 122: -0.058594
+DEAL:: line 123: 0.019531
+DEAL:: line 156: 0.52734
+DEAL:: line 157: -0.17578
+DEAL:: line 158: 0.52734
+DEAL:: line 159: -0.17578
DEAL::not identity constrained: 484
-DEAL:: line 20: -0.062
-DEAL:: line 122: -0.062
-DEAL:: line 156: 0.56
-DEAL:: line 158: 0.56
+DEAL:: line 20: -0.062500
+DEAL:: line 122: -0.062500
+DEAL:: line 156: 0.56250
+DEAL:: line 158: 0.56250
DEAL::not identity constrained: 509
-DEAL:: line 4: 0.020
-DEAL:: line 5: 0.0039
-DEAL:: line 20: 0.059
-DEAL:: line 21: -0.020
-DEAL:: line 112: 0.098
-DEAL:: line 113: 0.020
-DEAL:: line 118: 0.29
-DEAL:: line 119: -0.098
-DEAL:: line 120: 0.059
-DEAL:: line 121: -0.020
-DEAL:: line 122: 0.29
-DEAL:: line 123: -0.098
-DEAL:: line 156: 0.88
-DEAL:: line 157: -0.29
-DEAL:: line 158: -0.29
-DEAL:: line 159: 0.098
+DEAL:: line 4: 0.019531
+DEAL:: line 5: 0.0039062
+DEAL:: line 20: 0.058594
+DEAL:: line 21: -0.019531
+DEAL:: line 112: 0.097656
+DEAL:: line 113: 0.019531
+DEAL:: line 118: 0.29297
+DEAL:: line 119: -0.097656
+DEAL:: line 120: 0.058594
+DEAL:: line 121: -0.019531
+DEAL:: line 122: 0.29297
+DEAL:: line 123: -0.097656
+DEAL:: line 156: 0.87891
+DEAL:: line 157: -0.29297
+DEAL:: line 158: -0.29297
+DEAL:: line 159: 0.097656
DEAL::not identity constrained: 510
-DEAL:: line 20: 0.062
-DEAL:: line 122: 0.31
-DEAL:: line 156: 0.94
-DEAL:: line 158: -0.31
+DEAL:: line 20: 0.062500
+DEAL:: line 122: 0.31250
+DEAL:: line 156: 0.93750
+DEAL:: line 158: -0.31250
DEAL::not identity constrained: 511
-DEAL:: line 118: 0.31
-DEAL:: line 120: 0.062
-DEAL:: line 156: 0.94
-DEAL:: line 157: -0.31
+DEAL:: line 118: 0.31250
+DEAL:: line 120: 0.062500
+DEAL:: line 156: 0.93750
+DEAL:: line 157: -0.31250
DEAL::not identity constrained: 512
-DEAL:: line 156: 1.0
+DEAL:: line 156: 1.0000
DEAL::not identity constrained: 521
-DEAL:: line 5: -0.062
-DEAL:: line 113: -0.062
-DEAL:: line 120: 0.56
-DEAL:: line 121: 0.56
+DEAL:: line 5: -0.062500
+DEAL:: line 113: -0.062500
+DEAL:: line 120: 0.56250
+DEAL:: line 121: 0.56250
DEAL::not identity constrained: 522
-DEAL:: line 5: 0.062
-DEAL:: line 113: 0.31
-DEAL:: line 120: 0.94
-DEAL:: line 121: -0.31
+DEAL:: line 5: 0.062500
+DEAL:: line 113: 0.31250
+DEAL:: line 120: 0.93750
+DEAL:: line 121: -0.31250
DEAL::not identity constrained: 523
-DEAL:: line 120: 1.0
+DEAL:: line 120: 1.0000
DEAL::not identity constrained: 524
-DEAL:: line 123: 1.0
+DEAL:: line 123: 1.0000
DEAL::not identity constrained: 525
-DEAL:: line 112: 0.063
-DEAL:: line 113: 0.31
-DEAL:: line 122: -0.31
-DEAL:: line 123: 0.94
+DEAL:: line 112: 0.062500
+DEAL:: line 113: 0.31250
+DEAL:: line 122: -0.31250
+DEAL:: line 123: 0.93750
DEAL::not identity constrained: 526
-DEAL:: line 21: -0.062
-DEAL:: line 123: -0.062
-DEAL:: line 157: 0.56
-DEAL:: line 159: 0.56
+DEAL:: line 21: -0.062500
+DEAL:: line 123: -0.062500
+DEAL:: line 157: 0.56250
+DEAL:: line 159: 0.56250
DEAL::not identity constrained: 527
-DEAL:: line 4: -0.0039
-DEAL:: line 5: -0.020
-DEAL:: line 20: 0.020
-DEAL:: line 21: -0.059
-DEAL:: line 112: -0.0039
-DEAL:: line 113: -0.020
-DEAL:: line 118: 0.035
-DEAL:: line 119: 0.035
-DEAL:: line 120: 0.18
-DEAL:: line 121: 0.18
-DEAL:: line 122: 0.020
-DEAL:: line 123: -0.059
-DEAL:: line 156: -0.18
-DEAL:: line 157: 0.53
-DEAL:: line 158: -0.18
-DEAL:: line 159: 0.53
+DEAL:: line 4: -0.0039063
+DEAL:: line 5: -0.019531
+DEAL:: line 20: 0.019531
+DEAL:: line 21: -0.058594
+DEAL:: line 112: -0.0039063
+DEAL:: line 113: -0.019531
+DEAL:: line 118: 0.035156
+DEAL:: line 119: 0.035156
+DEAL:: line 120: 0.17578
+DEAL:: line 121: 0.17578
+DEAL:: line 122: 0.019531
+DEAL:: line 123: -0.058594
+DEAL:: line 156: -0.17578
+DEAL:: line 157: 0.52734
+DEAL:: line 158: -0.17578
+DEAL:: line 159: 0.52734
DEAL::not identity constrained: 544
-DEAL:: line 21: 0.062
-DEAL:: line 123: 0.31
-DEAL:: line 157: 0.94
-DEAL:: line 159: -0.31
+DEAL:: line 21: 0.062500
+DEAL:: line 123: 0.31250
+DEAL:: line 157: 0.93750
+DEAL:: line 159: -0.31250
DEAL::not identity constrained: 545
-DEAL:: line 4: 0.0039
-DEAL:: line 5: 0.020
-DEAL:: line 20: -0.020
-DEAL:: line 21: 0.059
-DEAL:: line 112: 0.020
-DEAL:: line 113: 0.098
-DEAL:: line 118: 0.059
-DEAL:: line 119: -0.020
-DEAL:: line 120: 0.29
-DEAL:: line 121: -0.098
-DEAL:: line 122: -0.098
-DEAL:: line 123: 0.29
-DEAL:: line 156: -0.29
-DEAL:: line 157: 0.88
-DEAL:: line 158: 0.098
-DEAL:: line 159: -0.29
+DEAL:: line 4: 0.0039063
+DEAL:: line 5: 0.019531
+DEAL:: line 20: -0.019531
+DEAL:: line 21: 0.058594
+DEAL:: line 112: 0.019531
+DEAL:: line 113: 0.097656
+DEAL:: line 118: 0.058594
+DEAL:: line 119: -0.019531
+DEAL:: line 120: 0.29297
+DEAL:: line 121: -0.097656
+DEAL:: line 122: -0.097656
+DEAL:: line 123: 0.29297
+DEAL:: line 156: -0.29297
+DEAL:: line 157: 0.87891
+DEAL:: line 158: 0.097656
+DEAL:: line 159: -0.29297
DEAL::not identity constrained: 546
-DEAL:: line 157: 1.0
+DEAL:: line 157: 1.0000
DEAL::not identity constrained: 547
-DEAL:: line 118: 0.063
-DEAL:: line 120: 0.31
-DEAL:: line 156: -0.31
-DEAL:: line 157: 0.94
+DEAL:: line 118: 0.062500
+DEAL:: line 120: 0.31250
+DEAL:: line 156: -0.31250
+DEAL:: line 157: 0.93750
DEAL::not identity constrained: 556
-DEAL:: line 4: -0.062
-DEAL:: line 5: -0.062
-DEAL:: line 20: 0.56
-DEAL:: line 21: 0.56
+DEAL:: line 4: -0.062500
+DEAL:: line 5: -0.062500
+DEAL:: line 20: 0.56250
+DEAL:: line 21: 0.56250
DEAL::not identity constrained: 557
-DEAL:: line 119: 1.0
+DEAL:: line 119: 1.0000
DEAL::not identity constrained: 558
-DEAL:: line 4: 0.31
-DEAL:: line 112: 0.063
-DEAL:: line 118: -0.31
-DEAL:: line 119: 0.94
+DEAL:: line 4: 0.31250
+DEAL:: line 112: 0.062500
+DEAL:: line 118: -0.31250
+DEAL:: line 119: 0.93750
DEAL::not identity constrained: 559
-DEAL:: line 119: -0.062
-DEAL:: line 121: -0.062
-DEAL:: line 158: 0.56
-DEAL:: line 159: 0.56
+DEAL:: line 119: -0.062500
+DEAL:: line 121: -0.062500
+DEAL:: line 158: 0.56250
+DEAL:: line 159: 0.56250
DEAL::not identity constrained: 560
-DEAL:: line 4: -0.020
-DEAL:: line 5: -0.020
-DEAL:: line 20: 0.18
-DEAL:: line 21: 0.18
-DEAL:: line 112: -0.0039
-DEAL:: line 113: -0.0039
-DEAL:: line 118: 0.020
-DEAL:: line 119: -0.059
-DEAL:: line 120: 0.020
-DEAL:: line 121: -0.059
-DEAL:: line 122: 0.035
-DEAL:: line 123: 0.035
-DEAL:: line 156: -0.18
-DEAL:: line 157: -0.18
-DEAL:: line 158: 0.53
-DEAL:: line 159: 0.53
+DEAL:: line 4: -0.019531
+DEAL:: line 5: -0.019531
+DEAL:: line 20: 0.17578
+DEAL:: line 21: 0.17578
+DEAL:: line 112: -0.0039063
+DEAL:: line 113: -0.0039063
+DEAL:: line 118: 0.019531
+DEAL:: line 119: -0.058594
+DEAL:: line 120: 0.019531
+DEAL:: line 121: -0.058594
+DEAL:: line 122: 0.035156
+DEAL:: line 123: 0.035156
+DEAL:: line 156: -0.17578
+DEAL:: line 157: -0.17578
+DEAL:: line 158: 0.52734
+DEAL:: line 159: 0.52734
DEAL::not identity constrained: 561
-DEAL:: line 4: 0.31
-DEAL:: line 5: 0.062
-DEAL:: line 20: 0.94
-DEAL:: line 21: -0.31
+DEAL:: line 4: 0.31250
+DEAL:: line 5: 0.062500
+DEAL:: line 20: 0.93750
+DEAL:: line 21: -0.31250
DEAL::not identity constrained: 562
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::not identity constrained: 563
-DEAL:: line 25: 1.0
+DEAL:: line 25: 1.0000
DEAL::not identity constrained: 564
-DEAL:: line 0: 0.063
-DEAL:: line 4: 0.31
-DEAL:: line 24: -0.31
-DEAL:: line 25: 0.94
+DEAL:: line 0: 0.062500
+DEAL:: line 4: 0.31250
+DEAL:: line 24: -0.31250
+DEAL:: line 25: 0.93750
DEAL::not identity constrained: 565
-DEAL:: line 25: -0.062
-DEAL:: line 27: -0.062
-DEAL:: line 41: 0.56
-DEAL:: line 43: 0.56
+DEAL:: line 25: -0.062500
+DEAL:: line 27: -0.062500
+DEAL:: line 41: 0.56250
+DEAL:: line 43: 0.56250
DEAL::not identity constrained: 566
-DEAL:: line 0: -0.0039
-DEAL:: line 1: -0.0039
-DEAL:: line 4: -0.020
-DEAL:: line 5: -0.020
-DEAL:: line 12: 0.035
-DEAL:: line 13: 0.035
-DEAL:: line 20: 0.18
-DEAL:: line 21: 0.18
-DEAL:: line 24: 0.020
-DEAL:: line 25: -0.059
-DEAL:: line 26: 0.020
-DEAL:: line 27: -0.059
-DEAL:: line 40: -0.18
-DEAL:: line 41: 0.53
-DEAL:: line 42: -0.18
-DEAL:: line 43: 0.53
+DEAL:: line 0: -0.0039063
+DEAL:: line 1: -0.0039063
+DEAL:: line 4: -0.019531
+DEAL:: line 5: -0.019531
+DEAL:: line 12: 0.035156
+DEAL:: line 13: 0.035156
+DEAL:: line 20: 0.17578
+DEAL:: line 21: 0.17578
+DEAL:: line 24: 0.019531
+DEAL:: line 25: -0.058594
+DEAL:: line 26: 0.019531
+DEAL:: line 27: -0.058594
+DEAL:: line 40: -0.17578
+DEAL:: line 41: 0.52734
+DEAL:: line 42: -0.17578
+DEAL:: line 43: 0.52734
DEAL::not identity constrained: 575
-DEAL:: line 25: 0.31
-DEAL:: line 27: 0.062
-DEAL:: line 41: 0.94
-DEAL:: line 43: -0.31
+DEAL:: line 25: 0.31250
+DEAL:: line 27: 0.062500
+DEAL:: line 41: 0.93750
+DEAL:: line 43: -0.31250
DEAL::not identity constrained: 576
-DEAL:: line 0: 0.020
-DEAL:: line 1: 0.0039
-DEAL:: line 4: 0.098
-DEAL:: line 5: 0.020
-DEAL:: line 12: 0.059
-DEAL:: line 13: -0.020
-DEAL:: line 20: 0.29
-DEAL:: line 21: -0.098
-DEAL:: line 24: -0.098
-DEAL:: line 25: 0.29
-DEAL:: line 26: -0.020
-DEAL:: line 27: 0.059
-DEAL:: line 40: -0.29
-DEAL:: line 41: 0.88
-DEAL:: line 42: 0.098
-DEAL:: line 43: -0.29
+DEAL:: line 0: 0.019531
+DEAL:: line 1: 0.0039063
+DEAL:: line 4: 0.097656
+DEAL:: line 5: 0.019531
+DEAL:: line 12: 0.058594
+DEAL:: line 13: -0.019531
+DEAL:: line 20: 0.29297
+DEAL:: line 21: -0.097656
+DEAL:: line 24: -0.097656
+DEAL:: line 25: 0.29297
+DEAL:: line 26: -0.019531
+DEAL:: line 27: 0.058594
+DEAL:: line 40: -0.29297
+DEAL:: line 41: 0.87891
+DEAL:: line 42: 0.097656
+DEAL:: line 43: -0.29297
DEAL::not identity constrained: 577
-DEAL:: line 41: 1.0
+DEAL:: line 41: 1.0000
DEAL::not identity constrained: 578
-DEAL:: line 12: 0.063
-DEAL:: line 20: 0.31
-DEAL:: line 40: -0.31
-DEAL:: line 41: 0.94
+DEAL:: line 12: 0.062500
+DEAL:: line 20: 0.31250
+DEAL:: line 40: -0.31250
+DEAL:: line 41: 0.93750
DEAL::not identity constrained: 579
-DEAL:: line 119: 0.31
-DEAL:: line 121: 0.062
-DEAL:: line 158: 0.94
-DEAL:: line 159: -0.31
+DEAL:: line 119: 0.31250
+DEAL:: line 121: 0.062500
+DEAL:: line 158: 0.93750
+DEAL:: line 159: -0.31250
DEAL::not identity constrained: 580
-DEAL:: line 158: 1.0
+DEAL:: line 158: 1.0000
DEAL::not identity constrained: 581
-DEAL:: line 4: 0.098
-DEAL:: line 5: 0.020
-DEAL:: line 20: 0.29
-DEAL:: line 21: -0.098
-DEAL:: line 112: 0.020
-DEAL:: line 113: 0.0039
-DEAL:: line 118: -0.098
-DEAL:: line 119: 0.29
-DEAL:: line 120: -0.020
-DEAL:: line 121: 0.059
-DEAL:: line 122: 0.059
-DEAL:: line 123: -0.020
-DEAL:: line 156: -0.29
-DEAL:: line 157: 0.098
-DEAL:: line 158: 0.88
-DEAL:: line 159: -0.29
+DEAL:: line 4: 0.097656
+DEAL:: line 5: 0.019531
+DEAL:: line 20: 0.29297
+DEAL:: line 21: -0.097656
+DEAL:: line 112: 0.019531
+DEAL:: line 113: 0.0039063
+DEAL:: line 118: -0.097656
+DEAL:: line 119: 0.29297
+DEAL:: line 120: -0.019531
+DEAL:: line 121: 0.058594
+DEAL:: line 122: 0.058594
+DEAL:: line 123: -0.019531
+DEAL:: line 156: -0.29297
+DEAL:: line 157: 0.097656
+DEAL:: line 158: 0.87891
+DEAL:: line 159: -0.29297
DEAL::not identity constrained: 582
-DEAL:: line 20: 0.31
-DEAL:: line 122: 0.063
-DEAL:: line 156: -0.31
-DEAL:: line 158: 0.94
+DEAL:: line 20: 0.31250
+DEAL:: line 122: 0.062500
+DEAL:: line 156: -0.31250
+DEAL:: line 158: 0.93750
DEAL::not identity constrained: 591
-DEAL:: line 121: 1.0
+DEAL:: line 121: 1.0000
DEAL::not identity constrained: 592
-DEAL:: line 5: 0.31
-DEAL:: line 113: 0.063
-DEAL:: line 120: -0.31
-DEAL:: line 121: 0.94
+DEAL:: line 5: 0.31250
+DEAL:: line 113: 0.062500
+DEAL:: line 120: -0.31250
+DEAL:: line 121: 0.93750
DEAL::not identity constrained: 593
-DEAL:: line 21: 1.0
+DEAL:: line 21: 1.0000
DEAL::not identity constrained: 594
-DEAL:: line 4: 0.063
-DEAL:: line 5: 0.31
-DEAL:: line 20: -0.31
-DEAL:: line 21: 0.94
+DEAL:: line 4: 0.062500
+DEAL:: line 5: 0.31250
+DEAL:: line 20: -0.31250
+DEAL:: line 21: 0.93750
DEAL::not identity constrained: 595
-DEAL:: line 27: 1.0
+DEAL:: line 27: 1.0000
DEAL::not identity constrained: 596
-DEAL:: line 1: 0.063
-DEAL:: line 5: 0.31
-DEAL:: line 26: -0.31
-DEAL:: line 27: 0.94
+DEAL:: line 1: 0.062500
+DEAL:: line 5: 0.31250
+DEAL:: line 26: -0.31250
+DEAL:: line 27: 0.93750
DEAL::not identity constrained: 601
-DEAL:: line 43: 1.0
+DEAL:: line 43: 1.0000
DEAL::not identity constrained: 602
-DEAL:: line 13: 0.063
-DEAL:: line 21: 0.31
-DEAL:: line 42: -0.31
-DEAL:: line 43: 0.94
+DEAL:: line 13: 0.062500
+DEAL:: line 21: 0.31250
+DEAL:: line 42: -0.31250
+DEAL:: line 43: 0.93750
DEAL::not identity constrained: 603
-DEAL:: line 25: 0.063
-DEAL:: line 27: 0.31
-DEAL:: line 41: -0.31
-DEAL:: line 43: 0.94
+DEAL:: line 25: 0.062500
+DEAL:: line 27: 0.31250
+DEAL:: line 41: -0.31250
+DEAL:: line 43: 0.93750
DEAL::not identity constrained: 604
-DEAL:: line 0: 0.0039
-DEAL:: line 1: 0.020
-DEAL:: line 4: 0.020
-DEAL:: line 5: 0.098
-DEAL:: line 12: -0.020
-DEAL:: line 13: 0.059
-DEAL:: line 20: -0.098
-DEAL:: line 21: 0.29
-DEAL:: line 24: -0.020
-DEAL:: line 25: 0.059
-DEAL:: line 26: -0.098
-DEAL:: line 27: 0.29
-DEAL:: line 40: 0.098
-DEAL:: line 41: -0.29
-DEAL:: line 42: -0.29
-DEAL:: line 43: 0.88
+DEAL:: line 0: 0.0039063
+DEAL:: line 1: 0.019531
+DEAL:: line 4: 0.019531
+DEAL:: line 5: 0.097656
+DEAL:: line 12: -0.019531
+DEAL:: line 13: 0.058594
+DEAL:: line 20: -0.097656
+DEAL:: line 21: 0.29297
+DEAL:: line 24: -0.019531
+DEAL:: line 25: 0.058594
+DEAL:: line 26: -0.097656
+DEAL:: line 27: 0.29297
+DEAL:: line 40: 0.097656
+DEAL:: line 41: -0.29297
+DEAL:: line 42: -0.29297
+DEAL:: line 43: 0.87891
DEAL::not identity constrained: 605
-DEAL:: line 159: 1.0
+DEAL:: line 159: 1.0000
DEAL::not identity constrained: 606
-DEAL:: line 119: 0.063
-DEAL:: line 121: 0.31
-DEAL:: line 158: -0.31
-DEAL:: line 159: 0.94
+DEAL:: line 119: 0.062500
+DEAL:: line 121: 0.31250
+DEAL:: line 158: -0.31250
+DEAL:: line 159: 0.93750
DEAL::not identity constrained: 607
-DEAL:: line 21: 0.31
-DEAL:: line 123: 0.063
-DEAL:: line 157: -0.31
-DEAL:: line 159: 0.94
+DEAL:: line 21: 0.31250
+DEAL:: line 123: 0.062500
+DEAL:: line 157: -0.31250
+DEAL:: line 159: 0.93750
DEAL::not identity constrained: 608
-DEAL:: line 4: 0.020
-DEAL:: line 5: 0.098
-DEAL:: line 20: -0.098
-DEAL:: line 21: 0.29
-DEAL:: line 112: 0.0039
-DEAL:: line 113: 0.020
-DEAL:: line 118: -0.020
-DEAL:: line 119: 0.059
-DEAL:: line 120: -0.098
-DEAL:: line 121: 0.29
-DEAL:: line 122: -0.020
-DEAL:: line 123: 0.059
-DEAL:: line 156: 0.098
-DEAL:: line 157: -0.29
-DEAL:: line 158: -0.29
-DEAL:: line 159: 0.88
+DEAL:: line 4: 0.019531
+DEAL:: line 5: 0.097656
+DEAL:: line 20: -0.097656
+DEAL:: line 21: 0.29297
+DEAL:: line 112: 0.0039063
+DEAL:: line 113: 0.019531
+DEAL:: line 118: -0.019531
+DEAL:: line 119: 0.058594
+DEAL:: line 120: -0.097656
+DEAL:: line 121: 0.29297
+DEAL:: line 122: -0.019531
+DEAL:: line 123: 0.058594
+DEAL:: line 156: 0.097656
+DEAL:: line 157: -0.29297
+DEAL:: line 158: -0.29297
+DEAL:: line 159: 0.87891
DEAL::not identity constrained: 713
-DEAL:: line 1: -0.062
-DEAL:: line 64: -0.062
-DEAL:: line 70: 0.56
-DEAL:: line 71: 0.56
+DEAL:: line 1: -0.062500
+DEAL:: line 64: -0.062500
+DEAL:: line 70: 0.56250
+DEAL:: line 71: 0.56250
DEAL::not identity constrained: 714
-DEAL:: line 1: 0.0039
-DEAL:: line 5: 0.0039
-DEAL:: line 26: -0.035
-DEAL:: line 27: -0.035
-DEAL:: line 64: 0.0039
-DEAL:: line 66: 0.0039
-DEAL:: line 70: -0.035
-DEAL:: line 71: -0.035
-DEAL:: line 76: -0.035
-DEAL:: line 77: -0.035
-DEAL:: line 80: -0.035
-DEAL:: line 81: -0.035
-DEAL:: line 88: 0.32
-DEAL:: line 89: 0.32
-DEAL:: line 90: 0.32
-DEAL:: line 91: 0.32
+DEAL:: line 1: 0.0039062
+DEAL:: line 5: 0.0039062
+DEAL:: line 26: -0.035156
+DEAL:: line 27: -0.035156
+DEAL:: line 64: 0.0039062
+DEAL:: line 66: 0.0039062
+DEAL:: line 70: -0.035156
+DEAL:: line 71: -0.035156
+DEAL:: line 76: -0.035156
+DEAL:: line 77: -0.035156
+DEAL:: line 80: -0.035156
+DEAL:: line 81: -0.035156
+DEAL:: line 88: 0.31641
+DEAL:: line 89: 0.31641
+DEAL:: line 90: 0.31641
+DEAL:: line 91: 0.31641
DEAL::not identity constrained: 717
-DEAL:: line 1: 0.31
-DEAL:: line 64: 0.062
-DEAL:: line 70: 0.94
-DEAL:: line 71: -0.31
+DEAL:: line 1: 0.31250
+DEAL:: line 64: 0.062500
+DEAL:: line 70: 0.93750
+DEAL:: line 71: -0.31250
DEAL::not identity constrained: 718
-DEAL:: line 70: 1.0
+DEAL:: line 70: 1.0000
DEAL::not identity constrained: 721
-DEAL:: line 1: -0.020
-DEAL:: line 5: -0.020
-DEAL:: line 26: 0.18
-DEAL:: line 27: 0.18
-DEAL:: line 64: -0.0039
-DEAL:: line 66: -0.0039
-DEAL:: line 70: -0.059
-DEAL:: line 71: 0.020
-DEAL:: line 76: -0.059
-DEAL:: line 77: 0.020
-DEAL:: line 80: 0.035
-DEAL:: line 81: 0.035
-DEAL:: line 88: 0.53
-DEAL:: line 89: 0.53
-DEAL:: line 90: -0.18
-DEAL:: line 91: -0.18
+DEAL:: line 1: -0.019531
+DEAL:: line 5: -0.019531
+DEAL:: line 26: 0.17578
+DEAL:: line 27: 0.17578
+DEAL:: line 64: -0.0039062
+DEAL:: line 66: -0.0039062
+DEAL:: line 70: -0.058594
+DEAL:: line 71: 0.019531
+DEAL:: line 76: -0.058594
+DEAL:: line 77: 0.019531
+DEAL:: line 80: 0.035156
+DEAL:: line 81: 0.035156
+DEAL:: line 88: 0.52734
+DEAL:: line 89: 0.52734
+DEAL:: line 90: -0.17578
+DEAL:: line 91: -0.17578
DEAL::not identity constrained: 722
-DEAL:: line 70: -0.062
-DEAL:: line 76: -0.062
-DEAL:: line 88: 0.56
-DEAL:: line 89: 0.56
+DEAL:: line 70: -0.062500
+DEAL:: line 76: -0.062500
+DEAL:: line 88: 0.56250
+DEAL:: line 89: 0.56250
DEAL::not identity constrained: 723
-DEAL:: line 1: -0.020
-DEAL:: line 5: -0.0039
-DEAL:: line 26: -0.059
-DEAL:: line 27: 0.020
-DEAL:: line 64: -0.020
-DEAL:: line 66: -0.0039
-DEAL:: line 70: 0.18
-DEAL:: line 71: 0.18
-DEAL:: line 76: 0.035
-DEAL:: line 77: 0.035
-DEAL:: line 80: -0.059
-DEAL:: line 81: 0.020
-DEAL:: line 88: 0.53
-DEAL:: line 89: -0.18
-DEAL:: line 90: 0.53
-DEAL:: line 91: -0.18
+DEAL:: line 1: -0.019531
+DEAL:: line 5: -0.0039062
+DEAL:: line 26: -0.058594
+DEAL:: line 27: 0.019531
+DEAL:: line 64: -0.019531
+DEAL:: line 66: -0.0039062
+DEAL:: line 70: 0.17578
+DEAL:: line 71: 0.17578
+DEAL:: line 76: 0.035156
+DEAL:: line 77: 0.035156
+DEAL:: line 80: -0.058594
+DEAL:: line 81: 0.019531
+DEAL:: line 88: 0.52734
+DEAL:: line 89: -0.17578
+DEAL:: line 90: 0.52734
+DEAL:: line 91: -0.17578
DEAL::not identity constrained: 724
-DEAL:: line 26: -0.062
-DEAL:: line 80: -0.062
-DEAL:: line 88: 0.56
-DEAL:: line 90: 0.56
+DEAL:: line 26: -0.062500
+DEAL:: line 80: -0.062500
+DEAL:: line 88: 0.56250
+DEAL:: line 90: 0.56250
DEAL::not identity constrained: 729
-DEAL:: line 1: 0.098
-DEAL:: line 5: 0.020
-DEAL:: line 26: 0.29
-DEAL:: line 27: -0.098
-DEAL:: line 64: 0.020
-DEAL:: line 66: 0.0039
-DEAL:: line 70: 0.29
-DEAL:: line 71: -0.098
-DEAL:: line 76: 0.059
-DEAL:: line 77: -0.020
-DEAL:: line 80: 0.059
-DEAL:: line 81: -0.020
-DEAL:: line 88: 0.88
-DEAL:: line 89: -0.29
-DEAL:: line 90: -0.29
-DEAL:: line 91: 0.098
+DEAL:: line 1: 0.097656
+DEAL:: line 5: 0.019531
+DEAL:: line 26: 0.29297
+DEAL:: line 27: -0.097656
+DEAL:: line 64: 0.019531
+DEAL:: line 66: 0.0039062
+DEAL:: line 70: 0.29297
+DEAL:: line 71: -0.097656
+DEAL:: line 76: 0.058594
+DEAL:: line 77: -0.019531
+DEAL:: line 80: 0.058594
+DEAL:: line 81: -0.019531
+DEAL:: line 88: 0.87891
+DEAL:: line 89: -0.29297
+DEAL:: line 90: -0.29297
+DEAL:: line 91: 0.097656
DEAL::not identity constrained: 730
-DEAL:: line 26: 0.31
-DEAL:: line 80: 0.062
-DEAL:: line 88: 0.94
-DEAL:: line 90: -0.31
+DEAL:: line 26: 0.31250
+DEAL:: line 80: 0.062500
+DEAL:: line 88: 0.93750
+DEAL:: line 90: -0.31250
DEAL::not identity constrained: 731
-DEAL:: line 70: 0.31
-DEAL:: line 76: 0.062
-DEAL:: line 88: 0.94
-DEAL:: line 89: -0.31
+DEAL:: line 70: 0.31250
+DEAL:: line 76: 0.062500
+DEAL:: line 88: 0.93750
+DEAL:: line 89: -0.31250
DEAL::not identity constrained: 732
-DEAL:: line 88: 1.0
+DEAL:: line 88: 1.0000
DEAL::not identity constrained: 749
-DEAL:: line 64: -0.062
-DEAL:: line 66: -0.062
-DEAL:: line 80: 0.56
-DEAL:: line 81: 0.56
+DEAL:: line 64: -0.062500
+DEAL:: line 66: -0.062500
+DEAL:: line 80: 0.56250
+DEAL:: line 81: 0.56250
DEAL::not identity constrained: 752
-DEAL:: line 71: 1.0
+DEAL:: line 71: 1.0000
DEAL::not identity constrained: 753
-DEAL:: line 1: 0.063
-DEAL:: line 64: 0.31
-DEAL:: line 70: -0.31
-DEAL:: line 71: 0.94
+DEAL:: line 1: 0.062500
+DEAL:: line 64: 0.31250
+DEAL:: line 70: -0.31250
+DEAL:: line 71: 0.93750
DEAL::not identity constrained: 756
-DEAL:: line 71: -0.062
-DEAL:: line 77: -0.062
-DEAL:: line 90: 0.56
-DEAL:: line 91: 0.56
+DEAL:: line 71: -0.062500
+DEAL:: line 77: -0.062500
+DEAL:: line 90: 0.56250
+DEAL:: line 91: 0.56250
DEAL::not identity constrained: 757
-DEAL:: line 1: -0.0039
-DEAL:: line 5: -0.0039
-DEAL:: line 26: 0.035
-DEAL:: line 27: 0.035
-DEAL:: line 64: -0.020
-DEAL:: line 66: -0.020
-DEAL:: line 70: 0.020
-DEAL:: line 71: -0.059
-DEAL:: line 76: 0.020
-DEAL:: line 77: -0.059
-DEAL:: line 80: 0.18
-DEAL:: line 81: 0.18
-DEAL:: line 88: -0.18
-DEAL:: line 89: -0.18
-DEAL:: line 90: 0.53
-DEAL:: line 91: 0.53
+DEAL:: line 1: -0.0039063
+DEAL:: line 5: -0.0039063
+DEAL:: line 26: 0.035156
+DEAL:: line 27: 0.035156
+DEAL:: line 64: -0.019531
+DEAL:: line 66: -0.019531
+DEAL:: line 70: 0.019531
+DEAL:: line 71: -0.058594
+DEAL:: line 76: 0.019531
+DEAL:: line 77: -0.058594
+DEAL:: line 80: 0.17578
+DEAL:: line 81: 0.17578
+DEAL:: line 88: -0.17578
+DEAL:: line 89: -0.17578
+DEAL:: line 90: 0.52734
+DEAL:: line 91: 0.52734
DEAL::not identity constrained: 758
-DEAL:: line 64: 0.31
-DEAL:: line 66: 0.062
-DEAL:: line 80: 0.94
-DEAL:: line 81: -0.31
+DEAL:: line 64: 0.31250
+DEAL:: line 66: 0.062500
+DEAL:: line 80: 0.93750
+DEAL:: line 81: -0.31250
DEAL::not identity constrained: 759
-DEAL:: line 80: 1.0
+DEAL:: line 80: 1.0000
DEAL::not identity constrained: 764
-DEAL:: line 71: 0.31
-DEAL:: line 77: 0.062
-DEAL:: line 90: 0.94
-DEAL:: line 91: -0.31
+DEAL:: line 71: 0.31250
+DEAL:: line 77: 0.062500
+DEAL:: line 90: 0.93750
+DEAL:: line 91: -0.31250
DEAL::not identity constrained: 765
-DEAL:: line 90: 1.0
+DEAL:: line 90: 1.0000
DEAL::not identity constrained: 766
-DEAL:: line 1: 0.020
-DEAL:: line 5: 0.0039
-DEAL:: line 26: 0.059
-DEAL:: line 27: -0.020
-DEAL:: line 64: 0.098
-DEAL:: line 66: 0.020
-DEAL:: line 70: -0.098
-DEAL:: line 71: 0.29
-DEAL:: line 76: -0.020
-DEAL:: line 77: 0.059
-DEAL:: line 80: 0.29
-DEAL:: line 81: -0.098
-DEAL:: line 88: -0.29
-DEAL:: line 89: 0.098
-DEAL:: line 90: 0.88
-DEAL:: line 91: -0.29
+DEAL:: line 1: 0.019531
+DEAL:: line 5: 0.0039063
+DEAL:: line 26: 0.058594
+DEAL:: line 27: -0.019531
+DEAL:: line 64: 0.097656
+DEAL:: line 66: 0.019531
+DEAL:: line 70: -0.097656
+DEAL:: line 71: 0.29297
+DEAL:: line 76: -0.019531
+DEAL:: line 77: 0.058594
+DEAL:: line 80: 0.29297
+DEAL:: line 81: -0.097656
+DEAL:: line 88: -0.29297
+DEAL:: line 89: 0.097656
+DEAL:: line 90: 0.87891
+DEAL:: line 91: -0.29297
DEAL::not identity constrained: 767
-DEAL:: line 26: 0.063
-DEAL:: line 80: 0.31
-DEAL:: line 88: -0.31
-DEAL:: line 90: 0.94
+DEAL:: line 26: 0.062500
+DEAL:: line 80: 0.31250
+DEAL:: line 88: -0.31250
+DEAL:: line 90: 0.93750
DEAL::not identity constrained: 784
-DEAL:: line 113: -0.062
-DEAL:: line 172: -0.062
-DEAL:: line 177: 0.56
-DEAL:: line 178: 0.56
+DEAL:: line 113: -0.062500
+DEAL:: line 172: -0.062500
+DEAL:: line 177: 0.56250
+DEAL:: line 178: 0.56250
DEAL::not identity constrained: 785
-DEAL:: line 5: 0.0039
-DEAL:: line 66: 0.0039
-DEAL:: line 76: -0.035
-DEAL:: line 77: -0.035
-DEAL:: line 113: 0.0039
-DEAL:: line 120: -0.035
-DEAL:: line 121: -0.035
-DEAL:: line 172: 0.0039
-DEAL:: line 175: -0.035
-DEAL:: line 176: -0.035
-DEAL:: line 177: -0.035
-DEAL:: line 178: -0.035
-DEAL:: line 201: 0.32
-DEAL:: line 202: 0.32
-DEAL:: line 203: 0.32
-DEAL:: line 204: 0.32
+DEAL:: line 5: 0.0039062
+DEAL:: line 66: 0.0039062
+DEAL:: line 76: -0.035156
+DEAL:: line 77: -0.035156
+DEAL:: line 113: 0.0039062
+DEAL:: line 120: -0.035156
+DEAL:: line 121: -0.035156
+DEAL:: line 172: 0.0039062
+DEAL:: line 175: -0.035156
+DEAL:: line 176: -0.035156
+DEAL:: line 177: -0.035156
+DEAL:: line 178: -0.035156
+DEAL:: line 201: 0.31641
+DEAL:: line 202: 0.31641
+DEAL:: line 203: 0.31641
+DEAL:: line 204: 0.31641
DEAL::not identity constrained: 786
-DEAL:: line 5: -0.0039
-DEAL:: line 66: -0.0039
-DEAL:: line 76: 0.035
-DEAL:: line 77: 0.035
-DEAL:: line 113: -0.020
-DEAL:: line 120: -0.059
-DEAL:: line 121: 0.020
-DEAL:: line 172: -0.020
-DEAL:: line 175: -0.059
-DEAL:: line 176: 0.020
-DEAL:: line 177: 0.18
-DEAL:: line 178: 0.18
-DEAL:: line 201: 0.53
-DEAL:: line 202: 0.53
-DEAL:: line 203: -0.18
-DEAL:: line 204: -0.18
+DEAL:: line 5: -0.0039062
+DEAL:: line 66: -0.0039062
+DEAL:: line 76: 0.035156
+DEAL:: line 77: 0.035156
+DEAL:: line 113: -0.019531
+DEAL:: line 120: -0.058594
+DEAL:: line 121: 0.019531
+DEAL:: line 172: -0.019531
+DEAL:: line 175: -0.058594
+DEAL:: line 176: 0.019531
+DEAL:: line 177: 0.17578
+DEAL:: line 178: 0.17578
+DEAL:: line 201: 0.52734
+DEAL:: line 202: 0.52734
+DEAL:: line 203: -0.17578
+DEAL:: line 204: -0.17578
DEAL::not identity constrained: 787
-DEAL:: line 120: -0.062
-DEAL:: line 175: -0.062
-DEAL:: line 201: 0.56
-DEAL:: line 202: 0.56
+DEAL:: line 120: -0.062500
+DEAL:: line 175: -0.062500
+DEAL:: line 201: 0.56250
+DEAL:: line 202: 0.56250
DEAL::not identity constrained: 788
-DEAL:: line 113: 0.31
-DEAL:: line 172: 0.062
-DEAL:: line 177: 0.94
-DEAL:: line 178: -0.31
+DEAL:: line 113: 0.31250
+DEAL:: line 172: 0.062500
+DEAL:: line 177: 0.93750
+DEAL:: line 178: -0.31250
DEAL::not identity constrained: 789
-DEAL:: line 177: 1.0
+DEAL:: line 177: 1.0000
DEAL::not identity constrained: 790
-DEAL:: line 5: -0.020
-DEAL:: line 66: -0.0039
-DEAL:: line 76: -0.059
-DEAL:: line 77: 0.020
-DEAL:: line 113: -0.020
-DEAL:: line 120: 0.18
-DEAL:: line 121: 0.18
-DEAL:: line 172: -0.0039
-DEAL:: line 175: 0.035
-DEAL:: line 176: 0.035
-DEAL:: line 177: -0.059
-DEAL:: line 178: 0.020
-DEAL:: line 201: 0.53
-DEAL:: line 202: -0.18
-DEAL:: line 203: 0.53
-DEAL:: line 204: -0.18
+DEAL:: line 5: -0.019531
+DEAL:: line 66: -0.0039062
+DEAL:: line 76: -0.058594
+DEAL:: line 77: 0.019531
+DEAL:: line 113: -0.019531
+DEAL:: line 120: 0.17578
+DEAL:: line 121: 0.17578
+DEAL:: line 172: -0.0039062
+DEAL:: line 175: 0.035156
+DEAL:: line 176: 0.035156
+DEAL:: line 177: -0.058594
+DEAL:: line 178: 0.019531
+DEAL:: line 201: 0.52734
+DEAL:: line 202: -0.17578
+DEAL:: line 203: 0.52734
+DEAL:: line 204: -0.17578
DEAL::not identity constrained: 791
-DEAL:: line 76: -0.062
-DEAL:: line 177: -0.062
-DEAL:: line 201: 0.56
-DEAL:: line 203: 0.56
+DEAL:: line 76: -0.062500
+DEAL:: line 177: -0.062500
+DEAL:: line 201: 0.56250
+DEAL:: line 203: 0.56250
DEAL::not identity constrained: 808
-DEAL:: line 5: 0.020
-DEAL:: line 66: 0.0039
-DEAL:: line 76: 0.059
-DEAL:: line 77: -0.020
-DEAL:: line 113: 0.098
-DEAL:: line 120: 0.29
-DEAL:: line 121: -0.098
-DEAL:: line 172: 0.020
-DEAL:: line 175: 0.059
-DEAL:: line 176: -0.020
-DEAL:: line 177: 0.29
-DEAL:: line 178: -0.098
-DEAL:: line 201: 0.88
-DEAL:: line 202: -0.29
-DEAL:: line 203: -0.29
-DEAL:: line 204: 0.098
+DEAL:: line 5: 0.019531
+DEAL:: line 66: 0.0039062
+DEAL:: line 76: 0.058594
+DEAL:: line 77: -0.019531
+DEAL:: line 113: 0.097656
+DEAL:: line 120: 0.29297
+DEAL:: line 121: -0.097656
+DEAL:: line 172: 0.019531
+DEAL:: line 175: 0.058594
+DEAL:: line 176: -0.019531
+DEAL:: line 177: 0.29297
+DEAL:: line 178: -0.097656
+DEAL:: line 201: 0.87891
+DEAL:: line 202: -0.29297
+DEAL:: line 203: -0.29297
+DEAL:: line 204: 0.097656
DEAL::not identity constrained: 809
-DEAL:: line 76: 0.062
-DEAL:: line 177: 0.31
-DEAL:: line 201: 0.94
-DEAL:: line 203: -0.31
+DEAL:: line 76: 0.062500
+DEAL:: line 177: 0.31250
+DEAL:: line 201: 0.93750
+DEAL:: line 203: -0.31250
DEAL::not identity constrained: 810
-DEAL:: line 120: 0.31
-DEAL:: line 175: 0.062
-DEAL:: line 201: 0.94
-DEAL:: line 202: -0.31
+DEAL:: line 120: 0.31250
+DEAL:: line 175: 0.062500
+DEAL:: line 201: 0.93750
+DEAL:: line 202: -0.31250
DEAL::not identity constrained: 811
-DEAL:: line 201: 1.0
+DEAL:: line 201: 1.0000
DEAL::not identity constrained: 820
-DEAL:: line 66: -0.062
-DEAL:: line 172: -0.062
-DEAL:: line 175: 0.56
-DEAL:: line 176: 0.56
+DEAL:: line 66: -0.062500
+DEAL:: line 172: -0.062500
+DEAL:: line 175: 0.56250
+DEAL:: line 176: 0.56250
DEAL::not identity constrained: 821
-DEAL:: line 66: 0.062
-DEAL:: line 172: 0.31
-DEAL:: line 175: 0.94
-DEAL:: line 176: -0.31
+DEAL:: line 66: 0.062500
+DEAL:: line 172: 0.31250
+DEAL:: line 175: 0.93750
+DEAL:: line 176: -0.31250
DEAL::not identity constrained: 822
-DEAL:: line 175: 1.0
+DEAL:: line 175: 1.0000
DEAL::not identity constrained: 823
-DEAL:: line 178: 1.0
+DEAL:: line 178: 1.0000
DEAL::not identity constrained: 824
-DEAL:: line 113: 0.063
-DEAL:: line 172: 0.31
-DEAL:: line 177: -0.31
-DEAL:: line 178: 0.94
+DEAL:: line 113: 0.062500
+DEAL:: line 172: 0.31250
+DEAL:: line 177: -0.31250
+DEAL:: line 178: 0.93750
DEAL::not identity constrained: 825
-DEAL:: line 77: -0.062
-DEAL:: line 178: -0.062
-DEAL:: line 202: 0.56
-DEAL:: line 204: 0.56
+DEAL:: line 77: -0.062500
+DEAL:: line 178: -0.062500
+DEAL:: line 202: 0.56250
+DEAL:: line 204: 0.56250
DEAL::not identity constrained: 826
-DEAL:: line 5: -0.0039
-DEAL:: line 66: -0.020
-DEAL:: line 76: 0.020
-DEAL:: line 77: -0.059
-DEAL:: line 113: -0.0039
-DEAL:: line 120: 0.035
-DEAL:: line 121: 0.035
-DEAL:: line 172: -0.020
-DEAL:: line 175: 0.18
-DEAL:: line 176: 0.18
-DEAL:: line 177: 0.020
-DEAL:: line 178: -0.059
-DEAL:: line 201: -0.18
-DEAL:: line 202: 0.53
-DEAL:: line 203: -0.18
-DEAL:: line 204: 0.53
+DEAL:: line 5: -0.0039063
+DEAL:: line 66: -0.019531
+DEAL:: line 76: 0.019531
+DEAL:: line 77: -0.058594
+DEAL:: line 113: -0.0039063
+DEAL:: line 120: 0.035156
+DEAL:: line 121: 0.035156
+DEAL:: line 172: -0.019531
+DEAL:: line 175: 0.17578
+DEAL:: line 176: 0.17578
+DEAL:: line 177: 0.019531
+DEAL:: line 178: -0.058594
+DEAL:: line 201: -0.17578
+DEAL:: line 202: 0.52734
+DEAL:: line 203: -0.17578
+DEAL:: line 204: 0.52734
DEAL::not identity constrained: 843
-DEAL:: line 77: 0.062
-DEAL:: line 178: 0.31
-DEAL:: line 202: 0.94
-DEAL:: line 204: -0.31
+DEAL:: line 77: 0.062500
+DEAL:: line 178: 0.31250
+DEAL:: line 202: 0.93750
+DEAL:: line 204: -0.31250
DEAL::not identity constrained: 844
-DEAL:: line 5: 0.0039
-DEAL:: line 66: 0.020
-DEAL:: line 76: -0.020
-DEAL:: line 77: 0.059
-DEAL:: line 113: 0.020
-DEAL:: line 120: 0.059
-DEAL:: line 121: -0.020
-DEAL:: line 172: 0.098
-DEAL:: line 175: 0.29
-DEAL:: line 176: -0.098
-DEAL:: line 177: -0.098
-DEAL:: line 178: 0.29
-DEAL:: line 201: -0.29
-DEAL:: line 202: 0.88
-DEAL:: line 203: 0.098
-DEAL:: line 204: -0.29
+DEAL:: line 5: 0.0039063
+DEAL:: line 66: 0.019531
+DEAL:: line 76: -0.019531
+DEAL:: line 77: 0.058594
+DEAL:: line 113: 0.019531
+DEAL:: line 120: 0.058594
+DEAL:: line 121: -0.019531
+DEAL:: line 172: 0.097656
+DEAL:: line 175: 0.29297
+DEAL:: line 176: -0.097656
+DEAL:: line 177: -0.097656
+DEAL:: line 178: 0.29297
+DEAL:: line 201: -0.29297
+DEAL:: line 202: 0.87891
+DEAL:: line 203: 0.097656
+DEAL:: line 204: -0.29297
DEAL::not identity constrained: 845
-DEAL:: line 202: 1.0
+DEAL:: line 202: 1.0000
DEAL::not identity constrained: 846
-DEAL:: line 120: 0.063
-DEAL:: line 175: 0.31
-DEAL:: line 201: -0.31
-DEAL:: line 202: 0.94
+DEAL:: line 120: 0.062500
+DEAL:: line 175: 0.31250
+DEAL:: line 201: -0.31250
+DEAL:: line 202: 0.93750
DEAL::not identity constrained: 855
-DEAL:: line 5: -0.062
-DEAL:: line 66: -0.062
-DEAL:: line 76: 0.56
-DEAL:: line 77: 0.56
+DEAL:: line 5: -0.062500
+DEAL:: line 66: -0.062500
+DEAL:: line 76: 0.56250
+DEAL:: line 77: 0.56250
DEAL::not identity constrained: 856
-DEAL:: line 121: -0.062
-DEAL:: line 176: -0.062
-DEAL:: line 203: 0.56
-DEAL:: line 204: 0.56
+DEAL:: line 121: -0.062500
+DEAL:: line 176: -0.062500
+DEAL:: line 203: 0.56250
+DEAL:: line 204: 0.56250
DEAL::not identity constrained: 857
-DEAL:: line 5: -0.020
-DEAL:: line 66: -0.020
-DEAL:: line 76: 0.18
-DEAL:: line 77: 0.18
-DEAL:: line 113: -0.0039
-DEAL:: line 120: 0.020
-DEAL:: line 121: -0.059
-DEAL:: line 172: -0.0039
-DEAL:: line 175: 0.020
-DEAL:: line 176: -0.059
-DEAL:: line 177: 0.035
-DEAL:: line 178: 0.035
-DEAL:: line 201: -0.18
-DEAL:: line 202: -0.18
-DEAL:: line 203: 0.53
-DEAL:: line 204: 0.53
+DEAL:: line 5: -0.019531
+DEAL:: line 66: -0.019531
+DEAL:: line 76: 0.17578
+DEAL:: line 77: 0.17578
+DEAL:: line 113: -0.0039063
+DEAL:: line 120: 0.019531
+DEAL:: line 121: -0.058594
+DEAL:: line 172: -0.0039063
+DEAL:: line 175: 0.019531
+DEAL:: line 176: -0.058594
+DEAL:: line 177: 0.035156
+DEAL:: line 178: 0.035156
+DEAL:: line 201: -0.17578
+DEAL:: line 202: -0.17578
+DEAL:: line 203: 0.52734
+DEAL:: line 204: 0.52734
DEAL::not identity constrained: 858
-DEAL:: line 5: 0.31
-DEAL:: line 66: 0.062
-DEAL:: line 76: 0.94
-DEAL:: line 77: -0.31
+DEAL:: line 5: 0.31250
+DEAL:: line 66: 0.062500
+DEAL:: line 76: 0.93750
+DEAL:: line 77: -0.31250
DEAL::not identity constrained: 859
-DEAL:: line 76: 1.0
+DEAL:: line 76: 1.0000
DEAL::not identity constrained: 860
-DEAL:: line 27: -0.062
-DEAL:: line 81: -0.062
-DEAL:: line 89: 0.56
-DEAL:: line 91: 0.56
+DEAL:: line 27: -0.062500
+DEAL:: line 81: -0.062500
+DEAL:: line 89: 0.56250
+DEAL:: line 91: 0.56250
DEAL::not identity constrained: 861
-DEAL:: line 1: -0.0039
-DEAL:: line 5: -0.020
-DEAL:: line 26: 0.020
-DEAL:: line 27: -0.059
-DEAL:: line 64: -0.0039
-DEAL:: line 66: -0.020
-DEAL:: line 70: 0.035
-DEAL:: line 71: 0.035
-DEAL:: line 76: 0.18
-DEAL:: line 77: 0.18
-DEAL:: line 80: 0.020
-DEAL:: line 81: -0.059
-DEAL:: line 88: -0.18
-DEAL:: line 89: 0.53
-DEAL:: line 90: -0.18
-DEAL:: line 91: 0.53
+DEAL:: line 1: -0.0039063
+DEAL:: line 5: -0.019531
+DEAL:: line 26: 0.019531
+DEAL:: line 27: -0.058594
+DEAL:: line 64: -0.0039063
+DEAL:: line 66: -0.019531
+DEAL:: line 70: 0.035156
+DEAL:: line 71: 0.035156
+DEAL:: line 76: 0.17578
+DEAL:: line 77: 0.17578
+DEAL:: line 80: 0.019531
+DEAL:: line 81: -0.058594
+DEAL:: line 88: -0.17578
+DEAL:: line 89: 0.52734
+DEAL:: line 90: -0.17578
+DEAL:: line 91: 0.52734
DEAL::not identity constrained: 866
-DEAL:: line 27: 0.31
-DEAL:: line 81: 0.062
-DEAL:: line 89: 0.94
-DEAL:: line 91: -0.31
+DEAL:: line 27: 0.31250
+DEAL:: line 81: 0.062500
+DEAL:: line 89: 0.93750
+DEAL:: line 91: -0.31250
DEAL::not identity constrained: 867
-DEAL:: line 1: 0.020
-DEAL:: line 5: 0.098
-DEAL:: line 26: -0.098
-DEAL:: line 27: 0.29
-DEAL:: line 64: 0.0039
-DEAL:: line 66: 0.020
-DEAL:: line 70: 0.059
-DEAL:: line 71: -0.020
-DEAL:: line 76: 0.29
-DEAL:: line 77: -0.098
-DEAL:: line 80: -0.020
-DEAL:: line 81: 0.059
-DEAL:: line 88: -0.29
-DEAL:: line 89: 0.88
-DEAL:: line 90: 0.098
-DEAL:: line 91: -0.29
+DEAL:: line 1: 0.019531
+DEAL:: line 5: 0.097656
+DEAL:: line 26: -0.097656
+DEAL:: line 27: 0.29297
+DEAL:: line 64: 0.0039063
+DEAL:: line 66: 0.019531
+DEAL:: line 70: 0.058594
+DEAL:: line 71: -0.019531
+DEAL:: line 76: 0.29297
+DEAL:: line 77: -0.097656
+DEAL:: line 80: -0.019531
+DEAL:: line 81: 0.058594
+DEAL:: line 88: -0.29297
+DEAL:: line 89: 0.87891
+DEAL:: line 90: 0.097656
+DEAL:: line 91: -0.29297
DEAL::not identity constrained: 868
-DEAL:: line 89: 1.0
+DEAL:: line 89: 1.0000
DEAL::not identity constrained: 869
-DEAL:: line 70: 0.063
-DEAL:: line 76: 0.31
-DEAL:: line 88: -0.31
-DEAL:: line 89: 0.94
+DEAL:: line 70: 0.062500
+DEAL:: line 76: 0.31250
+DEAL:: line 88: -0.31250
+DEAL:: line 89: 0.93750
DEAL::not identity constrained: 870
-DEAL:: line 121: 0.31
-DEAL:: line 176: 0.062
-DEAL:: line 203: 0.94
-DEAL:: line 204: -0.31
+DEAL:: line 121: 0.31250
+DEAL:: line 176: 0.062500
+DEAL:: line 203: 0.93750
+DEAL:: line 204: -0.31250
DEAL::not identity constrained: 871
-DEAL:: line 203: 1.0
+DEAL:: line 203: 1.0000
DEAL::not identity constrained: 872
-DEAL:: line 5: 0.098
-DEAL:: line 66: 0.020
-DEAL:: line 76: 0.29
-DEAL:: line 77: -0.098
-DEAL:: line 113: 0.020
-DEAL:: line 120: -0.098
-DEAL:: line 121: 0.29
-DEAL:: line 172: 0.0039
-DEAL:: line 175: -0.020
-DEAL:: line 176: 0.059
-DEAL:: line 177: 0.059
-DEAL:: line 178: -0.020
-DEAL:: line 201: -0.29
-DEAL:: line 202: 0.098
-DEAL:: line 203: 0.88
-DEAL:: line 204: -0.29
+DEAL:: line 5: 0.097656
+DEAL:: line 66: 0.019531
+DEAL:: line 76: 0.29297
+DEAL:: line 77: -0.097656
+DEAL:: line 113: 0.019531
+DEAL:: line 120: -0.097656
+DEAL:: line 121: 0.29297
+DEAL:: line 172: 0.0039063
+DEAL:: line 175: -0.019531
+DEAL:: line 176: 0.058594
+DEAL:: line 177: 0.058594
+DEAL:: line 178: -0.019531
+DEAL:: line 201: -0.29297
+DEAL:: line 202: 0.097656
+DEAL:: line 203: 0.87891
+DEAL:: line 204: -0.29297
DEAL::not identity constrained: 873
-DEAL:: line 76: 0.31
-DEAL:: line 177: 0.063
-DEAL:: line 201: -0.31
-DEAL:: line 203: 0.94
+DEAL:: line 76: 0.31250
+DEAL:: line 177: 0.062500
+DEAL:: line 201: -0.31250
+DEAL:: line 203: 0.93750
DEAL::not identity constrained: 882
-DEAL:: line 176: 1.0
+DEAL:: line 176: 1.0000
DEAL::not identity constrained: 883
-DEAL:: line 66: 0.31
-DEAL:: line 172: 0.063
-DEAL:: line 175: -0.31
-DEAL:: line 176: 0.94
+DEAL:: line 66: 0.31250
+DEAL:: line 172: 0.062500
+DEAL:: line 175: -0.31250
+DEAL:: line 176: 0.93750
DEAL::not identity constrained: 884
-DEAL:: line 77: 1.0
+DEAL:: line 77: 1.0000
DEAL::not identity constrained: 885
-DEAL:: line 5: 0.063
-DEAL:: line 66: 0.31
-DEAL:: line 76: -0.31
-DEAL:: line 77: 0.94
+DEAL:: line 5: 0.062500
+DEAL:: line 66: 0.31250
+DEAL:: line 76: -0.31250
+DEAL:: line 77: 0.93750
DEAL::not identity constrained: 886
-DEAL:: line 81: 1.0
+DEAL:: line 81: 1.0000
DEAL::not identity constrained: 887
-DEAL:: line 64: 0.063
-DEAL:: line 66: 0.31
-DEAL:: line 80: -0.31
-DEAL:: line 81: 0.94
+DEAL:: line 64: 0.062500
+DEAL:: line 66: 0.31250
+DEAL:: line 80: -0.31250
+DEAL:: line 81: 0.93750
DEAL::not identity constrained: 892
-DEAL:: line 91: 1.0
+DEAL:: line 91: 1.0000
DEAL::not identity constrained: 893
-DEAL:: line 71: 0.063
-DEAL:: line 77: 0.31
-DEAL:: line 90: -0.31
-DEAL:: line 91: 0.94
+DEAL:: line 71: 0.062500
+DEAL:: line 77: 0.31250
+DEAL:: line 90: -0.31250
+DEAL:: line 91: 0.93750
DEAL::not identity constrained: 894
-DEAL:: line 27: 0.063
-DEAL:: line 81: 0.31
-DEAL:: line 89: -0.31
-DEAL:: line 91: 0.94
+DEAL:: line 27: 0.062500
+DEAL:: line 81: 0.31250
+DEAL:: line 89: -0.31250
+DEAL:: line 91: 0.93750
DEAL::not identity constrained: 895
-DEAL:: line 1: 0.0039
-DEAL:: line 5: 0.020
-DEAL:: line 26: -0.020
-DEAL:: line 27: 0.059
-DEAL:: line 64: 0.020
-DEAL:: line 66: 0.098
-DEAL:: line 70: -0.020
-DEAL:: line 71: 0.059
-DEAL:: line 76: -0.098
-DEAL:: line 77: 0.29
-DEAL:: line 80: -0.098
-DEAL:: line 81: 0.29
-DEAL:: line 88: 0.098
-DEAL:: line 89: -0.29
-DEAL:: line 90: -0.29
-DEAL:: line 91: 0.88
+DEAL:: line 1: 0.0039063
+DEAL:: line 5: 0.019531
+DEAL:: line 26: -0.019531
+DEAL:: line 27: 0.058594
+DEAL:: line 64: 0.019531
+DEAL:: line 66: 0.097656
+DEAL:: line 70: -0.019531
+DEAL:: line 71: 0.058594
+DEAL:: line 76: -0.097656
+DEAL:: line 77: 0.29297
+DEAL:: line 80: -0.097656
+DEAL:: line 81: 0.29297
+DEAL:: line 88: 0.097656
+DEAL:: line 89: -0.29297
+DEAL:: line 90: -0.29297
+DEAL:: line 91: 0.87891
DEAL::not identity constrained: 896
-DEAL:: line 204: 1.0
+DEAL:: line 204: 1.0000
DEAL::not identity constrained: 897
-DEAL:: line 121: 0.063
-DEAL:: line 176: 0.31
-DEAL:: line 203: -0.31
-DEAL:: line 204: 0.94
+DEAL:: line 121: 0.062500
+DEAL:: line 176: 0.31250
+DEAL:: line 203: -0.31250
+DEAL:: line 204: 0.93750
DEAL::not identity constrained: 898
-DEAL:: line 77: 0.31
-DEAL:: line 178: 0.063
-DEAL:: line 202: -0.31
-DEAL:: line 204: 0.94
+DEAL:: line 77: 0.31250
+DEAL:: line 178: 0.062500
+DEAL:: line 202: -0.31250
+DEAL:: line 204: 0.93750
DEAL::not identity constrained: 899
-DEAL:: line 5: 0.020
-DEAL:: line 66: 0.098
-DEAL:: line 76: -0.098
-DEAL:: line 77: 0.29
-DEAL:: line 113: 0.0039
-DEAL:: line 120: -0.020
-DEAL:: line 121: 0.059
-DEAL:: line 172: 0.020
-DEAL:: line 175: -0.098
-DEAL:: line 176: 0.29
-DEAL:: line 177: -0.020
-DEAL:: line 178: 0.059
-DEAL:: line 201: 0.098
-DEAL:: line 202: -0.29
-DEAL:: line 203: -0.29
-DEAL:: line 204: 0.88
+DEAL:: line 5: 0.019531
+DEAL:: line 66: 0.097656
+DEAL:: line 76: -0.097656
+DEAL:: line 77: 0.29297
+DEAL:: line 113: 0.0039063
+DEAL:: line 120: -0.019531
+DEAL:: line 121: 0.058594
+DEAL:: line 172: 0.019531
+DEAL:: line 175: -0.097656
+DEAL:: line 176: 0.29297
+DEAL:: line 177: -0.019531
+DEAL:: line 178: 0.058594
+DEAL:: line 201: 0.097656
+DEAL:: line 202: -0.29297
+DEAL:: line 203: -0.29297
+DEAL:: line 204: 0.87891
DEAL::Checking DGQ0 in 1d:
DEAL::0
DEAL::0
DEAL::4
DEAL::11111111111111111111111111111
DEAL::not identity constrained: 16
-DEAL:: line 2: 0.50
+DEAL:: line 2: 0.50000
DEAL::not identity constrained: 18
-DEAL:: line 2: 0.50
+DEAL:: line 2: 0.50000
DEAL::not identity constrained: 26
-DEAL:: line 5: 0.50
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 28
-DEAL:: line 5: 0.50
+DEAL:: line 5: 0.50000
DEAL::Checking Nedelec0 in 3d:
DEAL::40
DEAL::2
DEAL::40
DEAL::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 68
-DEAL:: line 2: 0.50
+DEAL:: line 2: 0.50000
DEAL::not identity constrained: 71
-DEAL:: line 2: 0.25
-DEAL:: line 6: 0.25
+DEAL:: line 2: 0.25000
+DEAL:: line 6: 0.25000
DEAL::not identity constrained: 72
-DEAL:: line 8: 0.50
+DEAL:: line 8: 0.50000
DEAL::not identity constrained: 73
-DEAL:: line 8: 0.25
-DEAL:: line 9: 0.25
+DEAL:: line 8: 0.25000
+DEAL:: line 9: 0.25000
DEAL::not identity constrained: 75
-DEAL:: line 2: 0.50
+DEAL:: line 2: 0.50000
DEAL::not identity constrained: 77
-DEAL:: line 2: 0.25
-DEAL:: line 6: 0.25
+DEAL:: line 2: 0.25000
+DEAL:: line 6: 0.25000
DEAL::not identity constrained: 78
-DEAL:: line 9: 0.50
+DEAL:: line 9: 0.50000
DEAL::not identity constrained: 79
-DEAL:: line 20: 0.50
+DEAL:: line 20: 0.50000
DEAL::not identity constrained: 80
-DEAL:: line 20: 0.25
-DEAL:: line 21: 0.25
+DEAL:: line 20: 0.25000
+DEAL:: line 21: 0.25000
DEAL::not identity constrained: 81
-DEAL:: line 22: 0.50
+DEAL:: line 22: 0.50000
DEAL::not identity constrained: 82
-DEAL:: line 6: 0.25
-DEAL:: line 22: 0.25
+DEAL:: line 6: 0.25000
+DEAL:: line 22: 0.25000
DEAL::not identity constrained: 87
-DEAL:: line 21: 0.50
+DEAL:: line 21: 0.50000
DEAL::not identity constrained: 88
-DEAL:: line 22: 0.50
+DEAL:: line 22: 0.50000
DEAL::not identity constrained: 89
-DEAL:: line 6: 0.25
-DEAL:: line 22: 0.25
+DEAL:: line 6: 0.25000
+DEAL:: line 22: 0.25000
DEAL::not identity constrained: 92
-DEAL:: line 20: 0.50
+DEAL:: line 20: 0.50000
DEAL::not identity constrained: 93
-DEAL:: line 20: 0.25
-DEAL:: line 21: 0.25
+DEAL:: line 20: 0.25000
+DEAL:: line 21: 0.25000
DEAL::not identity constrained: 94
-DEAL:: line 6: 0.50
+DEAL:: line 6: 0.50000
DEAL::not identity constrained: 95
-DEAL:: line 8: 0.50
+DEAL:: line 8: 0.50000
DEAL::not identity constrained: 96
-DEAL:: line 8: 0.25
-DEAL:: line 9: 0.25
+DEAL:: line 8: 0.25000
+DEAL:: line 9: 0.25000
DEAL::not identity constrained: 97
-DEAL:: line 21: 0.50
+DEAL:: line 21: 0.50000
DEAL::not identity constrained: 98
-DEAL:: line 6: 0.50
+DEAL:: line 6: 0.50000
DEAL::not identity constrained: 99
-DEAL:: line 9: 0.50
+DEAL:: line 9: 0.50000
DEAL::not identity constrained: 117
-DEAL:: line 13: 0.50
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 119
-DEAL:: line 13: 0.25
-DEAL:: line 16: 0.25
+DEAL:: line 13: 0.25000
+DEAL:: line 16: 0.25000
DEAL::not identity constrained: 120
-DEAL:: line 9: 0.25
-DEAL:: line 18: 0.25
+DEAL:: line 9: 0.25000
+DEAL:: line 18: 0.25000
DEAL::not identity constrained: 122
-DEAL:: line 13: 0.50
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 124
-DEAL:: line 13: 0.25
-DEAL:: line 16: 0.25
+DEAL:: line 13: 0.25000
+DEAL:: line 16: 0.25000
DEAL::not identity constrained: 125
-DEAL:: line 18: 0.50
+DEAL:: line 18: 0.50000
DEAL::not identity constrained: 126
-DEAL:: line 21: 0.25
-DEAL:: line 31: 0.25
+DEAL:: line 21: 0.25000
+DEAL:: line 31: 0.25000
DEAL::not identity constrained: 127
-DEAL:: line 32: 0.50
+DEAL:: line 32: 0.50000
DEAL::not identity constrained: 128
-DEAL:: line 16: 0.25
-DEAL:: line 32: 0.25
+DEAL:: line 16: 0.25000
+DEAL:: line 32: 0.25000
DEAL::not identity constrained: 131
-DEAL:: line 31: 0.50
+DEAL:: line 31: 0.50000
DEAL::not identity constrained: 132
-DEAL:: line 32: 0.50
+DEAL:: line 32: 0.50000
DEAL::not identity constrained: 133
-DEAL:: line 16: 0.25
-DEAL:: line 32: 0.25
+DEAL:: line 16: 0.25000
+DEAL:: line 32: 0.25000
DEAL::not identity constrained: 136
-DEAL:: line 21: 0.25
-DEAL:: line 31: 0.25
+DEAL:: line 21: 0.25000
+DEAL:: line 31: 0.25000
DEAL::not identity constrained: 137
-DEAL:: line 16: 0.50
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 138
-DEAL:: line 9: 0.25
-DEAL:: line 18: 0.25
+DEAL:: line 9: 0.25000
+DEAL:: line 18: 0.25000
DEAL::not identity constrained: 139
-DEAL:: line 31: 0.50
+DEAL:: line 31: 0.50000
DEAL::not identity constrained: 140
-DEAL:: line 16: 0.50
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 141
-DEAL:: line 18: 0.50
+DEAL:: line 18: 0.50000
DEAL::Checking RaviartThomas0 in 2d:
DEAL::4
DEAL::1
DEAL::4
DEAL::11111111111111111111111111111
DEAL::not identity constrained: 16
-DEAL:: line 2: 0.50
+DEAL:: line 2: 0.50000
DEAL::not identity constrained: 18
-DEAL:: line 2: 0.50
+DEAL:: line 2: 0.50000
DEAL::not identity constrained: 26
-DEAL:: line 5: 0.50
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 28
-DEAL:: line 5: 0.50
+DEAL:: line 5: 0.50000
DEAL::Checking RaviartThomas1 in 2d:
DEAL::8
DEAL::2
DEAL::8
DEAL::11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 48
-DEAL:: line 4: 0.50
-DEAL:: line 5: -0.43
+DEAL:: line 4: 0.50000
+DEAL:: line 5: -0.43301
DEAL::not identity constrained: 49
-DEAL:: line 5: 0.25
+DEAL:: line 5: 0.25000
DEAL::not identity constrained: 56
-DEAL:: line 4: 0.50
-DEAL:: line 5: 0.43
+DEAL:: line 4: 0.50000
+DEAL:: line 5: 0.43301
DEAL::not identity constrained: 57
-DEAL:: line 5: 0.25
+DEAL:: line 5: 0.25000
DEAL::not identity constrained: 84
-DEAL:: line 14: 0.50
-DEAL:: line 15: -0.43
+DEAL:: line 14: 0.50000
+DEAL:: line 15: -0.43301
DEAL::not identity constrained: 85
-DEAL:: line 15: 0.25
+DEAL:: line 15: 0.25000
DEAL::not identity constrained: 92
-DEAL:: line 14: 0.50
-DEAL:: line 15: 0.43
+DEAL:: line 14: 0.50000
+DEAL:: line 15: 0.43301
DEAL::not identity constrained: 93
-DEAL:: line 15: 0.25
+DEAL:: line 15: 0.25000
DEAL::Checking RaviartThomas2 in 2d:
DEAL::12
DEAL::2
DEAL::12
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 96
-DEAL:: line 6: 0.50
-DEAL:: line 7: -0.43
+DEAL:: line 6: 0.50000
+DEAL:: line 7: -0.43301
DEAL::not identity constrained: 97
-DEAL:: line 7: 0.25
-DEAL:: line 8: -0.48
+DEAL:: line 7: 0.25000
+DEAL:: line 8: -0.48412
DEAL::not identity constrained: 98
-DEAL:: line 8: 0.12
+DEAL:: line 8: 0.12500
DEAL::not identity constrained: 114
-DEAL:: line 6: 0.50
-DEAL:: line 7: 0.43
+DEAL:: line 6: 0.50000
+DEAL:: line 7: 0.43301
DEAL::not identity constrained: 115
-DEAL:: line 7: 0.25
-DEAL:: line 8: 0.48
+DEAL:: line 7: 0.25000
+DEAL:: line 8: 0.48412
DEAL::not identity constrained: 116
-DEAL:: line 8: 0.12
+DEAL:: line 8: 0.12500
DEAL::not identity constrained: 174
-DEAL:: line 27: 0.50
-DEAL:: line 28: -0.43
+DEAL:: line 27: 0.50000
+DEAL:: line 28: -0.43301
DEAL::not identity constrained: 175
-DEAL:: line 28: 0.25
-DEAL:: line 29: -0.48
+DEAL:: line 28: 0.25000
+DEAL:: line 29: -0.48412
DEAL::not identity constrained: 176
-DEAL:: line 29: 0.12
+DEAL:: line 29: 0.12500
DEAL::not identity constrained: 192
-DEAL:: line 27: 0.50
-DEAL:: line 28: 0.43
+DEAL:: line 27: 0.50000
+DEAL:: line 28: 0.43301
DEAL::not identity constrained: 193
-DEAL:: line 28: 0.25
-DEAL:: line 29: 0.48
+DEAL:: line 28: 0.25000
+DEAL:: line 29: 0.48412
DEAL::not identity constrained: 194
-DEAL:: line 29: 0.12
+DEAL:: line 29: 0.12500
DEAL::Checking RaviartThomasNodal0 in 2d:
DEAL::4
DEAL::1
DEAL::4
DEAL::11111111111111110101111111010
DEAL::not identity constrained: 16
-DEAL:: line 2: 1.0
+DEAL:: line 2: 1.0000
DEAL::not identity constrained: 18
-DEAL:: line 2: 1.0
+DEAL:: line 2: 1.0000
DEAL::not identity constrained: 26
-DEAL:: line 5: 1.0
+DEAL:: line 5: 1.0000
DEAL::not identity constrained: 28
-DEAL:: line 5: 1.0
+DEAL:: line 5: 1.0000
DEAL::Checking RaviartThomasNodal1 in 2d:
DEAL::8
DEAL::2
DEAL::8
DEAL::11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 48
-DEAL:: line 4: 1.2
-DEAL:: line 5: -0.18
+DEAL:: line 4: 1.1830
+DEAL:: line 5: -0.18301
DEAL::not identity constrained: 49
-DEAL:: line 4: 0.68
-DEAL:: line 5: 0.32
+DEAL:: line 4: 0.68301
+DEAL:: line 5: 0.31699
DEAL::not identity constrained: 56
-DEAL:: line 4: 0.32
-DEAL:: line 5: 0.68
+DEAL:: line 4: 0.31699
+DEAL:: line 5: 0.68301
DEAL::not identity constrained: 57
-DEAL:: line 4: -0.18
-DEAL:: line 5: 1.2
+DEAL:: line 4: -0.18301
+DEAL:: line 5: 1.1830
DEAL::not identity constrained: 84
-DEAL:: line 14: 1.2
-DEAL:: line 15: -0.18
+DEAL:: line 14: 1.1830
+DEAL:: line 15: -0.18301
DEAL::not identity constrained: 85
-DEAL:: line 14: 0.68
-DEAL:: line 15: 0.32
+DEAL:: line 14: 0.68301
+DEAL:: line 15: 0.31699
DEAL::not identity constrained: 92
-DEAL:: line 14: 0.32
-DEAL:: line 15: 0.68
+DEAL:: line 14: 0.31699
+DEAL:: line 15: 0.68301
DEAL::not identity constrained: 93
-DEAL:: line 14: -0.18
-DEAL:: line 15: 1.2
+DEAL:: line 14: -0.18301
+DEAL:: line 15: 1.1830
DEAL::Checking RaviartThomasNodal2 in 2d:
DEAL::12
DEAL::3
DEAL::12
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 96
-DEAL:: line 6: 1.2
-DEAL:: line 7: -0.31
-DEAL:: line 8: 0.083
+DEAL:: line 6: 1.2288
+DEAL:: line 7: -0.31216
+DEAL:: line 8: 0.083333
DEAL::not identity constrained: 97
-DEAL:: line 6: 0.53
-DEAL:: line 7: 0.58
-DEAL:: line 8: -0.11
+DEAL:: line 6: 0.53108
+DEAL:: line 7: 0.58333
+DEAL:: line 8: -0.11442
DEAL::not identity constrained: 98
-DEAL:: line 6: 0.083
-DEAL:: line 7: 0.98
-DEAL:: line 8: -0.062
+DEAL:: line 6: 0.083333
+DEAL:: line 7: 0.97883
+DEAL:: line 8: -0.062164
DEAL::not identity constrained: 114
-DEAL:: line 6: -0.062
-DEAL:: line 7: 0.98
-DEAL:: line 8: 0.083
+DEAL:: line 6: -0.062164
+DEAL:: line 7: 0.97883
+DEAL:: line 8: 0.083333
DEAL::not identity constrained: 115
-DEAL:: line 6: -0.11
-DEAL:: line 7: 0.58
-DEAL:: line 8: 0.53
+DEAL:: line 6: -0.11442
+DEAL:: line 7: 0.58333
+DEAL:: line 8: 0.53108
DEAL::not identity constrained: 116
-DEAL:: line 6: 0.083
-DEAL:: line 7: -0.31
-DEAL:: line 8: 1.2
+DEAL:: line 6: 0.083333
+DEAL:: line 7: -0.31216
+DEAL:: line 8: 1.2288
DEAL::not identity constrained: 174
-DEAL:: line 27: 1.2
-DEAL:: line 28: -0.31
-DEAL:: line 29: 0.083
+DEAL:: line 27: 1.2288
+DEAL:: line 28: -0.31216
+DEAL:: line 29: 0.083333
DEAL::not identity constrained: 175
-DEAL:: line 27: 0.53
-DEAL:: line 28: 0.58
-DEAL:: line 29: -0.11
+DEAL:: line 27: 0.53108
+DEAL:: line 28: 0.58333
+DEAL:: line 29: -0.11442
DEAL::not identity constrained: 176
-DEAL:: line 27: 0.083
-DEAL:: line 28: 0.98
-DEAL:: line 29: -0.062
+DEAL:: line 27: 0.083333
+DEAL:: line 28: 0.97883
+DEAL:: line 29: -0.062164
DEAL::not identity constrained: 192
-DEAL:: line 27: -0.062
-DEAL:: line 28: 0.98
-DEAL:: line 29: 0.083
+DEAL:: line 27: -0.062164
+DEAL:: line 28: 0.97883
+DEAL:: line 29: 0.083333
DEAL::not identity constrained: 193
-DEAL:: line 27: -0.11
-DEAL:: line 28: 0.58
-DEAL:: line 29: 0.53
+DEAL:: line 27: -0.11442
+DEAL:: line 28: 0.58333
+DEAL:: line 29: 0.53108
DEAL::not identity constrained: 194
-DEAL:: line 27: 0.083
-DEAL:: line 28: -0.31
-DEAL:: line 29: 1.2
+DEAL:: line 27: 0.083333
+DEAL:: line 28: -0.31216
+DEAL:: line 29: 1.2288
DEAL::Checking RaviartThomasNodal0 in 3d:
DEAL::16
DEAL::1
DEAL::16
DEAL::1111111111111111111111111111111111111111110111011111101110110010011111111111011101111101110100100
DEAL::not identity constrained: 42
-DEAL:: line 2: 1.0
+DEAL:: line 2: 1.0000
DEAL::not identity constrained: 46
-DEAL:: line 2: 1.0
+DEAL:: line 2: 1.0000
DEAL::not identity constrained: 53
-DEAL:: line 15: 1.0
+DEAL:: line 15: 1.0000
DEAL::not identity constrained: 57
-DEAL:: line 15: 1.0
+DEAL:: line 15: 1.0000
DEAL::not identity constrained: 60
-DEAL:: line 2: 1.0
+DEAL:: line 2: 1.0000
DEAL::not identity constrained: 61
-DEAL:: line 15: 1.0
+DEAL:: line 15: 1.0000
DEAL::not identity constrained: 63
-DEAL:: line 2: 1.0
+DEAL:: line 2: 1.0000
DEAL::not identity constrained: 64
-DEAL:: line 15: 1.0
+DEAL:: line 15: 1.0000
DEAL::not identity constrained: 76
-DEAL:: line 7: 1.0
+DEAL:: line 7: 1.0000
DEAL::not identity constrained: 80
-DEAL:: line 7: 1.0
+DEAL:: line 7: 1.0000
DEAL::not identity constrained: 86
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::not identity constrained: 90
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::not identity constrained: 92
-DEAL:: line 7: 1.0
+DEAL:: line 7: 1.0000
DEAL::not identity constrained: 93
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::not identity constrained: 95
-DEAL:: line 7: 1.0
+DEAL:: line 7: 1.0000
DEAL::not identity constrained: 96
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::Checking RaviartThomasNodal1 in 3d:
DEAL::64
DEAL::4
DEAL::64
DEAL::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 264
-DEAL:: line 8: 1.4
-DEAL:: line 9: -0.22
-DEAL:: line 10: -0.22
-DEAL:: line 11: 0.033
+DEAL:: line 8: 1.3995
+DEAL:: line 9: -0.21651
+DEAL:: line 10: -0.21651
+DEAL:: line 11: 0.033494
DEAL::not identity constrained: 265
-DEAL:: line 8: 0.81
-DEAL:: line 9: 0.38
-DEAL:: line 10: -0.12
-DEAL:: line 11: -0.058
+DEAL:: line 8: 0.80801
+DEAL:: line 9: 0.37500
+DEAL:: line 10: -0.12500
+DEAL:: line 11: -0.058013
DEAL::not identity constrained: 266
-DEAL:: line 8: 0.81
-DEAL:: line 9: -0.12
-DEAL:: line 10: 0.38
-DEAL:: line 11: -0.058
+DEAL:: line 8: 0.80801
+DEAL:: line 9: -0.12500
+DEAL:: line 10: 0.37500
+DEAL:: line 11: -0.058013
DEAL::not identity constrained: 267
-DEAL:: line 8: 0.47
-DEAL:: line 9: 0.22
-DEAL:: line 10: 0.22
-DEAL:: line 11: 0.10
+DEAL:: line 8: 0.46651
+DEAL:: line 9: 0.21651
+DEAL:: line 10: 0.21651
+DEAL:: line 11: 0.10048
DEAL::not identity constrained: 292
-DEAL:: line 8: 0.37
-DEAL:: line 9: -0.058
-DEAL:: line 10: 0.81
-DEAL:: line 11: -0.12
+DEAL:: line 8: 0.37500
+DEAL:: line 9: -0.058013
+DEAL:: line 10: 0.80801
+DEAL:: line 11: -0.12500
DEAL::not identity constrained: 293
-DEAL:: line 8: 0.22
-DEAL:: line 9: 0.10
-DEAL:: line 10: 0.47
-DEAL:: line 11: 0.22
+DEAL:: line 8: 0.21651
+DEAL:: line 9: 0.10048
+DEAL:: line 10: 0.46651
+DEAL:: line 11: 0.21651
DEAL::not identity constrained: 294
-DEAL:: line 8: -0.22
-DEAL:: line 9: 0.033
-DEAL:: line 10: 1.4
-DEAL:: line 11: -0.22
+DEAL:: line 8: -0.21651
+DEAL:: line 9: 0.033494
+DEAL:: line 10: 1.3995
+DEAL:: line 11: -0.21651
DEAL::not identity constrained: 295
-DEAL:: line 8: -0.13
-DEAL:: line 9: -0.058
-DEAL:: line 10: 0.81
-DEAL:: line 11: 0.37
+DEAL:: line 8: -0.12500
+DEAL:: line 9: -0.058013
+DEAL:: line 10: 0.80801
+DEAL:: line 11: 0.37500
DEAL::not identity constrained: 332
-DEAL:: line 84: 1.4
-DEAL:: line 85: -0.22
-DEAL:: line 86: -0.22
-DEAL:: line 87: 0.033
+DEAL:: line 84: 1.3995
+DEAL:: line 85: -0.21651
+DEAL:: line 86: -0.21651
+DEAL:: line 87: 0.033494
DEAL::not identity constrained: 333
-DEAL:: line 84: 0.81
-DEAL:: line 85: 0.38
-DEAL:: line 86: -0.12
-DEAL:: line 87: -0.058
+DEAL:: line 84: 0.80801
+DEAL:: line 85: 0.37500
+DEAL:: line 86: -0.12500
+DEAL:: line 87: -0.058013
DEAL::not identity constrained: 334
-DEAL:: line 84: 0.81
-DEAL:: line 85: -0.12
-DEAL:: line 86: 0.38
-DEAL:: line 87: -0.058
+DEAL:: line 84: 0.80801
+DEAL:: line 85: -0.12500
+DEAL:: line 86: 0.37500
+DEAL:: line 87: -0.058013
DEAL::not identity constrained: 335
-DEAL:: line 84: 0.47
-DEAL:: line 85: 0.22
-DEAL:: line 86: 0.22
-DEAL:: line 87: 0.10
+DEAL:: line 84: 0.46651
+DEAL:: line 85: 0.21651
+DEAL:: line 86: 0.21651
+DEAL:: line 87: 0.10048
DEAL::not identity constrained: 360
-DEAL:: line 84: 0.38
-DEAL:: line 85: 0.81
-DEAL:: line 86: -0.058
-DEAL:: line 87: -0.13
+DEAL:: line 84: 0.37500
+DEAL:: line 85: 0.80801
+DEAL:: line 86: -0.058013
+DEAL:: line 87: -0.12500
DEAL::not identity constrained: 361
-DEAL:: line 84: -0.22
-DEAL:: line 85: 1.4
-DEAL:: line 86: 0.033
-DEAL:: line 87: -0.22
+DEAL:: line 84: -0.21651
+DEAL:: line 85: 1.3995
+DEAL:: line 86: 0.033494
+DEAL:: line 87: -0.21651
DEAL::not identity constrained: 362
-DEAL:: line 84: 0.22
-DEAL:: line 85: 0.47
-DEAL:: line 86: 0.10
-DEAL:: line 87: 0.22
+DEAL:: line 84: 0.21651
+DEAL:: line 85: 0.46651
+DEAL:: line 86: 0.10048
+DEAL:: line 87: 0.21651
DEAL::not identity constrained: 363
-DEAL:: line 84: -0.13
-DEAL:: line 85: 0.81
-DEAL:: line 86: -0.058
-DEAL:: line 87: 0.37
+DEAL:: line 84: -0.12500
+DEAL:: line 85: 0.80801
+DEAL:: line 86: -0.058013
+DEAL:: line 87: 0.37500
DEAL::not identity constrained: 384
-DEAL:: line 8: 0.38
-DEAL:: line 9: 0.81
-DEAL:: line 10: -0.058
-DEAL:: line 11: -0.13
+DEAL:: line 8: 0.37500
+DEAL:: line 9: 0.80801
+DEAL:: line 10: -0.058013
+DEAL:: line 11: -0.12500
DEAL::not identity constrained: 385
-DEAL:: line 8: -0.22
-DEAL:: line 9: 1.4
-DEAL:: line 10: 0.033
-DEAL:: line 11: -0.22
+DEAL:: line 8: -0.21651
+DEAL:: line 9: 1.3995
+DEAL:: line 10: 0.033494
+DEAL:: line 11: -0.21651
DEAL::not identity constrained: 386
-DEAL:: line 8: 0.22
-DEAL:: line 9: 0.47
-DEAL:: line 10: 0.10
-DEAL:: line 11: 0.22
+DEAL:: line 8: 0.21651
+DEAL:: line 9: 0.46651
+DEAL:: line 10: 0.10048
+DEAL:: line 11: 0.21651
DEAL::not identity constrained: 387
-DEAL:: line 8: -0.13
-DEAL:: line 9: 0.81
-DEAL:: line 10: -0.058
-DEAL:: line 11: 0.37
+DEAL:: line 8: -0.12500
+DEAL:: line 9: 0.80801
+DEAL:: line 10: -0.058013
+DEAL:: line 11: 0.37500
DEAL::not identity constrained: 388
-DEAL:: line 84: 0.37
-DEAL:: line 85: -0.058
-DEAL:: line 86: 0.81
-DEAL:: line 87: -0.12
+DEAL:: line 84: 0.37500
+DEAL:: line 85: -0.058013
+DEAL:: line 86: 0.80801
+DEAL:: line 87: -0.12500
DEAL::not identity constrained: 389
-DEAL:: line 84: 0.22
-DEAL:: line 85: 0.10
-DEAL:: line 86: 0.47
-DEAL:: line 87: 0.22
+DEAL:: line 84: 0.21651
+DEAL:: line 85: 0.10048
+DEAL:: line 86: 0.46651
+DEAL:: line 87: 0.21651
DEAL::not identity constrained: 390
-DEAL:: line 84: -0.22
-DEAL:: line 85: 0.033
-DEAL:: line 86: 1.4
-DEAL:: line 87: -0.22
+DEAL:: line 84: -0.21651
+DEAL:: line 85: 0.033494
+DEAL:: line 86: 1.3995
+DEAL:: line 87: -0.21651
DEAL::not identity constrained: 391
-DEAL:: line 84: -0.13
-DEAL:: line 85: -0.058
-DEAL:: line 86: 0.81
-DEAL:: line 87: 0.37
+DEAL:: line 84: -0.12500
+DEAL:: line 85: -0.058013
+DEAL:: line 86: 0.80801
+DEAL:: line 87: 0.37500
DEAL::not identity constrained: 408
-DEAL:: line 8: 0.10
-DEAL:: line 9: 0.22
-DEAL:: line 10: 0.22
-DEAL:: line 11: 0.47
+DEAL:: line 8: 0.10048
+DEAL:: line 9: 0.21651
+DEAL:: line 10: 0.21651
+DEAL:: line 11: 0.46651
DEAL::not identity constrained: 409
-DEAL:: line 8: -0.058
-DEAL:: line 9: 0.38
-DEAL:: line 10: -0.12
-DEAL:: line 11: 0.81
+DEAL:: line 8: -0.058013
+DEAL:: line 9: 0.37500
+DEAL:: line 10: -0.12500
+DEAL:: line 11: 0.80801
DEAL::not identity constrained: 410
-DEAL:: line 8: -0.058
-DEAL:: line 9: -0.12
-DEAL:: line 10: 0.38
-DEAL:: line 11: 0.81
+DEAL:: line 8: -0.058013
+DEAL:: line 9: -0.12500
+DEAL:: line 10: 0.37500
+DEAL:: line 11: 0.80801
DEAL::not identity constrained: 411
-DEAL:: line 8: 0.033
-DEAL:: line 9: -0.22
-DEAL:: line 10: -0.22
-DEAL:: line 11: 1.4
+DEAL:: line 8: 0.033494
+DEAL:: line 9: -0.21651
+DEAL:: line 10: -0.21651
+DEAL:: line 11: 1.3995
DEAL::not identity constrained: 412
-DEAL:: line 84: 0.10
-DEAL:: line 85: 0.22
-DEAL:: line 86: 0.22
-DEAL:: line 87: 0.47
+DEAL:: line 84: 0.10048
+DEAL:: line 85: 0.21651
+DEAL:: line 86: 0.21651
+DEAL:: line 87: 0.46651
DEAL::not identity constrained: 413
-DEAL:: line 84: -0.058
-DEAL:: line 85: 0.38
-DEAL:: line 86: -0.12
-DEAL:: line 87: 0.81
+DEAL:: line 84: -0.058013
+DEAL:: line 85: 0.37500
+DEAL:: line 86: -0.12500
+DEAL:: line 87: 0.80801
DEAL::not identity constrained: 414
-DEAL:: line 84: -0.058
-DEAL:: line 85: -0.12
-DEAL:: line 86: 0.38
-DEAL:: line 87: 0.81
+DEAL:: line 84: -0.058013
+DEAL:: line 85: -0.12500
+DEAL:: line 86: 0.37500
+DEAL:: line 87: 0.80801
DEAL::not identity constrained: 415
-DEAL:: line 84: 0.033
-DEAL:: line 85: -0.22
-DEAL:: line 86: -0.22
-DEAL:: line 87: 1.4
+DEAL:: line 84: 0.033494
+DEAL:: line 85: -0.21651
+DEAL:: line 86: -0.21651
+DEAL:: line 87: 1.3995
DEAL::not identity constrained: 496
-DEAL:: line 40: 1.4
-DEAL:: line 41: -0.22
-DEAL:: line 42: -0.22
-DEAL:: line 43: 0.033
+DEAL:: line 40: 1.3995
+DEAL:: line 41: -0.21651
+DEAL:: line 42: -0.21651
+DEAL:: line 43: 0.033494
DEAL::not identity constrained: 497
-DEAL:: line 40: 0.81
-DEAL:: line 41: 0.38
-DEAL:: line 42: -0.12
-DEAL:: line 43: -0.058
+DEAL:: line 40: 0.80801
+DEAL:: line 41: 0.37500
+DEAL:: line 42: -0.12500
+DEAL:: line 43: -0.058013
DEAL::not identity constrained: 498
-DEAL:: line 40: 0.81
-DEAL:: line 41: -0.12
-DEAL:: line 42: 0.38
-DEAL:: line 43: -0.058
+DEAL:: line 40: 0.80801
+DEAL:: line 41: -0.12500
+DEAL:: line 42: 0.37500
+DEAL:: line 43: -0.058013
DEAL::not identity constrained: 499
-DEAL:: line 40: 0.47
-DEAL:: line 41: 0.22
-DEAL:: line 42: 0.22
-DEAL:: line 43: 0.10
+DEAL:: line 40: 0.46651
+DEAL:: line 41: 0.21651
+DEAL:: line 42: 0.21651
+DEAL:: line 43: 0.10048
DEAL::not identity constrained: 524
-DEAL:: line 40: 0.37
-DEAL:: line 41: -0.058
-DEAL:: line 42: 0.81
-DEAL:: line 43: -0.12
+DEAL:: line 40: 0.37500
+DEAL:: line 41: -0.058013
+DEAL:: line 42: 0.80801
+DEAL:: line 43: -0.12500
DEAL::not identity constrained: 525
-DEAL:: line 40: 0.22
-DEAL:: line 41: 0.10
-DEAL:: line 42: 0.47
-DEAL:: line 43: 0.22
+DEAL:: line 40: 0.21651
+DEAL:: line 41: 0.10048
+DEAL:: line 42: 0.46651
+DEAL:: line 43: 0.21651
DEAL::not identity constrained: 526
-DEAL:: line 40: -0.22
-DEAL:: line 41: 0.033
-DEAL:: line 42: 1.4
-DEAL:: line 43: -0.22
+DEAL:: line 40: -0.21651
+DEAL:: line 41: 0.033494
+DEAL:: line 42: 1.3995
+DEAL:: line 43: -0.21651
DEAL::not identity constrained: 527
-DEAL:: line 40: -0.13
-DEAL:: line 41: -0.058
-DEAL:: line 42: 0.81
-DEAL:: line 43: 0.37
+DEAL:: line 40: -0.12500
+DEAL:: line 41: -0.058013
+DEAL:: line 42: 0.80801
+DEAL:: line 43: 0.37500
DEAL::not identity constrained: 560
-DEAL:: line 116: 1.4
-DEAL:: line 117: -0.22
-DEAL:: line 118: -0.22
-DEAL:: line 119: 0.033
+DEAL:: line 116: 1.3995
+DEAL:: line 117: -0.21651
+DEAL:: line 118: -0.21651
+DEAL:: line 119: 0.033494
DEAL::not identity constrained: 561
-DEAL:: line 116: 0.81
-DEAL:: line 117: 0.38
-DEAL:: line 118: -0.12
-DEAL:: line 119: -0.058
+DEAL:: line 116: 0.80801
+DEAL:: line 117: 0.37500
+DEAL:: line 118: -0.12500
+DEAL:: line 119: -0.058013
DEAL::not identity constrained: 562
-DEAL:: line 116: 0.81
-DEAL:: line 117: -0.12
-DEAL:: line 118: 0.38
-DEAL:: line 119: -0.058
+DEAL:: line 116: 0.80801
+DEAL:: line 117: -0.12500
+DEAL:: line 118: 0.37500
+DEAL:: line 119: -0.058013
DEAL::not identity constrained: 563
-DEAL:: line 116: 0.47
-DEAL:: line 117: 0.22
-DEAL:: line 118: 0.22
-DEAL:: line 119: 0.10
+DEAL:: line 116: 0.46651
+DEAL:: line 117: 0.21651
+DEAL:: line 118: 0.21651
+DEAL:: line 119: 0.10048
DEAL::not identity constrained: 588
-DEAL:: line 116: 0.38
-DEAL:: line 117: 0.81
-DEAL:: line 118: -0.058
-DEAL:: line 119: -0.13
+DEAL:: line 116: 0.37500
+DEAL:: line 117: 0.80801
+DEAL:: line 118: -0.058013
+DEAL:: line 119: -0.12500
DEAL::not identity constrained: 589
-DEAL:: line 116: -0.22
-DEAL:: line 117: 1.4
-DEAL:: line 118: 0.033
-DEAL:: line 119: -0.22
+DEAL:: line 116: -0.21651
+DEAL:: line 117: 1.3995
+DEAL:: line 118: 0.033494
+DEAL:: line 119: -0.21651
DEAL::not identity constrained: 590
-DEAL:: line 116: 0.22
-DEAL:: line 117: 0.47
-DEAL:: line 118: 0.10
-DEAL:: line 119: 0.22
+DEAL:: line 116: 0.21651
+DEAL:: line 117: 0.46651
+DEAL:: line 118: 0.10048
+DEAL:: line 119: 0.21651
DEAL::not identity constrained: 591
-DEAL:: line 116: -0.13
-DEAL:: line 117: 0.81
-DEAL:: line 118: -0.058
-DEAL:: line 119: 0.37
+DEAL:: line 116: -0.12500
+DEAL:: line 117: 0.80801
+DEAL:: line 118: -0.058013
+DEAL:: line 119: 0.37500
DEAL::not identity constrained: 608
-DEAL:: line 40: 0.38
-DEAL:: line 41: 0.81
-DEAL:: line 42: -0.058
-DEAL:: line 43: -0.13
+DEAL:: line 40: 0.37500
+DEAL:: line 41: 0.80801
+DEAL:: line 42: -0.058013
+DEAL:: line 43: -0.12500
DEAL::not identity constrained: 609
-DEAL:: line 40: -0.22
-DEAL:: line 41: 1.4
-DEAL:: line 42: 0.033
-DEAL:: line 43: -0.22
+DEAL:: line 40: -0.21651
+DEAL:: line 41: 1.3995
+DEAL:: line 42: 0.033494
+DEAL:: line 43: -0.21651
DEAL::not identity constrained: 610
-DEAL:: line 40: 0.22
-DEAL:: line 41: 0.47
-DEAL:: line 42: 0.10
-DEAL:: line 43: 0.22
+DEAL:: line 40: 0.21651
+DEAL:: line 41: 0.46651
+DEAL:: line 42: 0.10048
+DEAL:: line 43: 0.21651
DEAL::not identity constrained: 611
-DEAL:: line 40: -0.13
-DEAL:: line 41: 0.81
-DEAL:: line 42: -0.058
-DEAL:: line 43: 0.37
+DEAL:: line 40: -0.12500
+DEAL:: line 41: 0.80801
+DEAL:: line 42: -0.058013
+DEAL:: line 43: 0.37500
DEAL::not identity constrained: 612
-DEAL:: line 116: 0.37
-DEAL:: line 117: -0.058
-DEAL:: line 118: 0.81
-DEAL:: line 119: -0.12
+DEAL:: line 116: 0.37500
+DEAL:: line 117: -0.058013
+DEAL:: line 118: 0.80801
+DEAL:: line 119: -0.12500
DEAL::not identity constrained: 613
-DEAL:: line 116: 0.22
-DEAL:: line 117: 0.10
-DEAL:: line 118: 0.47
-DEAL:: line 119: 0.22
+DEAL:: line 116: 0.21651
+DEAL:: line 117: 0.10048
+DEAL:: line 118: 0.46651
+DEAL:: line 119: 0.21651
DEAL::not identity constrained: 614
-DEAL:: line 116: -0.22
-DEAL:: line 117: 0.033
-DEAL:: line 118: 1.4
-DEAL:: line 119: -0.22
+DEAL:: line 116: -0.21651
+DEAL:: line 117: 0.033494
+DEAL:: line 118: 1.3995
+DEAL:: line 119: -0.21651
DEAL::not identity constrained: 615
-DEAL:: line 116: -0.13
-DEAL:: line 117: -0.058
-DEAL:: line 118: 0.81
-DEAL:: line 119: 0.37
+DEAL:: line 116: -0.12500
+DEAL:: line 117: -0.058013
+DEAL:: line 118: 0.80801
+DEAL:: line 119: 0.37500
DEAL::not identity constrained: 632
-DEAL:: line 40: 0.10
-DEAL:: line 41: 0.22
-DEAL:: line 42: 0.22
-DEAL:: line 43: 0.47
+DEAL:: line 40: 0.10048
+DEAL:: line 41: 0.21651
+DEAL:: line 42: 0.21651
+DEAL:: line 43: 0.46651
DEAL::not identity constrained: 633
-DEAL:: line 40: -0.058
-DEAL:: line 41: 0.38
-DEAL:: line 42: -0.12
-DEAL:: line 43: 0.81
+DEAL:: line 40: -0.058013
+DEAL:: line 41: 0.37500
+DEAL:: line 42: -0.12500
+DEAL:: line 43: 0.80801
DEAL::not identity constrained: 634
-DEAL:: line 40: -0.058
-DEAL:: line 41: -0.12
-DEAL:: line 42: 0.38
-DEAL:: line 43: 0.81
+DEAL:: line 40: -0.058013
+DEAL:: line 41: -0.12500
+DEAL:: line 42: 0.37500
+DEAL:: line 43: 0.80801
DEAL::not identity constrained: 635
-DEAL:: line 40: 0.033
-DEAL:: line 41: -0.22
-DEAL:: line 42: -0.22
-DEAL:: line 43: 1.4
+DEAL:: line 40: 0.033494
+DEAL:: line 41: -0.21651
+DEAL:: line 42: -0.21651
+DEAL:: line 43: 1.3995
DEAL::not identity constrained: 636
-DEAL:: line 116: 0.10
-DEAL:: line 117: 0.22
-DEAL:: line 118: 0.22
-DEAL:: line 119: 0.47
+DEAL:: line 116: 0.10048
+DEAL:: line 117: 0.21651
+DEAL:: line 118: 0.21651
+DEAL:: line 119: 0.46651
DEAL::not identity constrained: 637
-DEAL:: line 116: -0.058
-DEAL:: line 117: 0.38
-DEAL:: line 118: -0.12
-DEAL:: line 119: 0.81
+DEAL:: line 116: -0.058013
+DEAL:: line 117: 0.37500
+DEAL:: line 118: -0.12500
+DEAL:: line 119: 0.80801
DEAL::not identity constrained: 638
-DEAL:: line 116: -0.058
-DEAL:: line 117: -0.12
-DEAL:: line 118: 0.38
-DEAL:: line 119: 0.81
+DEAL:: line 116: -0.058013
+DEAL:: line 117: -0.12500
+DEAL:: line 118: 0.37500
+DEAL:: line 119: 0.80801
DEAL::not identity constrained: 639
-DEAL:: line 116: 0.033
-DEAL:: line 117: -0.22
-DEAL:: line 118: -0.22
-DEAL:: line 119: 1.4
+DEAL:: line 116: 0.033494
+DEAL:: line 117: -0.21651
+DEAL:: line 118: -0.21651
+DEAL:: line 119: 1.3995
DEAL::Checking RaviartThomasNodal2 in 3d:
DEAL::144
DEAL::9
DEAL::144
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 810
-DEAL:: line 18: 1.5
-DEAL:: line 19: -0.38
-DEAL:: line 20: 0.10
-DEAL:: line 21: -0.38
-DEAL:: line 22: 0.097
-DEAL:: line 23: -0.026
-DEAL:: line 24: 0.10
-DEAL:: line 25: -0.026
-DEAL:: line 26: 0.0069
+DEAL:: line 18: 1.5100
+DEAL:: line 19: -0.38360
+DEAL:: line 20: 0.10240
+DEAL:: line 21: -0.38360
+DEAL:: line 22: 0.097446
+DEAL:: line 23: -0.026014
+DEAL:: line 24: 0.10240
+DEAL:: line 25: -0.026014
+DEAL:: line 26: 0.0069444
DEAL::not identity constrained: 811
-DEAL:: line 18: 0.65
-DEAL:: line 19: 0.72
-DEAL:: line 20: -0.14
-DEAL:: line 21: -0.17
-DEAL:: line 22: -0.18
-DEAL:: line 23: 0.036
-DEAL:: line 24: 0.044
-DEAL:: line 25: 0.049
-DEAL:: line 26: -0.0095
+DEAL:: line 18: 0.65261
+DEAL:: line 19: 0.71682
+DEAL:: line 20: -0.14060
+DEAL:: line 21: -0.16578
+DEAL:: line 22: -0.18210
+DEAL:: line 23: 0.035716
+DEAL:: line 24: 0.044257
+DEAL:: line 25: 0.048611
+DEAL:: line 26: -0.0095346
DEAL::not identity constrained: 812
-DEAL:: line 18: 0.10
-DEAL:: line 19: 1.2
-DEAL:: line 20: -0.076
-DEAL:: line 21: -0.026
-DEAL:: line 22: -0.31
-DEAL:: line 23: 0.019
-DEAL:: line 24: 0.0069
-DEAL:: line 25: 0.082
-DEAL:: line 26: -0.0052
+DEAL:: line 18: 0.10240
+DEAL:: line 19: 1.2028
+DEAL:: line 20: -0.076389
+DEAL:: line 21: -0.026014
+DEAL:: line 22: -0.30556
+DEAL:: line 23: 0.019405
+DEAL:: line 24: 0.0069444
+DEAL:: line 25: 0.081569
+DEAL:: line 26: -0.0051803
DEAL::not identity constrained: 813
-DEAL:: line 18: 0.65
-DEAL:: line 19: -0.17
-DEAL:: line 20: 0.044
-DEAL:: line 21: 0.72
-DEAL:: line 22: -0.18
-DEAL:: line 23: 0.049
-DEAL:: line 24: -0.14
-DEAL:: line 25: 0.036
-DEAL:: line 26: -0.0095
+DEAL:: line 18: 0.65261
+DEAL:: line 19: -0.16578
+DEAL:: line 20: 0.044257
+DEAL:: line 21: 0.71682
+DEAL:: line 22: -0.18210
+DEAL:: line 23: 0.048611
+DEAL:: line 24: -0.14060
+DEAL:: line 25: 0.035716
+DEAL:: line 26: -0.0095346
DEAL::not identity constrained: 814
-DEAL:: line 18: 0.28
-DEAL:: line 19: 0.31
-DEAL:: line 20: -0.061
-DEAL:: line 21: 0.31
-DEAL:: line 22: 0.34
-DEAL:: line 23: -0.067
-DEAL:: line 24: -0.061
-DEAL:: line 25: -0.067
-DEAL:: line 26: 0.013
+DEAL:: line 18: 0.28205
+DEAL:: line 19: 0.30980
+DEAL:: line 20: -0.060764
+DEAL:: line 21: 0.30980
+DEAL:: line 22: 0.34028
+DEAL:: line 23: -0.066742
+DEAL:: line 24: -0.060764
+DEAL:: line 25: -0.066742
+DEAL:: line 26: 0.013091
DEAL::not identity constrained: 815
-DEAL:: line 18: 0.044
-DEAL:: line 19: 0.52
-DEAL:: line 20: -0.033
-DEAL:: line 21: 0.049
-DEAL:: line 22: 0.57
-DEAL:: line 23: -0.036
-DEAL:: line 24: -0.0095
-DEAL:: line 25: -0.11
-DEAL:: line 26: 0.0071
+DEAL:: line 18: 0.044257
+DEAL:: line 19: 0.51984
+DEAL:: line 20: -0.033014
+DEAL:: line 21: 0.048611
+DEAL:: line 22: 0.57098
+DEAL:: line 23: -0.036262
+DEAL:: line 24: -0.0095346
+DEAL:: line 25: -0.11199
+DEAL:: line 26: 0.0071125
DEAL::not identity constrained: 816
-DEAL:: line 18: 0.10
-DEAL:: line 19: -0.026
-DEAL:: line 20: 0.0069
-DEAL:: line 21: 1.2
-DEAL:: line 22: -0.31
-DEAL:: line 23: 0.082
-DEAL:: line 24: -0.076
-DEAL:: line 25: 0.019
-DEAL:: line 26: -0.0052
+DEAL:: line 18: 0.10240
+DEAL:: line 19: -0.026014
+DEAL:: line 20: 0.0069444
+DEAL:: line 21: 1.2028
+DEAL:: line 22: -0.30556
+DEAL:: line 23: 0.081569
+DEAL:: line 24: -0.076389
+DEAL:: line 25: 0.019405
+DEAL:: line 26: -0.0051803
DEAL::not identity constrained: 817
-DEAL:: line 18: 0.044
-DEAL:: line 19: 0.049
-DEAL:: line 20: -0.0095
-DEAL:: line 21: 0.52
-DEAL:: line 22: 0.57
-DEAL:: line 23: -0.11
-DEAL:: line 24: -0.033
-DEAL:: line 25: -0.036
-DEAL:: line 26: 0.0071
+DEAL:: line 18: 0.044257
+DEAL:: line 19: 0.048611
+DEAL:: line 20: -0.0095346
+DEAL:: line 21: 0.51984
+DEAL:: line 22: 0.57098
+DEAL:: line 23: -0.11199
+DEAL:: line 24: -0.033014
+DEAL:: line 25: -0.036262
+DEAL:: line 26: 0.0071125
DEAL::not identity constrained: 818
-DEAL:: line 18: 0.0069
-DEAL:: line 19: 0.082
-DEAL:: line 20: -0.0052
-DEAL:: line 21: 0.082
-DEAL:: line 22: 0.96
-DEAL:: line 23: -0.061
-DEAL:: line 24: -0.0052
-DEAL:: line 25: -0.061
-DEAL:: line 26: 0.0039
+DEAL:: line 18: 0.0069444
+DEAL:: line 19: 0.081569
+DEAL:: line 20: -0.0051803
+DEAL:: line 21: 0.081569
+DEAL:: line 22: 0.95811
+DEAL:: line 23: -0.060848
+DEAL:: line 24: -0.0051803
+DEAL:: line 25: -0.060848
+DEAL:: line 26: 0.0038643
DEAL::not identity constrained: 900
-DEAL:: line 18: -0.076
-DEAL:: line 19: 0.019
-DEAL:: line 20: -0.0052
-DEAL:: line 21: 1.2
-DEAL:: line 22: -0.31
-DEAL:: line 23: 0.082
-DEAL:: line 24: 0.10
-DEAL:: line 25: -0.026
-DEAL:: line 26: 0.0069
+DEAL:: line 18: -0.076389
+DEAL:: line 19: 0.019405
+DEAL:: line 20: -0.0051803
+DEAL:: line 21: 1.2028
+DEAL:: line 22: -0.30556
+DEAL:: line 23: 0.081569
+DEAL:: line 24: 0.10240
+DEAL:: line 25: -0.026014
+DEAL:: line 26: 0.0069444
DEAL::not identity constrained: 901
-DEAL:: line 18: -0.033
-DEAL:: line 19: -0.036
-DEAL:: line 20: 0.0071
-DEAL:: line 21: 0.52
-DEAL:: line 22: 0.57
-DEAL:: line 23: -0.11
-DEAL:: line 24: 0.044
-DEAL:: line 25: 0.049
-DEAL:: line 26: -0.0095
+DEAL:: line 18: -0.033014
+DEAL:: line 19: -0.036262
+DEAL:: line 20: 0.0071125
+DEAL:: line 21: 0.51984
+DEAL:: line 22: 0.57098
+DEAL:: line 23: -0.11199
+DEAL:: line 24: 0.044257
+DEAL:: line 25: 0.048611
+DEAL:: line 26: -0.0095346
DEAL::not identity constrained: 902
-DEAL:: line 18: -0.0052
-DEAL:: line 19: -0.061
-DEAL:: line 20: 0.0039
-DEAL:: line 21: 0.082
-DEAL:: line 22: 0.96
-DEAL:: line 23: -0.061
-DEAL:: line 24: 0.0069
-DEAL:: line 25: 0.082
-DEAL:: line 26: -0.0052
+DEAL:: line 18: -0.0051803
+DEAL:: line 19: -0.060848
+DEAL:: line 20: 0.0038643
+DEAL:: line 21: 0.081569
+DEAL:: line 22: 0.95811
+DEAL:: line 23: -0.060848
+DEAL:: line 24: 0.0069444
+DEAL:: line 25: 0.081569
+DEAL:: line 26: -0.0051803
DEAL::not identity constrained: 903
-DEAL:: line 18: -0.14
-DEAL:: line 19: 0.036
-DEAL:: line 20: -0.0095
-DEAL:: line 21: 0.72
-DEAL:: line 22: -0.18
-DEAL:: line 23: 0.049
-DEAL:: line 24: 0.65
-DEAL:: line 25: -0.17
-DEAL:: line 26: 0.044
+DEAL:: line 18: -0.14060
+DEAL:: line 19: 0.035716
+DEAL:: line 20: -0.0095346
+DEAL:: line 21: 0.71682
+DEAL:: line 22: -0.18210
+DEAL:: line 23: 0.048611
+DEAL:: line 24: 0.65261
+DEAL:: line 25: -0.16578
+DEAL:: line 26: 0.044257
DEAL::not identity constrained: 904
-DEAL:: line 18: -0.061
-DEAL:: line 19: -0.067
-DEAL:: line 20: 0.013
-DEAL:: line 21: 0.31
-DEAL:: line 22: 0.34
-DEAL:: line 23: -0.067
-DEAL:: line 24: 0.28
-DEAL:: line 25: 0.31
-DEAL:: line 26: -0.061
+DEAL:: line 18: -0.060764
+DEAL:: line 19: -0.066742
+DEAL:: line 20: 0.013091
+DEAL:: line 21: 0.30980
+DEAL:: line 22: 0.34028
+DEAL:: line 23: -0.066742
+DEAL:: line 24: 0.28205
+DEAL:: line 25: 0.30980
+DEAL:: line 26: -0.060764
DEAL::not identity constrained: 905
-DEAL:: line 18: -0.0095
-DEAL:: line 19: -0.11
-DEAL:: line 20: 0.0071
-DEAL:: line 21: 0.049
-DEAL:: line 22: 0.57
-DEAL:: line 23: -0.036
-DEAL:: line 24: 0.044
-DEAL:: line 25: 0.52
-DEAL:: line 26: -0.033
+DEAL:: line 18: -0.0095346
+DEAL:: line 19: -0.11199
+DEAL:: line 20: 0.0071125
+DEAL:: line 21: 0.048611
+DEAL:: line 22: 0.57098
+DEAL:: line 23: -0.036262
+DEAL:: line 24: 0.044257
+DEAL:: line 25: 0.51984
+DEAL:: line 26: -0.033014
DEAL::not identity constrained: 906
-DEAL:: line 18: 0.10
-DEAL:: line 19: -0.026
-DEAL:: line 20: 0.0069
-DEAL:: line 21: -0.38
-DEAL:: line 22: 0.097
-DEAL:: line 23: -0.026
-DEAL:: line 24: 1.5
-DEAL:: line 25: -0.38
-DEAL:: line 26: 0.10
+DEAL:: line 18: 0.10240
+DEAL:: line 19: -0.026014
+DEAL:: line 20: 0.0069444
+DEAL:: line 21: -0.38360
+DEAL:: line 22: 0.097446
+DEAL:: line 23: -0.026014
+DEAL:: line 24: 1.5100
+DEAL:: line 25: -0.38360
+DEAL:: line 26: 0.10240
DEAL::not identity constrained: 907
-DEAL:: line 18: 0.044
-DEAL:: line 19: 0.049
-DEAL:: line 20: -0.0095
-DEAL:: line 21: -0.17
-DEAL:: line 22: -0.18
-DEAL:: line 23: 0.036
-DEAL:: line 24: 0.65
-DEAL:: line 25: 0.72
-DEAL:: line 26: -0.14
+DEAL:: line 18: 0.044257
+DEAL:: line 19: 0.048611
+DEAL:: line 20: -0.0095346
+DEAL:: line 21: -0.16578
+DEAL:: line 22: -0.18210
+DEAL:: line 23: 0.035716
+DEAL:: line 24: 0.65261
+DEAL:: line 25: 0.71682
+DEAL:: line 26: -0.14060
DEAL::not identity constrained: 908
-DEAL:: line 18: 0.0069
-DEAL:: line 19: 0.082
-DEAL:: line 20: -0.0052
-DEAL:: line 21: -0.026
-DEAL:: line 22: -0.31
-DEAL:: line 23: 0.019
-DEAL:: line 24: 0.10
-DEAL:: line 25: 1.2
-DEAL:: line 26: -0.076
+DEAL:: line 18: 0.0069444
+DEAL:: line 19: 0.081569
+DEAL:: line 20: -0.0051803
+DEAL:: line 21: -0.026014
+DEAL:: line 22: -0.30556
+DEAL:: line 23: 0.019405
+DEAL:: line 24: 0.10240
+DEAL:: line 25: 1.2028
+DEAL:: line 26: -0.076389
DEAL::not identity constrained: 1017
-DEAL:: line 243: 1.5
-DEAL:: line 244: -0.38
-DEAL:: line 245: 0.10
-DEAL:: line 246: -0.38
-DEAL:: line 247: 0.097
-DEAL:: line 248: -0.026
-DEAL:: line 249: 0.10
-DEAL:: line 250: -0.026
-DEAL:: line 251: 0.0069
+DEAL:: line 243: 1.5100
+DEAL:: line 244: -0.38360
+DEAL:: line 245: 0.10240
+DEAL:: line 246: -0.38360
+DEAL:: line 247: 0.097446
+DEAL:: line 248: -0.026014
+DEAL:: line 249: 0.10240
+DEAL:: line 250: -0.026014
+DEAL:: line 251: 0.0069444
DEAL::not identity constrained: 1018
-DEAL:: line 243: 0.65
-DEAL:: line 244: 0.72
-DEAL:: line 245: -0.14
-DEAL:: line 246: -0.17
-DEAL:: line 247: -0.18
-DEAL:: line 248: 0.036
-DEAL:: line 249: 0.044
-DEAL:: line 250: 0.049
-DEAL:: line 251: -0.0095
+DEAL:: line 243: 0.65261
+DEAL:: line 244: 0.71682
+DEAL:: line 245: -0.14060
+DEAL:: line 246: -0.16578
+DEAL:: line 247: -0.18210
+DEAL:: line 248: 0.035716
+DEAL:: line 249: 0.044257
+DEAL:: line 250: 0.048611
+DEAL:: line 251: -0.0095346
DEAL::not identity constrained: 1019
-DEAL:: line 243: 0.10
-DEAL:: line 244: 1.2
-DEAL:: line 245: -0.076
-DEAL:: line 246: -0.026
-DEAL:: line 247: -0.31
-DEAL:: line 248: 0.019
-DEAL:: line 249: 0.0069
-DEAL:: line 250: 0.082
-DEAL:: line 251: -0.0052
+DEAL:: line 243: 0.10240
+DEAL:: line 244: 1.2028
+DEAL:: line 245: -0.076389
+DEAL:: line 246: -0.026014
+DEAL:: line 247: -0.30556
+DEAL:: line 248: 0.019405
+DEAL:: line 249: 0.0069444
+DEAL:: line 250: 0.081569
+DEAL:: line 251: -0.0051803
DEAL::not identity constrained: 1020
-DEAL:: line 243: 0.65
-DEAL:: line 244: -0.17
-DEAL:: line 245: 0.044
-DEAL:: line 246: 0.72
-DEAL:: line 247: -0.18
-DEAL:: line 248: 0.049
-DEAL:: line 249: -0.14
-DEAL:: line 250: 0.036
-DEAL:: line 251: -0.0095
+DEAL:: line 243: 0.65261
+DEAL:: line 244: -0.16578
+DEAL:: line 245: 0.044257
+DEAL:: line 246: 0.71682
+DEAL:: line 247: -0.18210
+DEAL:: line 248: 0.048611
+DEAL:: line 249: -0.14060
+DEAL:: line 250: 0.035716
+DEAL:: line 251: -0.0095346
DEAL::not identity constrained: 1021
-DEAL:: line 243: 0.28
-DEAL:: line 244: 0.31
-DEAL:: line 245: -0.061
-DEAL:: line 246: 0.31
-DEAL:: line 247: 0.34
-DEAL:: line 248: -0.067
-DEAL:: line 249: -0.061
-DEAL:: line 250: -0.067
-DEAL:: line 251: 0.013
+DEAL:: line 243: 0.28205
+DEAL:: line 244: 0.30980
+DEAL:: line 245: -0.060764
+DEAL:: line 246: 0.30980
+DEAL:: line 247: 0.34028
+DEAL:: line 248: -0.066742
+DEAL:: line 249: -0.060764
+DEAL:: line 250: -0.066742
+DEAL:: line 251: 0.013091
DEAL::not identity constrained: 1022
-DEAL:: line 243: 0.044
-DEAL:: line 244: 0.52
-DEAL:: line 245: -0.033
-DEAL:: line 246: 0.049
-DEAL:: line 247: 0.57
-DEAL:: line 248: -0.036
-DEAL:: line 249: -0.0095
-DEAL:: line 250: -0.11
-DEAL:: line 251: 0.0071
+DEAL:: line 243: 0.044257
+DEAL:: line 244: 0.51984
+DEAL:: line 245: -0.033014
+DEAL:: line 246: 0.048611
+DEAL:: line 247: 0.57098
+DEAL:: line 248: -0.036262
+DEAL:: line 249: -0.0095346
+DEAL:: line 250: -0.11199
+DEAL:: line 251: 0.0071125
DEAL::not identity constrained: 1023
-DEAL:: line 243: 0.10
-DEAL:: line 244: -0.026
-DEAL:: line 245: 0.0069
-DEAL:: line 246: 1.2
-DEAL:: line 247: -0.31
-DEAL:: line 248: 0.082
-DEAL:: line 249: -0.076
-DEAL:: line 250: 0.019
-DEAL:: line 251: -0.0052
+DEAL:: line 243: 0.10240
+DEAL:: line 244: -0.026014
+DEAL:: line 245: 0.0069444
+DEAL:: line 246: 1.2028
+DEAL:: line 247: -0.30556
+DEAL:: line 248: 0.081569
+DEAL:: line 249: -0.076389
+DEAL:: line 250: 0.019405
+DEAL:: line 251: -0.0051803
DEAL::not identity constrained: 1024
-DEAL:: line 243: 0.044
-DEAL:: line 244: 0.049
-DEAL:: line 245: -0.0095
-DEAL:: line 246: 0.52
-DEAL:: line 247: 0.57
-DEAL:: line 248: -0.11
-DEAL:: line 249: -0.033
-DEAL:: line 250: -0.036
-DEAL:: line 251: 0.0071
+DEAL:: line 243: 0.044257
+DEAL:: line 244: 0.048611
+DEAL:: line 245: -0.0095346
+DEAL:: line 246: 0.51984
+DEAL:: line 247: 0.57098
+DEAL:: line 248: -0.11199
+DEAL:: line 249: -0.033014
+DEAL:: line 250: -0.036262
+DEAL:: line 251: 0.0071125
DEAL::not identity constrained: 1025
-DEAL:: line 243: 0.0069
-DEAL:: line 244: 0.082
-DEAL:: line 245: -0.0052
-DEAL:: line 246: 0.082
-DEAL:: line 247: 0.96
-DEAL:: line 248: -0.061
-DEAL:: line 249: -0.0052
-DEAL:: line 250: -0.061
-DEAL:: line 251: 0.0039
+DEAL:: line 243: 0.0069444
+DEAL:: line 244: 0.081569
+DEAL:: line 245: -0.0051803
+DEAL:: line 246: 0.081569
+DEAL:: line 247: 0.95811
+DEAL:: line 248: -0.060848
+DEAL:: line 249: -0.0051803
+DEAL:: line 250: -0.060848
+DEAL:: line 251: 0.0038643
DEAL::not identity constrained: 1107
-DEAL:: line 243: -0.076
-DEAL:: line 244: 1.2
-DEAL:: line 245: 0.10
-DEAL:: line 246: 0.019
-DEAL:: line 247: -0.31
-DEAL:: line 248: -0.026
-DEAL:: line 249: -0.0052
-DEAL:: line 250: 0.082
-DEAL:: line 251: 0.0069
+DEAL:: line 243: -0.076389
+DEAL:: line 244: 1.2028
+DEAL:: line 245: 0.10240
+DEAL:: line 246: 0.019405
+DEAL:: line 247: -0.30556
+DEAL:: line 248: -0.026014
+DEAL:: line 249: -0.0051803
+DEAL:: line 250: 0.081569
+DEAL:: line 251: 0.0069444
DEAL::not identity constrained: 1108
-DEAL:: line 243: -0.14
-DEAL:: line 244: 0.72
-DEAL:: line 245: 0.65
-DEAL:: line 246: 0.036
-DEAL:: line 247: -0.18
-DEAL:: line 248: -0.17
-DEAL:: line 249: -0.0095
-DEAL:: line 250: 0.049
-DEAL:: line 251: 0.044
+DEAL:: line 243: -0.14060
+DEAL:: line 244: 0.71682
+DEAL:: line 245: 0.65261
+DEAL:: line 246: 0.035716
+DEAL:: line 247: -0.18210
+DEAL:: line 248: -0.16578
+DEAL:: line 249: -0.0095346
+DEAL:: line 250: 0.048611
+DEAL:: line 251: 0.044257
DEAL::not identity constrained: 1109
-DEAL:: line 243: 0.10
-DEAL:: line 244: -0.38
-DEAL:: line 245: 1.5
-DEAL:: line 246: -0.026
-DEAL:: line 247: 0.097
-DEAL:: line 248: -0.38
-DEAL:: line 249: 0.0069
-DEAL:: line 250: -0.026
-DEAL:: line 251: 0.10
+DEAL:: line 243: 0.10240
+DEAL:: line 244: -0.38360
+DEAL:: line 245: 1.5100
+DEAL:: line 246: -0.026014
+DEAL:: line 247: 0.097446
+DEAL:: line 248: -0.38360
+DEAL:: line 249: 0.0069444
+DEAL:: line 250: -0.026014
+DEAL:: line 251: 0.10240
DEAL::not identity constrained: 1110
-DEAL:: line 243: -0.033
-DEAL:: line 244: 0.52
-DEAL:: line 245: 0.044
-DEAL:: line 246: -0.036
-DEAL:: line 247: 0.57
-DEAL:: line 248: 0.049
-DEAL:: line 249: 0.0071
-DEAL:: line 250: -0.11
-DEAL:: line 251: -0.0095
+DEAL:: line 243: -0.033014
+DEAL:: line 244: 0.51984
+DEAL:: line 245: 0.044257
+DEAL:: line 246: -0.036262
+DEAL:: line 247: 0.57098
+DEAL:: line 248: 0.048611
+DEAL:: line 249: 0.0071125
+DEAL:: line 250: -0.11199
+DEAL:: line 251: -0.0095346
DEAL::not identity constrained: 1111
-DEAL:: line 243: -0.061
-DEAL:: line 244: 0.31
-DEAL:: line 245: 0.28
-DEAL:: line 246: -0.067
-DEAL:: line 247: 0.34
-DEAL:: line 248: 0.31
-DEAL:: line 249: 0.013
-DEAL:: line 250: -0.067
-DEAL:: line 251: -0.061
+DEAL:: line 243: -0.060764
+DEAL:: line 244: 0.30980
+DEAL:: line 245: 0.28205
+DEAL:: line 246: -0.066742
+DEAL:: line 247: 0.34028
+DEAL:: line 248: 0.30980
+DEAL:: line 249: 0.013091
+DEAL:: line 250: -0.066742
+DEAL:: line 251: -0.060764
DEAL::not identity constrained: 1112
-DEAL:: line 243: 0.044
-DEAL:: line 244: -0.17
-DEAL:: line 245: 0.65
-DEAL:: line 246: 0.049
-DEAL:: line 247: -0.18
-DEAL:: line 248: 0.72
-DEAL:: line 249: -0.0095
-DEAL:: line 250: 0.036
-DEAL:: line 251: -0.14
+DEAL:: line 243: 0.044257
+DEAL:: line 244: -0.16578
+DEAL:: line 245: 0.65261
+DEAL:: line 246: 0.048611
+DEAL:: line 247: -0.18210
+DEAL:: line 248: 0.71682
+DEAL:: line 249: -0.0095346
+DEAL:: line 250: 0.035716
+DEAL:: line 251: -0.14060
DEAL::not identity constrained: 1113
-DEAL:: line 243: -0.0052
-DEAL:: line 244: 0.082
-DEAL:: line 245: 0.0069
-DEAL:: line 246: -0.061
-DEAL:: line 247: 0.96
-DEAL:: line 248: 0.082
-DEAL:: line 249: 0.0039
-DEAL:: line 250: -0.061
-DEAL:: line 251: -0.0052
+DEAL:: line 243: -0.0051803
+DEAL:: line 244: 0.081569
+DEAL:: line 245: 0.0069444
+DEAL:: line 246: -0.060848
+DEAL:: line 247: 0.95811
+DEAL:: line 248: 0.081569
+DEAL:: line 249: 0.0038643
+DEAL:: line 250: -0.060848
+DEAL:: line 251: -0.0051803
DEAL::not identity constrained: 1114
-DEAL:: line 243: -0.0095
-DEAL:: line 244: 0.049
-DEAL:: line 245: 0.044
-DEAL:: line 246: -0.11
-DEAL:: line 247: 0.57
-DEAL:: line 248: 0.52
-DEAL:: line 249: 0.0071
-DEAL:: line 250: -0.036
-DEAL:: line 251: -0.033
+DEAL:: line 243: -0.0095346
+DEAL:: line 244: 0.048611
+DEAL:: line 245: 0.044257
+DEAL:: line 246: -0.11199
+DEAL:: line 247: 0.57098
+DEAL:: line 248: 0.51984
+DEAL:: line 249: 0.0071125
+DEAL:: line 250: -0.036262
+DEAL:: line 251: -0.033014
DEAL::not identity constrained: 1115
-DEAL:: line 243: 0.0069
-DEAL:: line 244: -0.026
-DEAL:: line 245: 0.10
-DEAL:: line 246: 0.082
-DEAL:: line 247: -0.31
-DEAL:: line 248: 1.2
-DEAL:: line 249: -0.0052
-DEAL:: line 250: 0.019
-DEAL:: line 251: -0.076
+DEAL:: line 243: 0.0069444
+DEAL:: line 244: -0.026014
+DEAL:: line 245: 0.10240
+DEAL:: line 246: 0.081569
+DEAL:: line 247: -0.30556
+DEAL:: line 248: 1.2028
+DEAL:: line 249: -0.0051803
+DEAL:: line 250: 0.019405
+DEAL:: line 251: -0.076389
DEAL::not identity constrained: 1188
-DEAL:: line 18: -0.076
-DEAL:: line 19: 1.2
-DEAL:: line 20: 0.10
-DEAL:: line 21: 0.019
-DEAL:: line 22: -0.31
-DEAL:: line 23: -0.026
-DEAL:: line 24: -0.0052
-DEAL:: line 25: 0.082
-DEAL:: line 26: 0.0069
+DEAL:: line 18: -0.076389
+DEAL:: line 19: 1.2028
+DEAL:: line 20: 0.10240
+DEAL:: line 21: 0.019405
+DEAL:: line 22: -0.30556
+DEAL:: line 23: -0.026014
+DEAL:: line 24: -0.0051803
+DEAL:: line 25: 0.081569
+DEAL:: line 26: 0.0069444
DEAL::not identity constrained: 1189
-DEAL:: line 18: -0.14
-DEAL:: line 19: 0.72
-DEAL:: line 20: 0.65
-DEAL:: line 21: 0.036
-DEAL:: line 22: -0.18
-DEAL:: line 23: -0.17
-DEAL:: line 24: -0.0095
-DEAL:: line 25: 0.049
-DEAL:: line 26: 0.044
+DEAL:: line 18: -0.14060
+DEAL:: line 19: 0.71682
+DEAL:: line 20: 0.65261
+DEAL:: line 21: 0.035716
+DEAL:: line 22: -0.18210
+DEAL:: line 23: -0.16578
+DEAL:: line 24: -0.0095346
+DEAL:: line 25: 0.048611
+DEAL:: line 26: 0.044257
DEAL::not identity constrained: 1190
-DEAL:: line 18: 0.10
-DEAL:: line 19: -0.38
-DEAL:: line 20: 1.5
-DEAL:: line 21: -0.026
-DEAL:: line 22: 0.097
-DEAL:: line 23: -0.38
-DEAL:: line 24: 0.0069
-DEAL:: line 25: -0.026
-DEAL:: line 26: 0.10
+DEAL:: line 18: 0.10240
+DEAL:: line 19: -0.38360
+DEAL:: line 20: 1.5100
+DEAL:: line 21: -0.026014
+DEAL:: line 22: 0.097446
+DEAL:: line 23: -0.38360
+DEAL:: line 24: 0.0069444
+DEAL:: line 25: -0.026014
+DEAL:: line 26: 0.10240
DEAL::not identity constrained: 1191
-DEAL:: line 18: -0.033
-DEAL:: line 19: 0.52
-DEAL:: line 20: 0.044
-DEAL:: line 21: -0.036
-DEAL:: line 22: 0.57
-DEAL:: line 23: 0.049
-DEAL:: line 24: 0.0071
-DEAL:: line 25: -0.11
-DEAL:: line 26: -0.0095
+DEAL:: line 18: -0.033014
+DEAL:: line 19: 0.51984
+DEAL:: line 20: 0.044257
+DEAL:: line 21: -0.036262
+DEAL:: line 22: 0.57098
+DEAL:: line 23: 0.048611
+DEAL:: line 24: 0.0071125
+DEAL:: line 25: -0.11199
+DEAL:: line 26: -0.0095346
DEAL::not identity constrained: 1192
-DEAL:: line 18: -0.061
-DEAL:: line 19: 0.31
-DEAL:: line 20: 0.28
-DEAL:: line 21: -0.067
-DEAL:: line 22: 0.34
-DEAL:: line 23: 0.31
-DEAL:: line 24: 0.013
-DEAL:: line 25: -0.067
-DEAL:: line 26: -0.061
+DEAL:: line 18: -0.060764
+DEAL:: line 19: 0.30980
+DEAL:: line 20: 0.28205
+DEAL:: line 21: -0.066742
+DEAL:: line 22: 0.34028
+DEAL:: line 23: 0.30980
+DEAL:: line 24: 0.013091
+DEAL:: line 25: -0.066742
+DEAL:: line 26: -0.060764
DEAL::not identity constrained: 1193
-DEAL:: line 18: 0.044
-DEAL:: line 19: -0.17
-DEAL:: line 20: 0.65
-DEAL:: line 21: 0.049
-DEAL:: line 22: -0.18
-DEAL:: line 23: 0.72
-DEAL:: line 24: -0.0095
-DEAL:: line 25: 0.036
-DEAL:: line 26: -0.14
+DEAL:: line 18: 0.044257
+DEAL:: line 19: -0.16578
+DEAL:: line 20: 0.65261
+DEAL:: line 21: 0.048611
+DEAL:: line 22: -0.18210
+DEAL:: line 23: 0.71682
+DEAL:: line 24: -0.0095346
+DEAL:: line 25: 0.035716
+DEAL:: line 26: -0.14060
DEAL::not identity constrained: 1194
-DEAL:: line 18: -0.0052
-DEAL:: line 19: 0.082
-DEAL:: line 20: 0.0069
-DEAL:: line 21: -0.061
-DEAL:: line 22: 0.96
-DEAL:: line 23: 0.082
-DEAL:: line 24: 0.0039
-DEAL:: line 25: -0.061
-DEAL:: line 26: -0.0052
+DEAL:: line 18: -0.0051803
+DEAL:: line 19: 0.081569
+DEAL:: line 20: 0.0069444
+DEAL:: line 21: -0.060848
+DEAL:: line 22: 0.95811
+DEAL:: line 23: 0.081569
+DEAL:: line 24: 0.0038643
+DEAL:: line 25: -0.060848
+DEAL:: line 26: -0.0051803
DEAL::not identity constrained: 1195
-DEAL:: line 18: -0.0095
-DEAL:: line 19: 0.049
-DEAL:: line 20: 0.044
-DEAL:: line 21: -0.11
-DEAL:: line 22: 0.57
-DEAL:: line 23: 0.52
-DEAL:: line 24: 0.0071
-DEAL:: line 25: -0.036
-DEAL:: line 26: -0.033
+DEAL:: line 18: -0.0095346
+DEAL:: line 19: 0.048611
+DEAL:: line 20: 0.044257
+DEAL:: line 21: -0.11199
+DEAL:: line 22: 0.57098
+DEAL:: line 23: 0.51984
+DEAL:: line 24: 0.0071125
+DEAL:: line 25: -0.036262
+DEAL:: line 26: -0.033014
DEAL::not identity constrained: 1196
-DEAL:: line 18: 0.0069
-DEAL:: line 19: -0.026
-DEAL:: line 20: 0.10
-DEAL:: line 21: 0.082
-DEAL:: line 22: -0.31
-DEAL:: line 23: 1.2
-DEAL:: line 24: -0.0052
-DEAL:: line 25: 0.019
-DEAL:: line 26: -0.076
+DEAL:: line 18: 0.0069444
+DEAL:: line 19: -0.026014
+DEAL:: line 20: 0.10240
+DEAL:: line 21: 0.081569
+DEAL:: line 22: -0.30556
+DEAL:: line 23: 1.2028
+DEAL:: line 24: -0.0051803
+DEAL:: line 25: 0.019405
+DEAL:: line 26: -0.076389
DEAL::not identity constrained: 1197
-DEAL:: line 243: -0.076
-DEAL:: line 244: 0.019
-DEAL:: line 245: -0.0052
-DEAL:: line 246: 1.2
-DEAL:: line 247: -0.31
-DEAL:: line 248: 0.082
-DEAL:: line 249: 0.10
-DEAL:: line 250: -0.026
-DEAL:: line 251: 0.0069
+DEAL:: line 243: -0.076389
+DEAL:: line 244: 0.019405
+DEAL:: line 245: -0.0051803
+DEAL:: line 246: 1.2028
+DEAL:: line 247: -0.30556
+DEAL:: line 248: 0.081569
+DEAL:: line 249: 0.10240
+DEAL:: line 250: -0.026014
+DEAL:: line 251: 0.0069444
DEAL::not identity constrained: 1198
-DEAL:: line 243: -0.033
-DEAL:: line 244: -0.036
-DEAL:: line 245: 0.0071
-DEAL:: line 246: 0.52
-DEAL:: line 247: 0.57
-DEAL:: line 248: -0.11
-DEAL:: line 249: 0.044
-DEAL:: line 250: 0.049
-DEAL:: line 251: -0.0095
+DEAL:: line 243: -0.033014
+DEAL:: line 244: -0.036262
+DEAL:: line 245: 0.0071125
+DEAL:: line 246: 0.51984
+DEAL:: line 247: 0.57098
+DEAL:: line 248: -0.11199
+DEAL:: line 249: 0.044257
+DEAL:: line 250: 0.048611
+DEAL:: line 251: -0.0095346
DEAL::not identity constrained: 1199
-DEAL:: line 243: -0.0052
-DEAL:: line 244: -0.061
-DEAL:: line 245: 0.0039
-DEAL:: line 246: 0.082
-DEAL:: line 247: 0.96
-DEAL:: line 248: -0.061
-DEAL:: line 249: 0.0069
-DEAL:: line 250: 0.082
-DEAL:: line 251: -0.0052
+DEAL:: line 243: -0.0051803
+DEAL:: line 244: -0.060848
+DEAL:: line 245: 0.0038643
+DEAL:: line 246: 0.081569
+DEAL:: line 247: 0.95811
+DEAL:: line 248: -0.060848
+DEAL:: line 249: 0.0069444
+DEAL:: line 250: 0.081569
+DEAL:: line 251: -0.0051803
DEAL::not identity constrained: 1200
-DEAL:: line 243: -0.14
-DEAL:: line 244: 0.036
-DEAL:: line 245: -0.0095
-DEAL:: line 246: 0.72
-DEAL:: line 247: -0.18
-DEAL:: line 248: 0.049
-DEAL:: line 249: 0.65
-DEAL:: line 250: -0.17
-DEAL:: line 251: 0.044
+DEAL:: line 243: -0.14060
+DEAL:: line 244: 0.035716
+DEAL:: line 245: -0.0095346
+DEAL:: line 246: 0.71682
+DEAL:: line 247: -0.18210
+DEAL:: line 248: 0.048611
+DEAL:: line 249: 0.65261
+DEAL:: line 250: -0.16578
+DEAL:: line 251: 0.044257
DEAL::not identity constrained: 1201
-DEAL:: line 243: -0.061
-DEAL:: line 244: -0.067
-DEAL:: line 245: 0.013
-DEAL:: line 246: 0.31
-DEAL:: line 247: 0.34
-DEAL:: line 248: -0.067
-DEAL:: line 249: 0.28
-DEAL:: line 250: 0.31
-DEAL:: line 251: -0.061
+DEAL:: line 243: -0.060764
+DEAL:: line 244: -0.066742
+DEAL:: line 245: 0.013091
+DEAL:: line 246: 0.30980
+DEAL:: line 247: 0.34028
+DEAL:: line 248: -0.066742
+DEAL:: line 249: 0.28205
+DEAL:: line 250: 0.30980
+DEAL:: line 251: -0.060764
DEAL::not identity constrained: 1202
-DEAL:: line 243: -0.0095
-DEAL:: line 244: -0.11
-DEAL:: line 245: 0.0071
-DEAL:: line 246: 0.049
-DEAL:: line 247: 0.57
-DEAL:: line 248: -0.036
-DEAL:: line 249: 0.044
-DEAL:: line 250: 0.52
-DEAL:: line 251: -0.033
+DEAL:: line 243: -0.0095346
+DEAL:: line 244: -0.11199
+DEAL:: line 245: 0.0071125
+DEAL:: line 246: 0.048611
+DEAL:: line 247: 0.57098
+DEAL:: line 248: -0.036262
+DEAL:: line 249: 0.044257
+DEAL:: line 250: 0.51984
+DEAL:: line 251: -0.033014
DEAL::not identity constrained: 1203
-DEAL:: line 243: 0.10
-DEAL:: line 244: -0.026
-DEAL:: line 245: 0.0069
-DEAL:: line 246: -0.38
-DEAL:: line 247: 0.097
-DEAL:: line 248: -0.026
-DEAL:: line 249: 1.5
-DEAL:: line 250: -0.38
-DEAL:: line 251: 0.10
+DEAL:: line 243: 0.10240
+DEAL:: line 244: -0.026014
+DEAL:: line 245: 0.0069444
+DEAL:: line 246: -0.38360
+DEAL:: line 247: 0.097446
+DEAL:: line 248: -0.026014
+DEAL:: line 249: 1.5100
+DEAL:: line 250: -0.38360
+DEAL:: line 251: 0.10240
DEAL::not identity constrained: 1204
-DEAL:: line 243: 0.044
-DEAL:: line 244: 0.049
-DEAL:: line 245: -0.0095
-DEAL:: line 246: -0.17
-DEAL:: line 247: -0.18
-DEAL:: line 248: 0.036
-DEAL:: line 249: 0.65
-DEAL:: line 250: 0.72
-DEAL:: line 251: -0.14
+DEAL:: line 243: 0.044257
+DEAL:: line 244: 0.048611
+DEAL:: line 245: -0.0095346
+DEAL:: line 246: -0.16578
+DEAL:: line 247: -0.18210
+DEAL:: line 248: 0.035716
+DEAL:: line 249: 0.65261
+DEAL:: line 250: 0.71682
+DEAL:: line 251: -0.14060
DEAL::not identity constrained: 1205
-DEAL:: line 243: 0.0069
-DEAL:: line 244: 0.082
-DEAL:: line 245: -0.0052
-DEAL:: line 246: -0.026
-DEAL:: line 247: -0.31
-DEAL:: line 248: 0.019
-DEAL:: line 249: 0.10
-DEAL:: line 250: 1.2
-DEAL:: line 251: -0.076
+DEAL:: line 243: 0.0069444
+DEAL:: line 244: 0.081569
+DEAL:: line 245: -0.0051803
+DEAL:: line 246: -0.026014
+DEAL:: line 247: -0.30556
+DEAL:: line 248: 0.019405
+DEAL:: line 249: 0.10240
+DEAL:: line 250: 1.2028
+DEAL:: line 251: -0.076389
DEAL::not identity constrained: 1269
-DEAL:: line 18: 0.0039
-DEAL:: line 19: -0.061
-DEAL:: line 20: -0.0052
-DEAL:: line 21: -0.061
-DEAL:: line 22: 0.96
-DEAL:: line 23: 0.082
-DEAL:: line 24: -0.0052
-DEAL:: line 25: 0.082
-DEAL:: line 26: 0.0069
+DEAL:: line 18: 0.0038643
+DEAL:: line 19: -0.060848
+DEAL:: line 20: -0.0051803
+DEAL:: line 21: -0.060848
+DEAL:: line 22: 0.95811
+DEAL:: line 23: 0.081569
+DEAL:: line 24: -0.0051803
+DEAL:: line 25: 0.081569
+DEAL:: line 26: 0.0069444
DEAL::not identity constrained: 1270
-DEAL:: line 18: 0.0071
-DEAL:: line 19: -0.036
-DEAL:: line 20: -0.033
-DEAL:: line 21: -0.11
-DEAL:: line 22: 0.57
-DEAL:: line 23: 0.52
-DEAL:: line 24: -0.0095
-DEAL:: line 25: 0.049
-DEAL:: line 26: 0.044
+DEAL:: line 18: 0.0071125
+DEAL:: line 19: -0.036262
+DEAL:: line 20: -0.033014
+DEAL:: line 21: -0.11199
+DEAL:: line 22: 0.57098
+DEAL:: line 23: 0.51984
+DEAL:: line 24: -0.0095346
+DEAL:: line 25: 0.048611
+DEAL:: line 26: 0.044257
DEAL::not identity constrained: 1271
-DEAL:: line 18: -0.0052
-DEAL:: line 19: 0.019
-DEAL:: line 20: -0.076
-DEAL:: line 21: 0.082
-DEAL:: line 22: -0.31
-DEAL:: line 23: 1.2
-DEAL:: line 24: 0.0069
-DEAL:: line 25: -0.026
-DEAL:: line 26: 0.10
+DEAL:: line 18: -0.0051803
+DEAL:: line 19: 0.019405
+DEAL:: line 20: -0.076389
+DEAL:: line 21: 0.081569
+DEAL:: line 22: -0.30556
+DEAL:: line 23: 1.2028
+DEAL:: line 24: 0.0069444
+DEAL:: line 25: -0.026014
+DEAL:: line 26: 0.10240
DEAL::not identity constrained: 1272
-DEAL:: line 18: 0.0071
-DEAL:: line 19: -0.11
-DEAL:: line 20: -0.0095
-DEAL:: line 21: -0.036
-DEAL:: line 22: 0.57
-DEAL:: line 23: 0.049
-DEAL:: line 24: -0.033
-DEAL:: line 25: 0.52
-DEAL:: line 26: 0.044
+DEAL:: line 18: 0.0071125
+DEAL:: line 19: -0.11199
+DEAL:: line 20: -0.0095346
+DEAL:: line 21: -0.036262
+DEAL:: line 22: 0.57098
+DEAL:: line 23: 0.048611
+DEAL:: line 24: -0.033014
+DEAL:: line 25: 0.51984
+DEAL:: line 26: 0.044257
DEAL::not identity constrained: 1273
-DEAL:: line 18: 0.013
-DEAL:: line 19: -0.067
-DEAL:: line 20: -0.061
-DEAL:: line 21: -0.067
-DEAL:: line 22: 0.34
-DEAL:: line 23: 0.31
-DEAL:: line 24: -0.061
-DEAL:: line 25: 0.31
-DEAL:: line 26: 0.28
+DEAL:: line 18: 0.013091
+DEAL:: line 19: -0.066742
+DEAL:: line 20: -0.060764
+DEAL:: line 21: -0.066742
+DEAL:: line 22: 0.34028
+DEAL:: line 23: 0.30980
+DEAL:: line 24: -0.060764
+DEAL:: line 25: 0.30980
+DEAL:: line 26: 0.28205
DEAL::not identity constrained: 1274
-DEAL:: line 18: -0.0095
-DEAL:: line 19: 0.036
-DEAL:: line 20: -0.14
-DEAL:: line 21: 0.049
-DEAL:: line 22: -0.18
-DEAL:: line 23: 0.72
-DEAL:: line 24: 0.044
-DEAL:: line 25: -0.17
-DEAL:: line 26: 0.65
+DEAL:: line 18: -0.0095346
+DEAL:: line 19: 0.035716
+DEAL:: line 20: -0.14060
+DEAL:: line 21: 0.048611
+DEAL:: line 22: -0.18210
+DEAL:: line 23: 0.71682
+DEAL:: line 24: 0.044257
+DEAL:: line 25: -0.16578
+DEAL:: line 26: 0.65261
DEAL::not identity constrained: 1275
-DEAL:: line 18: -0.0052
-DEAL:: line 19: 0.082
-DEAL:: line 20: 0.0069
-DEAL:: line 21: 0.019
-DEAL:: line 22: -0.31
-DEAL:: line 23: -0.026
-DEAL:: line 24: -0.076
-DEAL:: line 25: 1.2
-DEAL:: line 26: 0.10
+DEAL:: line 18: -0.0051803
+DEAL:: line 19: 0.081569
+DEAL:: line 20: 0.0069444
+DEAL:: line 21: 0.019405
+DEAL:: line 22: -0.30556
+DEAL:: line 23: -0.026014
+DEAL:: line 24: -0.076389
+DEAL:: line 25: 1.2028
+DEAL:: line 26: 0.10240
DEAL::not identity constrained: 1276
-DEAL:: line 18: -0.0095
-DEAL:: line 19: 0.049
-DEAL:: line 20: 0.044
-DEAL:: line 21: 0.036
-DEAL:: line 22: -0.18
-DEAL:: line 23: -0.17
-DEAL:: line 24: -0.14
-DEAL:: line 25: 0.72
-DEAL:: line 26: 0.65
+DEAL:: line 18: -0.0095346
+DEAL:: line 19: 0.048611
+DEAL:: line 20: 0.044257
+DEAL:: line 21: 0.035716
+DEAL:: line 22: -0.18210
+DEAL:: line 23: -0.16578
+DEAL:: line 24: -0.14060
+DEAL:: line 25: 0.71682
+DEAL:: line 26: 0.65261
DEAL::not identity constrained: 1277
-DEAL:: line 18: 0.0069
-DEAL:: line 19: -0.026
-DEAL:: line 20: 0.10
-DEAL:: line 21: -0.026
-DEAL:: line 22: 0.097
-DEAL:: line 23: -0.38
-DEAL:: line 24: 0.10
-DEAL:: line 25: -0.38
-DEAL:: line 26: 1.5
+DEAL:: line 18: 0.0069444
+DEAL:: line 19: -0.026014
+DEAL:: line 20: 0.10240
+DEAL:: line 21: -0.026014
+DEAL:: line 22: 0.097446
+DEAL:: line 23: -0.38360
+DEAL:: line 24: 0.10240
+DEAL:: line 25: -0.38360
+DEAL:: line 26: 1.5100
DEAL::not identity constrained: 1278
-DEAL:: line 243: 0.0039
-DEAL:: line 244: -0.061
-DEAL:: line 245: -0.0052
-DEAL:: line 246: -0.061
-DEAL:: line 247: 0.96
-DEAL:: line 248: 0.082
-DEAL:: line 249: -0.0052
-DEAL:: line 250: 0.082
-DEAL:: line 251: 0.0069
+DEAL:: line 243: 0.0038643
+DEAL:: line 244: -0.060848
+DEAL:: line 245: -0.0051803
+DEAL:: line 246: -0.060848
+DEAL:: line 247: 0.95811
+DEAL:: line 248: 0.081569
+DEAL:: line 249: -0.0051803
+DEAL:: line 250: 0.081569
+DEAL:: line 251: 0.0069444
DEAL::not identity constrained: 1279
-DEAL:: line 243: 0.0071
-DEAL:: line 244: -0.036
-DEAL:: line 245: -0.033
-DEAL:: line 246: -0.11
-DEAL:: line 247: 0.57
-DEAL:: line 248: 0.52
-DEAL:: line 249: -0.0095
-DEAL:: line 250: 0.049
-DEAL:: line 251: 0.044
+DEAL:: line 243: 0.0071125
+DEAL:: line 244: -0.036262
+DEAL:: line 245: -0.033014
+DEAL:: line 246: -0.11199
+DEAL:: line 247: 0.57098
+DEAL:: line 248: 0.51984
+DEAL:: line 249: -0.0095346
+DEAL:: line 250: 0.048611
+DEAL:: line 251: 0.044257
DEAL::not identity constrained: 1280
-DEAL:: line 243: -0.0052
-DEAL:: line 244: 0.019
-DEAL:: line 245: -0.076
-DEAL:: line 246: 0.082
-DEAL:: line 247: -0.31
-DEAL:: line 248: 1.2
-DEAL:: line 249: 0.0069
-DEAL:: line 250: -0.026
-DEAL:: line 251: 0.10
+DEAL:: line 243: -0.0051803
+DEAL:: line 244: 0.019405
+DEAL:: line 245: -0.076389
+DEAL:: line 246: 0.081569
+DEAL:: line 247: -0.30556
+DEAL:: line 248: 1.2028
+DEAL:: line 249: 0.0069444
+DEAL:: line 250: -0.026014
+DEAL:: line 251: 0.10240
DEAL::not identity constrained: 1281
-DEAL:: line 243: 0.0071
-DEAL:: line 244: -0.11
-DEAL:: line 245: -0.0095
-DEAL:: line 246: -0.036
-DEAL:: line 247: 0.57
-DEAL:: line 248: 0.049
-DEAL:: line 249: -0.033
-DEAL:: line 250: 0.52
-DEAL:: line 251: 0.044
+DEAL:: line 243: 0.0071125
+DEAL:: line 244: -0.11199
+DEAL:: line 245: -0.0095346
+DEAL:: line 246: -0.036262
+DEAL:: line 247: 0.57098
+DEAL:: line 248: 0.048611
+DEAL:: line 249: -0.033014
+DEAL:: line 250: 0.51984
+DEAL:: line 251: 0.044257
DEAL::not identity constrained: 1282
-DEAL:: line 243: 0.013
-DEAL:: line 244: -0.067
-DEAL:: line 245: -0.061
-DEAL:: line 246: -0.067
-DEAL:: line 247: 0.34
-DEAL:: line 248: 0.31
-DEAL:: line 249: -0.061
-DEAL:: line 250: 0.31
-DEAL:: line 251: 0.28
+DEAL:: line 243: 0.013091
+DEAL:: line 244: -0.066742
+DEAL:: line 245: -0.060764
+DEAL:: line 246: -0.066742
+DEAL:: line 247: 0.34028
+DEAL:: line 248: 0.30980
+DEAL:: line 249: -0.060764
+DEAL:: line 250: 0.30980
+DEAL:: line 251: 0.28205
DEAL::not identity constrained: 1283
-DEAL:: line 243: -0.0095
-DEAL:: line 244: 0.036
-DEAL:: line 245: -0.14
-DEAL:: line 246: 0.049
-DEAL:: line 247: -0.18
-DEAL:: line 248: 0.72
-DEAL:: line 249: 0.044
-DEAL:: line 250: -0.17
-DEAL:: line 251: 0.65
+DEAL:: line 243: -0.0095346
+DEAL:: line 244: 0.035716
+DEAL:: line 245: -0.14060
+DEAL:: line 246: 0.048611
+DEAL:: line 247: -0.18210
+DEAL:: line 248: 0.71682
+DEAL:: line 249: 0.044257
+DEAL:: line 250: -0.16578
+DEAL:: line 251: 0.65261
DEAL::not identity constrained: 1284
-DEAL:: line 243: -0.0052
-DEAL:: line 244: 0.082
-DEAL:: line 245: 0.0069
-DEAL:: line 246: 0.019
-DEAL:: line 247: -0.31
-DEAL:: line 248: -0.026
-DEAL:: line 249: -0.076
-DEAL:: line 250: 1.2
-DEAL:: line 251: 0.10
+DEAL:: line 243: -0.0051803
+DEAL:: line 244: 0.081569
+DEAL:: line 245: 0.0069444
+DEAL:: line 246: 0.019405
+DEAL:: line 247: -0.30556
+DEAL:: line 248: -0.026014
+DEAL:: line 249: -0.076389
+DEAL:: line 250: 1.2028
+DEAL:: line 251: 0.10240
DEAL::not identity constrained: 1285
-DEAL:: line 243: -0.0095
-DEAL:: line 244: 0.049
-DEAL:: line 245: 0.044
-DEAL:: line 246: 0.036
-DEAL:: line 247: -0.18
-DEAL:: line 248: -0.17
-DEAL:: line 249: -0.14
-DEAL:: line 250: 0.72
-DEAL:: line 251: 0.65
+DEAL:: line 243: -0.0095346
+DEAL:: line 244: 0.048611
+DEAL:: line 245: 0.044257
+DEAL:: line 246: 0.035716
+DEAL:: line 247: -0.18210
+DEAL:: line 248: -0.16578
+DEAL:: line 249: -0.14060
+DEAL:: line 250: 0.71682
+DEAL:: line 251: 0.65261
DEAL::not identity constrained: 1286
-DEAL:: line 243: 0.0069
-DEAL:: line 244: -0.026
-DEAL:: line 245: 0.10
-DEAL:: line 246: -0.026
-DEAL:: line 247: 0.097
-DEAL:: line 248: -0.38
-DEAL:: line 249: 0.10
-DEAL:: line 250: -0.38
-DEAL:: line 251: 1.5
+DEAL:: line 243: 0.0069444
+DEAL:: line 244: -0.026014
+DEAL:: line 245: 0.10240
+DEAL:: line 246: -0.026014
+DEAL:: line 247: 0.097446
+DEAL:: line 248: -0.38360
+DEAL:: line 249: 0.10240
+DEAL:: line 250: -0.38360
+DEAL:: line 251: 1.5100
DEAL::not identity constrained: 1548
-DEAL:: line 117: 1.5
-DEAL:: line 118: -0.38
-DEAL:: line 119: 0.10
-DEAL:: line 120: -0.38
-DEAL:: line 121: 0.097
-DEAL:: line 122: -0.026
-DEAL:: line 123: 0.10
-DEAL:: line 124: -0.026
-DEAL:: line 125: 0.0069
+DEAL:: line 117: 1.5100
+DEAL:: line 118: -0.38360
+DEAL:: line 119: 0.10240
+DEAL:: line 120: -0.38360
+DEAL:: line 121: 0.097446
+DEAL:: line 122: -0.026014
+DEAL:: line 123: 0.10240
+DEAL:: line 124: -0.026014
+DEAL:: line 125: 0.0069444
DEAL::not identity constrained: 1549
-DEAL:: line 117: 0.65
-DEAL:: line 118: 0.72
-DEAL:: line 119: -0.14
-DEAL:: line 120: -0.17
-DEAL:: line 121: -0.18
-DEAL:: line 122: 0.036
-DEAL:: line 123: 0.044
-DEAL:: line 124: 0.049
-DEAL:: line 125: -0.0095
+DEAL:: line 117: 0.65261
+DEAL:: line 118: 0.71682
+DEAL:: line 119: -0.14060
+DEAL:: line 120: -0.16578
+DEAL:: line 121: -0.18210
+DEAL:: line 122: 0.035716
+DEAL:: line 123: 0.044257
+DEAL:: line 124: 0.048611
+DEAL:: line 125: -0.0095346
DEAL::not identity constrained: 1550
-DEAL:: line 117: 0.10
-DEAL:: line 118: 1.2
-DEAL:: line 119: -0.076
-DEAL:: line 120: -0.026
-DEAL:: line 121: -0.31
-DEAL:: line 122: 0.019
-DEAL:: line 123: 0.0069
-DEAL:: line 124: 0.082
-DEAL:: line 125: -0.0052
+DEAL:: line 117: 0.10240
+DEAL:: line 118: 1.2028
+DEAL:: line 119: -0.076389
+DEAL:: line 120: -0.026014
+DEAL:: line 121: -0.30556
+DEAL:: line 122: 0.019405
+DEAL:: line 123: 0.0069444
+DEAL:: line 124: 0.081569
+DEAL:: line 125: -0.0051803
DEAL::not identity constrained: 1551
-DEAL:: line 117: 0.65
-DEAL:: line 118: -0.17
-DEAL:: line 119: 0.044
-DEAL:: line 120: 0.72
-DEAL:: line 121: -0.18
-DEAL:: line 122: 0.049
-DEAL:: line 123: -0.14
-DEAL:: line 124: 0.036
-DEAL:: line 125: -0.0095
+DEAL:: line 117: 0.65261
+DEAL:: line 118: -0.16578
+DEAL:: line 119: 0.044257
+DEAL:: line 120: 0.71682
+DEAL:: line 121: -0.18210
+DEAL:: line 122: 0.048611
+DEAL:: line 123: -0.14060
+DEAL:: line 124: 0.035716
+DEAL:: line 125: -0.0095346
DEAL::not identity constrained: 1552
-DEAL:: line 117: 0.28
-DEAL:: line 118: 0.31
-DEAL:: line 119: -0.061
-DEAL:: line 120: 0.31
-DEAL:: line 121: 0.34
-DEAL:: line 122: -0.067
-DEAL:: line 123: -0.061
-DEAL:: line 124: -0.067
-DEAL:: line 125: 0.013
+DEAL:: line 117: 0.28205
+DEAL:: line 118: 0.30980
+DEAL:: line 119: -0.060764
+DEAL:: line 120: 0.30980
+DEAL:: line 121: 0.34028
+DEAL:: line 122: -0.066742
+DEAL:: line 123: -0.060764
+DEAL:: line 124: -0.066742
+DEAL:: line 125: 0.013091
DEAL::not identity constrained: 1553
-DEAL:: line 117: 0.044
-DEAL:: line 118: 0.52
-DEAL:: line 119: -0.033
-DEAL:: line 120: 0.049
-DEAL:: line 121: 0.57
-DEAL:: line 122: -0.036
-DEAL:: line 123: -0.0095
-DEAL:: line 124: -0.11
-DEAL:: line 125: 0.0071
+DEAL:: line 117: 0.044257
+DEAL:: line 118: 0.51984
+DEAL:: line 119: -0.033014
+DEAL:: line 120: 0.048611
+DEAL:: line 121: 0.57098
+DEAL:: line 122: -0.036262
+DEAL:: line 123: -0.0095346
+DEAL:: line 124: -0.11199
+DEAL:: line 125: 0.0071125
DEAL::not identity constrained: 1554
-DEAL:: line 117: 0.10
-DEAL:: line 118: -0.026
-DEAL:: line 119: 0.0069
-DEAL:: line 120: 1.2
-DEAL:: line 121: -0.31
-DEAL:: line 122: 0.082
-DEAL:: line 123: -0.076
-DEAL:: line 124: 0.019
-DEAL:: line 125: -0.0052
+DEAL:: line 117: 0.10240
+DEAL:: line 118: -0.026014
+DEAL:: line 119: 0.0069444
+DEAL:: line 120: 1.2028
+DEAL:: line 121: -0.30556
+DEAL:: line 122: 0.081569
+DEAL:: line 123: -0.076389
+DEAL:: line 124: 0.019405
+DEAL:: line 125: -0.0051803
DEAL::not identity constrained: 1555
-DEAL:: line 117: 0.044
-DEAL:: line 118: 0.049
-DEAL:: line 119: -0.0095
-DEAL:: line 120: 0.52
-DEAL:: line 121: 0.57
-DEAL:: line 122: -0.11
-DEAL:: line 123: -0.033
-DEAL:: line 124: -0.036
-DEAL:: line 125: 0.0071
+DEAL:: line 117: 0.044257
+DEAL:: line 118: 0.048611
+DEAL:: line 119: -0.0095346
+DEAL:: line 120: 0.51984
+DEAL:: line 121: 0.57098
+DEAL:: line 122: -0.11199
+DEAL:: line 123: -0.033014
+DEAL:: line 124: -0.036262
+DEAL:: line 125: 0.0071125
DEAL::not identity constrained: 1556
-DEAL:: line 117: 0.0069
-DEAL:: line 118: 0.082
-DEAL:: line 119: -0.0052
-DEAL:: line 120: 0.082
-DEAL:: line 121: 0.96
-DEAL:: line 122: -0.061
-DEAL:: line 123: -0.0052
-DEAL:: line 124: -0.061
-DEAL:: line 125: 0.0039
+DEAL:: line 117: 0.0069444
+DEAL:: line 118: 0.081569
+DEAL:: line 119: -0.0051803
+DEAL:: line 120: 0.081569
+DEAL:: line 121: 0.95811
+DEAL:: line 122: -0.060848
+DEAL:: line 123: -0.0051803
+DEAL:: line 124: -0.060848
+DEAL:: line 125: 0.0038643
DEAL::not identity constrained: 1638
-DEAL:: line 117: -0.076
-DEAL:: line 118: 0.019
-DEAL:: line 119: -0.0052
-DEAL:: line 120: 1.2
-DEAL:: line 121: -0.31
-DEAL:: line 122: 0.082
-DEAL:: line 123: 0.10
-DEAL:: line 124: -0.026
-DEAL:: line 125: 0.0069
+DEAL:: line 117: -0.076389
+DEAL:: line 118: 0.019405
+DEAL:: line 119: -0.0051803
+DEAL:: line 120: 1.2028
+DEAL:: line 121: -0.30556
+DEAL:: line 122: 0.081569
+DEAL:: line 123: 0.10240
+DEAL:: line 124: -0.026014
+DEAL:: line 125: 0.0069444
DEAL::not identity constrained: 1639
-DEAL:: line 117: -0.033
-DEAL:: line 118: -0.036
-DEAL:: line 119: 0.0071
-DEAL:: line 120: 0.52
-DEAL:: line 121: 0.57
-DEAL:: line 122: -0.11
-DEAL:: line 123: 0.044
-DEAL:: line 124: 0.049
-DEAL:: line 125: -0.0095
+DEAL:: line 117: -0.033014
+DEAL:: line 118: -0.036262
+DEAL:: line 119: 0.0071125
+DEAL:: line 120: 0.51984
+DEAL:: line 121: 0.57098
+DEAL:: line 122: -0.11199
+DEAL:: line 123: 0.044257
+DEAL:: line 124: 0.048611
+DEAL:: line 125: -0.0095346
DEAL::not identity constrained: 1640
-DEAL:: line 117: -0.0052
-DEAL:: line 118: -0.061
-DEAL:: line 119: 0.0039
-DEAL:: line 120: 0.082
-DEAL:: line 121: 0.96
-DEAL:: line 122: -0.061
-DEAL:: line 123: 0.0069
-DEAL:: line 124: 0.082
-DEAL:: line 125: -0.0052
+DEAL:: line 117: -0.0051803
+DEAL:: line 118: -0.060848
+DEAL:: line 119: 0.0038643
+DEAL:: line 120: 0.081569
+DEAL:: line 121: 0.95811
+DEAL:: line 122: -0.060848
+DEAL:: line 123: 0.0069444
+DEAL:: line 124: 0.081569
+DEAL:: line 125: -0.0051803
DEAL::not identity constrained: 1641
-DEAL:: line 117: -0.14
-DEAL:: line 118: 0.036
-DEAL:: line 119: -0.0095
-DEAL:: line 120: 0.72
-DEAL:: line 121: -0.18
-DEAL:: line 122: 0.049
-DEAL:: line 123: 0.65
-DEAL:: line 124: -0.17
-DEAL:: line 125: 0.044
+DEAL:: line 117: -0.14060
+DEAL:: line 118: 0.035716
+DEAL:: line 119: -0.0095346
+DEAL:: line 120: 0.71682
+DEAL:: line 121: -0.18210
+DEAL:: line 122: 0.048611
+DEAL:: line 123: 0.65261
+DEAL:: line 124: -0.16578
+DEAL:: line 125: 0.044257
DEAL::not identity constrained: 1642
-DEAL:: line 117: -0.061
-DEAL:: line 118: -0.067
-DEAL:: line 119: 0.013
-DEAL:: line 120: 0.31
-DEAL:: line 121: 0.34
-DEAL:: line 122: -0.067
-DEAL:: line 123: 0.28
-DEAL:: line 124: 0.31
-DEAL:: line 125: -0.061
+DEAL:: line 117: -0.060764
+DEAL:: line 118: -0.066742
+DEAL:: line 119: 0.013091
+DEAL:: line 120: 0.30980
+DEAL:: line 121: 0.34028
+DEAL:: line 122: -0.066742
+DEAL:: line 123: 0.28205
+DEAL:: line 124: 0.30980
+DEAL:: line 125: -0.060764
DEAL::not identity constrained: 1643
-DEAL:: line 117: -0.0095
-DEAL:: line 118: -0.11
-DEAL:: line 119: 0.0071
-DEAL:: line 120: 0.049
-DEAL:: line 121: 0.57
-DEAL:: line 122: -0.036
-DEAL:: line 123: 0.044
-DEAL:: line 124: 0.52
-DEAL:: line 125: -0.033
+DEAL:: line 117: -0.0095346
+DEAL:: line 118: -0.11199
+DEAL:: line 119: 0.0071125
+DEAL:: line 120: 0.048611
+DEAL:: line 121: 0.57098
+DEAL:: line 122: -0.036262
+DEAL:: line 123: 0.044257
+DEAL:: line 124: 0.51984
+DEAL:: line 125: -0.033014
DEAL::not identity constrained: 1644
-DEAL:: line 117: 0.10
-DEAL:: line 118: -0.026
-DEAL:: line 119: 0.0069
-DEAL:: line 120: -0.38
-DEAL:: line 121: 0.097
-DEAL:: line 122: -0.026
-DEAL:: line 123: 1.5
-DEAL:: line 124: -0.38
-DEAL:: line 125: 0.10
+DEAL:: line 117: 0.10240
+DEAL:: line 118: -0.026014
+DEAL:: line 119: 0.0069444
+DEAL:: line 120: -0.38360
+DEAL:: line 121: 0.097446
+DEAL:: line 122: -0.026014
+DEAL:: line 123: 1.5100
+DEAL:: line 124: -0.38360
+DEAL:: line 125: 0.10240
DEAL::not identity constrained: 1645
-DEAL:: line 117: 0.044
-DEAL:: line 118: 0.049
-DEAL:: line 119: -0.0095
-DEAL:: line 120: -0.17
-DEAL:: line 121: -0.18
-DEAL:: line 122: 0.036
-DEAL:: line 123: 0.65
-DEAL:: line 124: 0.72
-DEAL:: line 125: -0.14
+DEAL:: line 117: 0.044257
+DEAL:: line 118: 0.048611
+DEAL:: line 119: -0.0095346
+DEAL:: line 120: -0.16578
+DEAL:: line 121: -0.18210
+DEAL:: line 122: 0.035716
+DEAL:: line 123: 0.65261
+DEAL:: line 124: 0.71682
+DEAL:: line 125: -0.14060
DEAL::not identity constrained: 1646
-DEAL:: line 117: 0.0069
-DEAL:: line 118: 0.082
-DEAL:: line 119: -0.0052
-DEAL:: line 120: -0.026
-DEAL:: line 121: -0.31
-DEAL:: line 122: 0.019
-DEAL:: line 123: 0.10
-DEAL:: line 124: 1.2
-DEAL:: line 125: -0.076
+DEAL:: line 117: 0.0069444
+DEAL:: line 118: 0.081569
+DEAL:: line 119: -0.0051803
+DEAL:: line 120: -0.026014
+DEAL:: line 121: -0.30556
+DEAL:: line 122: 0.019405
+DEAL:: line 123: 0.10240
+DEAL:: line 124: 1.2028
+DEAL:: line 125: -0.076389
DEAL::not identity constrained: 1746
-DEAL:: line 342: 1.5
-DEAL:: line 343: -0.38
-DEAL:: line 344: 0.10
-DEAL:: line 345: -0.38
-DEAL:: line 346: 0.097
-DEAL:: line 347: -0.026
-DEAL:: line 348: 0.10
-DEAL:: line 349: -0.026
-DEAL:: line 350: 0.0069
+DEAL:: line 342: 1.5100
+DEAL:: line 343: -0.38360
+DEAL:: line 344: 0.10240
+DEAL:: line 345: -0.38360
+DEAL:: line 346: 0.097446
+DEAL:: line 347: -0.026014
+DEAL:: line 348: 0.10240
+DEAL:: line 349: -0.026014
+DEAL:: line 350: 0.0069444
DEAL::not identity constrained: 1747
-DEAL:: line 342: 0.65
-DEAL:: line 343: 0.72
-DEAL:: line 344: -0.14
-DEAL:: line 345: -0.17
-DEAL:: line 346: -0.18
-DEAL:: line 347: 0.036
-DEAL:: line 348: 0.044
-DEAL:: line 349: 0.049
-DEAL:: line 350: -0.0095
+DEAL:: line 342: 0.65261
+DEAL:: line 343: 0.71682
+DEAL:: line 344: -0.14060
+DEAL:: line 345: -0.16578
+DEAL:: line 346: -0.18210
+DEAL:: line 347: 0.035716
+DEAL:: line 348: 0.044257
+DEAL:: line 349: 0.048611
+DEAL:: line 350: -0.0095346
DEAL::not identity constrained: 1748
-DEAL:: line 342: 0.10
-DEAL:: line 343: 1.2
-DEAL:: line 344: -0.076
-DEAL:: line 345: -0.026
-DEAL:: line 346: -0.31
-DEAL:: line 347: 0.019
-DEAL:: line 348: 0.0069
-DEAL:: line 349: 0.082
-DEAL:: line 350: -0.0052
+DEAL:: line 342: 0.10240
+DEAL:: line 343: 1.2028
+DEAL:: line 344: -0.076389
+DEAL:: line 345: -0.026014
+DEAL:: line 346: -0.30556
+DEAL:: line 347: 0.019405
+DEAL:: line 348: 0.0069444
+DEAL:: line 349: 0.081569
+DEAL:: line 350: -0.0051803
DEAL::not identity constrained: 1749
-DEAL:: line 342: 0.65
-DEAL:: line 343: -0.17
-DEAL:: line 344: 0.044
-DEAL:: line 345: 0.72
-DEAL:: line 346: -0.18
-DEAL:: line 347: 0.049
-DEAL:: line 348: -0.14
-DEAL:: line 349: 0.036
-DEAL:: line 350: -0.0095
+DEAL:: line 342: 0.65261
+DEAL:: line 343: -0.16578
+DEAL:: line 344: 0.044257
+DEAL:: line 345: 0.71682
+DEAL:: line 346: -0.18210
+DEAL:: line 347: 0.048611
+DEAL:: line 348: -0.14060
+DEAL:: line 349: 0.035716
+DEAL:: line 350: -0.0095346
DEAL::not identity constrained: 1750
-DEAL:: line 342: 0.28
-DEAL:: line 343: 0.31
-DEAL:: line 344: -0.061
-DEAL:: line 345: 0.31
-DEAL:: line 346: 0.34
-DEAL:: line 347: -0.067
-DEAL:: line 348: -0.061
-DEAL:: line 349: -0.067
-DEAL:: line 350: 0.013
+DEAL:: line 342: 0.28205
+DEAL:: line 343: 0.30980
+DEAL:: line 344: -0.060764
+DEAL:: line 345: 0.30980
+DEAL:: line 346: 0.34028
+DEAL:: line 347: -0.066742
+DEAL:: line 348: -0.060764
+DEAL:: line 349: -0.066742
+DEAL:: line 350: 0.013091
DEAL::not identity constrained: 1751
-DEAL:: line 342: 0.044
-DEAL:: line 343: 0.52
-DEAL:: line 344: -0.033
-DEAL:: line 345: 0.049
-DEAL:: line 346: 0.57
-DEAL:: line 347: -0.036
-DEAL:: line 348: -0.0095
-DEAL:: line 349: -0.11
-DEAL:: line 350: 0.0071
+DEAL:: line 342: 0.044257
+DEAL:: line 343: 0.51984
+DEAL:: line 344: -0.033014
+DEAL:: line 345: 0.048611
+DEAL:: line 346: 0.57098
+DEAL:: line 347: -0.036262
+DEAL:: line 348: -0.0095346
+DEAL:: line 349: -0.11199
+DEAL:: line 350: 0.0071125
DEAL::not identity constrained: 1752
-DEAL:: line 342: 0.10
-DEAL:: line 343: -0.026
-DEAL:: line 344: 0.0069
-DEAL:: line 345: 1.2
-DEAL:: line 346: -0.31
-DEAL:: line 347: 0.082
-DEAL:: line 348: -0.076
-DEAL:: line 349: 0.019
-DEAL:: line 350: -0.0052
+DEAL:: line 342: 0.10240
+DEAL:: line 343: -0.026014
+DEAL:: line 344: 0.0069444
+DEAL:: line 345: 1.2028
+DEAL:: line 346: -0.30556
+DEAL:: line 347: 0.081569
+DEAL:: line 348: -0.076389
+DEAL:: line 349: 0.019405
+DEAL:: line 350: -0.0051803
DEAL::not identity constrained: 1753
-DEAL:: line 342: 0.044
-DEAL:: line 343: 0.049
-DEAL:: line 344: -0.0095
-DEAL:: line 345: 0.52
-DEAL:: line 346: 0.57
-DEAL:: line 347: -0.11
-DEAL:: line 348: -0.033
-DEAL:: line 349: -0.036
-DEAL:: line 350: 0.0071
+DEAL:: line 342: 0.044257
+DEAL:: line 343: 0.048611
+DEAL:: line 344: -0.0095346
+DEAL:: line 345: 0.51984
+DEAL:: line 346: 0.57098
+DEAL:: line 347: -0.11199
+DEAL:: line 348: -0.033014
+DEAL:: line 349: -0.036262
+DEAL:: line 350: 0.0071125
DEAL::not identity constrained: 1754
-DEAL:: line 342: 0.0069
-DEAL:: line 343: 0.082
-DEAL:: line 344: -0.0052
-DEAL:: line 345: 0.082
-DEAL:: line 346: 0.96
-DEAL:: line 347: -0.061
-DEAL:: line 348: -0.0052
-DEAL:: line 349: -0.061
-DEAL:: line 350: 0.0039
+DEAL:: line 342: 0.0069444
+DEAL:: line 343: 0.081569
+DEAL:: line 344: -0.0051803
+DEAL:: line 345: 0.081569
+DEAL:: line 346: 0.95811
+DEAL:: line 347: -0.060848
+DEAL:: line 348: -0.0051803
+DEAL:: line 349: -0.060848
+DEAL:: line 350: 0.0038643
DEAL::not identity constrained: 1836
-DEAL:: line 342: -0.076
-DEAL:: line 343: 1.2
-DEAL:: line 344: 0.10
-DEAL:: line 345: 0.019
-DEAL:: line 346: -0.31
-DEAL:: line 347: -0.026
-DEAL:: line 348: -0.0052
-DEAL:: line 349: 0.082
-DEAL:: line 350: 0.0069
+DEAL:: line 342: -0.076389
+DEAL:: line 343: 1.2028
+DEAL:: line 344: 0.10240
+DEAL:: line 345: 0.019405
+DEAL:: line 346: -0.30556
+DEAL:: line 347: -0.026014
+DEAL:: line 348: -0.0051803
+DEAL:: line 349: 0.081569
+DEAL:: line 350: 0.0069444
DEAL::not identity constrained: 1837
-DEAL:: line 342: -0.14
-DEAL:: line 343: 0.72
-DEAL:: line 344: 0.65
-DEAL:: line 345: 0.036
-DEAL:: line 346: -0.18
-DEAL:: line 347: -0.17
-DEAL:: line 348: -0.0095
-DEAL:: line 349: 0.049
-DEAL:: line 350: 0.044
+DEAL:: line 342: -0.14060
+DEAL:: line 343: 0.71682
+DEAL:: line 344: 0.65261
+DEAL:: line 345: 0.035716
+DEAL:: line 346: -0.18210
+DEAL:: line 347: -0.16578
+DEAL:: line 348: -0.0095346
+DEAL:: line 349: 0.048611
+DEAL:: line 350: 0.044257
DEAL::not identity constrained: 1838
-DEAL:: line 342: 0.10
-DEAL:: line 343: -0.38
-DEAL:: line 344: 1.5
-DEAL:: line 345: -0.026
-DEAL:: line 346: 0.097
-DEAL:: line 347: -0.38
-DEAL:: line 348: 0.0069
-DEAL:: line 349: -0.026
-DEAL:: line 350: 0.10
+DEAL:: line 342: 0.10240
+DEAL:: line 343: -0.38360
+DEAL:: line 344: 1.5100
+DEAL:: line 345: -0.026014
+DEAL:: line 346: 0.097446
+DEAL:: line 347: -0.38360
+DEAL:: line 348: 0.0069444
+DEAL:: line 349: -0.026014
+DEAL:: line 350: 0.10240
DEAL::not identity constrained: 1839
-DEAL:: line 342: -0.033
-DEAL:: line 343: 0.52
-DEAL:: line 344: 0.044
-DEAL:: line 345: -0.036
-DEAL:: line 346: 0.57
-DEAL:: line 347: 0.049
-DEAL:: line 348: 0.0071
-DEAL:: line 349: -0.11
-DEAL:: line 350: -0.0095
+DEAL:: line 342: -0.033014
+DEAL:: line 343: 0.51984
+DEAL:: line 344: 0.044257
+DEAL:: line 345: -0.036262
+DEAL:: line 346: 0.57098
+DEAL:: line 347: 0.048611
+DEAL:: line 348: 0.0071125
+DEAL:: line 349: -0.11199
+DEAL:: line 350: -0.0095346
DEAL::not identity constrained: 1840
-DEAL:: line 342: -0.061
-DEAL:: line 343: 0.31
-DEAL:: line 344: 0.28
-DEAL:: line 345: -0.067
-DEAL:: line 346: 0.34
-DEAL:: line 347: 0.31
-DEAL:: line 348: 0.013
-DEAL:: line 349: -0.067
-DEAL:: line 350: -0.061
+DEAL:: line 342: -0.060764
+DEAL:: line 343: 0.30980
+DEAL:: line 344: 0.28205
+DEAL:: line 345: -0.066742
+DEAL:: line 346: 0.34028
+DEAL:: line 347: 0.30980
+DEAL:: line 348: 0.013091
+DEAL:: line 349: -0.066742
+DEAL:: line 350: -0.060764
DEAL::not identity constrained: 1841
-DEAL:: line 342: 0.044
-DEAL:: line 343: -0.17
-DEAL:: line 344: 0.65
-DEAL:: line 345: 0.049
-DEAL:: line 346: -0.18
-DEAL:: line 347: 0.72
-DEAL:: line 348: -0.0095
-DEAL:: line 349: 0.036
-DEAL:: line 350: -0.14
+DEAL:: line 342: 0.044257
+DEAL:: line 343: -0.16578
+DEAL:: line 344: 0.65261
+DEAL:: line 345: 0.048611
+DEAL:: line 346: -0.18210
+DEAL:: line 347: 0.71682
+DEAL:: line 348: -0.0095346
+DEAL:: line 349: 0.035716
+DEAL:: line 350: -0.14060
DEAL::not identity constrained: 1842
-DEAL:: line 342: -0.0052
-DEAL:: line 343: 0.082
-DEAL:: line 344: 0.0069
-DEAL:: line 345: -0.061
-DEAL:: line 346: 0.96
-DEAL:: line 347: 0.082
-DEAL:: line 348: 0.0039
-DEAL:: line 349: -0.061
-DEAL:: line 350: -0.0052
+DEAL:: line 342: -0.0051803
+DEAL:: line 343: 0.081569
+DEAL:: line 344: 0.0069444
+DEAL:: line 345: -0.060848
+DEAL:: line 346: 0.95811
+DEAL:: line 347: 0.081569
+DEAL:: line 348: 0.0038643
+DEAL:: line 349: -0.060848
+DEAL:: line 350: -0.0051803
DEAL::not identity constrained: 1843
-DEAL:: line 342: -0.0095
-DEAL:: line 343: 0.049
-DEAL:: line 344: 0.044
-DEAL:: line 345: -0.11
-DEAL:: line 346: 0.57
-DEAL:: line 347: 0.52
-DEAL:: line 348: 0.0071
-DEAL:: line 349: -0.036
-DEAL:: line 350: -0.033
+DEAL:: line 342: -0.0095346
+DEAL:: line 343: 0.048611
+DEAL:: line 344: 0.044257
+DEAL:: line 345: -0.11199
+DEAL:: line 346: 0.57098
+DEAL:: line 347: 0.51984
+DEAL:: line 348: 0.0071125
+DEAL:: line 349: -0.036262
+DEAL:: line 350: -0.033014
DEAL::not identity constrained: 1844
-DEAL:: line 342: 0.0069
-DEAL:: line 343: -0.026
-DEAL:: line 344: 0.10
-DEAL:: line 345: 0.082
-DEAL:: line 346: -0.31
-DEAL:: line 347: 1.2
-DEAL:: line 348: -0.0052
-DEAL:: line 349: 0.019
-DEAL:: line 350: -0.076
+DEAL:: line 342: 0.0069444
+DEAL:: line 343: -0.026014
+DEAL:: line 344: 0.10240
+DEAL:: line 345: 0.081569
+DEAL:: line 346: -0.30556
+DEAL:: line 347: 1.2028
+DEAL:: line 348: -0.0051803
+DEAL:: line 349: 0.019405
+DEAL:: line 350: -0.076389
DEAL::not identity constrained: 1908
-DEAL:: line 117: -0.076
-DEAL:: line 118: 1.2
-DEAL:: line 119: 0.10
-DEAL:: line 120: 0.019
-DEAL:: line 121: -0.31
-DEAL:: line 122: -0.026
-DEAL:: line 123: -0.0052
-DEAL:: line 124: 0.082
-DEAL:: line 125: 0.0069
+DEAL:: line 117: -0.076389
+DEAL:: line 118: 1.2028
+DEAL:: line 119: 0.10240
+DEAL:: line 120: 0.019405
+DEAL:: line 121: -0.30556
+DEAL:: line 122: -0.026014
+DEAL:: line 123: -0.0051803
+DEAL:: line 124: 0.081569
+DEAL:: line 125: 0.0069444
DEAL::not identity constrained: 1909
-DEAL:: line 117: -0.14
-DEAL:: line 118: 0.72
-DEAL:: line 119: 0.65
-DEAL:: line 120: 0.036
-DEAL:: line 121: -0.18
-DEAL:: line 122: -0.17
-DEAL:: line 123: -0.0095
-DEAL:: line 124: 0.049
-DEAL:: line 125: 0.044
+DEAL:: line 117: -0.14060
+DEAL:: line 118: 0.71682
+DEAL:: line 119: 0.65261
+DEAL:: line 120: 0.035716
+DEAL:: line 121: -0.18210
+DEAL:: line 122: -0.16578
+DEAL:: line 123: -0.0095346
+DEAL:: line 124: 0.048611
+DEAL:: line 125: 0.044257
DEAL::not identity constrained: 1910
-DEAL:: line 117: 0.10
-DEAL:: line 118: -0.38
-DEAL:: line 119: 1.5
-DEAL:: line 120: -0.026
-DEAL:: line 121: 0.097
-DEAL:: line 122: -0.38
-DEAL:: line 123: 0.0069
-DEAL:: line 124: -0.026
-DEAL:: line 125: 0.10
+DEAL:: line 117: 0.10240
+DEAL:: line 118: -0.38360
+DEAL:: line 119: 1.5100
+DEAL:: line 120: -0.026014
+DEAL:: line 121: 0.097446
+DEAL:: line 122: -0.38360
+DEAL:: line 123: 0.0069444
+DEAL:: line 124: -0.026014
+DEAL:: line 125: 0.10240
DEAL::not identity constrained: 1911
-DEAL:: line 117: -0.033
-DEAL:: line 118: 0.52
-DEAL:: line 119: 0.044
-DEAL:: line 120: -0.036
-DEAL:: line 121: 0.57
-DEAL:: line 122: 0.049
-DEAL:: line 123: 0.0071
-DEAL:: line 124: -0.11
-DEAL:: line 125: -0.0095
+DEAL:: line 117: -0.033014
+DEAL:: line 118: 0.51984
+DEAL:: line 119: 0.044257
+DEAL:: line 120: -0.036262
+DEAL:: line 121: 0.57098
+DEAL:: line 122: 0.048611
+DEAL:: line 123: 0.0071125
+DEAL:: line 124: -0.11199
+DEAL:: line 125: -0.0095346
DEAL::not identity constrained: 1912
-DEAL:: line 117: -0.061
-DEAL:: line 118: 0.31
-DEAL:: line 119: 0.28
-DEAL:: line 120: -0.067
-DEAL:: line 121: 0.34
-DEAL:: line 122: 0.31
-DEAL:: line 123: 0.013
-DEAL:: line 124: -0.067
-DEAL:: line 125: -0.061
+DEAL:: line 117: -0.060764
+DEAL:: line 118: 0.30980
+DEAL:: line 119: 0.28205
+DEAL:: line 120: -0.066742
+DEAL:: line 121: 0.34028
+DEAL:: line 122: 0.30980
+DEAL:: line 123: 0.013091
+DEAL:: line 124: -0.066742
+DEAL:: line 125: -0.060764
DEAL::not identity constrained: 1913
-DEAL:: line 117: 0.044
-DEAL:: line 118: -0.17
-DEAL:: line 119: 0.65
-DEAL:: line 120: 0.049
-DEAL:: line 121: -0.18
-DEAL:: line 122: 0.72
-DEAL:: line 123: -0.0095
-DEAL:: line 124: 0.036
-DEAL:: line 125: -0.14
+DEAL:: line 117: 0.044257
+DEAL:: line 118: -0.16578
+DEAL:: line 119: 0.65261
+DEAL:: line 120: 0.048611
+DEAL:: line 121: -0.18210
+DEAL:: line 122: 0.71682
+DEAL:: line 123: -0.0095346
+DEAL:: line 124: 0.035716
+DEAL:: line 125: -0.14060
DEAL::not identity constrained: 1914
-DEAL:: line 117: -0.0052
-DEAL:: line 118: 0.082
-DEAL:: line 119: 0.0069
-DEAL:: line 120: -0.061
-DEAL:: line 121: 0.96
-DEAL:: line 122: 0.082
-DEAL:: line 123: 0.0039
-DEAL:: line 124: -0.061
-DEAL:: line 125: -0.0052
+DEAL:: line 117: -0.0051803
+DEAL:: line 118: 0.081569
+DEAL:: line 119: 0.0069444
+DEAL:: line 120: -0.060848
+DEAL:: line 121: 0.95811
+DEAL:: line 122: 0.081569
+DEAL:: line 123: 0.0038643
+DEAL:: line 124: -0.060848
+DEAL:: line 125: -0.0051803
DEAL::not identity constrained: 1915
-DEAL:: line 117: -0.0095
-DEAL:: line 118: 0.049
-DEAL:: line 119: 0.044
-DEAL:: line 120: -0.11
-DEAL:: line 121: 0.57
-DEAL:: line 122: 0.52
-DEAL:: line 123: 0.0071
-DEAL:: line 124: -0.036
-DEAL:: line 125: -0.033
+DEAL:: line 117: -0.0095346
+DEAL:: line 118: 0.048611
+DEAL:: line 119: 0.044257
+DEAL:: line 120: -0.11199
+DEAL:: line 121: 0.57098
+DEAL:: line 122: 0.51984
+DEAL:: line 123: 0.0071125
+DEAL:: line 124: -0.036262
+DEAL:: line 125: -0.033014
DEAL::not identity constrained: 1916
-DEAL:: line 117: 0.0069
-DEAL:: line 118: -0.026
-DEAL:: line 119: 0.10
-DEAL:: line 120: 0.082
-DEAL:: line 121: -0.31
-DEAL:: line 122: 1.2
-DEAL:: line 123: -0.0052
-DEAL:: line 124: 0.019
-DEAL:: line 125: -0.076
+DEAL:: line 117: 0.0069444
+DEAL:: line 118: -0.026014
+DEAL:: line 119: 0.10240
+DEAL:: line 120: 0.081569
+DEAL:: line 121: -0.30556
+DEAL:: line 122: 1.2028
+DEAL:: line 123: -0.0051803
+DEAL:: line 124: 0.019405
+DEAL:: line 125: -0.076389
DEAL::not identity constrained: 1917
-DEAL:: line 342: -0.076
-DEAL:: line 343: 0.019
-DEAL:: line 344: -0.0052
-DEAL:: line 345: 1.2
-DEAL:: line 346: -0.31
-DEAL:: line 347: 0.082
-DEAL:: line 348: 0.10
-DEAL:: line 349: -0.026
-DEAL:: line 350: 0.0069
+DEAL:: line 342: -0.076389
+DEAL:: line 343: 0.019405
+DEAL:: line 344: -0.0051803
+DEAL:: line 345: 1.2028
+DEAL:: line 346: -0.30556
+DEAL:: line 347: 0.081569
+DEAL:: line 348: 0.10240
+DEAL:: line 349: -0.026014
+DEAL:: line 350: 0.0069444
DEAL::not identity constrained: 1918
-DEAL:: line 342: -0.033
-DEAL:: line 343: -0.036
-DEAL:: line 344: 0.0071
-DEAL:: line 345: 0.52
-DEAL:: line 346: 0.57
-DEAL:: line 347: -0.11
-DEAL:: line 348: 0.044
-DEAL:: line 349: 0.049
-DEAL:: line 350: -0.0095
+DEAL:: line 342: -0.033014
+DEAL:: line 343: -0.036262
+DEAL:: line 344: 0.0071125
+DEAL:: line 345: 0.51984
+DEAL:: line 346: 0.57098
+DEAL:: line 347: -0.11199
+DEAL:: line 348: 0.044257
+DEAL:: line 349: 0.048611
+DEAL:: line 350: -0.0095346
DEAL::not identity constrained: 1919
-DEAL:: line 342: -0.0052
-DEAL:: line 343: -0.061
-DEAL:: line 344: 0.0039
-DEAL:: line 345: 0.082
-DEAL:: line 346: 0.96
-DEAL:: line 347: -0.061
-DEAL:: line 348: 0.0069
-DEAL:: line 349: 0.082
-DEAL:: line 350: -0.0052
+DEAL:: line 342: -0.0051803
+DEAL:: line 343: -0.060848
+DEAL:: line 344: 0.0038643
+DEAL:: line 345: 0.081569
+DEAL:: line 346: 0.95811
+DEAL:: line 347: -0.060848
+DEAL:: line 348: 0.0069444
+DEAL:: line 349: 0.081569
+DEAL:: line 350: -0.0051803
DEAL::not identity constrained: 1920
-DEAL:: line 342: -0.14
-DEAL:: line 343: 0.036
-DEAL:: line 344: -0.0095
-DEAL:: line 345: 0.72
-DEAL:: line 346: -0.18
-DEAL:: line 347: 0.049
-DEAL:: line 348: 0.65
-DEAL:: line 349: -0.17
-DEAL:: line 350: 0.044
+DEAL:: line 342: -0.14060
+DEAL:: line 343: 0.035716
+DEAL:: line 344: -0.0095346
+DEAL:: line 345: 0.71682
+DEAL:: line 346: -0.18210
+DEAL:: line 347: 0.048611
+DEAL:: line 348: 0.65261
+DEAL:: line 349: -0.16578
+DEAL:: line 350: 0.044257
DEAL::not identity constrained: 1921
-DEAL:: line 342: -0.061
-DEAL:: line 343: -0.067
-DEAL:: line 344: 0.013
-DEAL:: line 345: 0.31
-DEAL:: line 346: 0.34
-DEAL:: line 347: -0.067
-DEAL:: line 348: 0.28
-DEAL:: line 349: 0.31
-DEAL:: line 350: -0.061
+DEAL:: line 342: -0.060764
+DEAL:: line 343: -0.066742
+DEAL:: line 344: 0.013091
+DEAL:: line 345: 0.30980
+DEAL:: line 346: 0.34028
+DEAL:: line 347: -0.066742
+DEAL:: line 348: 0.28205
+DEAL:: line 349: 0.30980
+DEAL:: line 350: -0.060764
DEAL::not identity constrained: 1922
-DEAL:: line 342: -0.0095
-DEAL:: line 343: -0.11
-DEAL:: line 344: 0.0071
-DEAL:: line 345: 0.049
-DEAL:: line 346: 0.57
-DEAL:: line 347: -0.036
-DEAL:: line 348: 0.044
-DEAL:: line 349: 0.52
-DEAL:: line 350: -0.033
+DEAL:: line 342: -0.0095346
+DEAL:: line 343: -0.11199
+DEAL:: line 344: 0.0071125
+DEAL:: line 345: 0.048611
+DEAL:: line 346: 0.57098
+DEAL:: line 347: -0.036262
+DEAL:: line 348: 0.044257
+DEAL:: line 349: 0.51984
+DEAL:: line 350: -0.033014
DEAL::not identity constrained: 1923
-DEAL:: line 342: 0.10
-DEAL:: line 343: -0.026
-DEAL:: line 344: 0.0069
-DEAL:: line 345: -0.38
-DEAL:: line 346: 0.097
-DEAL:: line 347: -0.026
-DEAL:: line 348: 1.5
-DEAL:: line 349: -0.38
-DEAL:: line 350: 0.10
+DEAL:: line 342: 0.10240
+DEAL:: line 343: -0.026014
+DEAL:: line 344: 0.0069444
+DEAL:: line 345: -0.38360
+DEAL:: line 346: 0.097446
+DEAL:: line 347: -0.026014
+DEAL:: line 348: 1.5100
+DEAL:: line 349: -0.38360
+DEAL:: line 350: 0.10240
DEAL::not identity constrained: 1924
-DEAL:: line 342: 0.044
-DEAL:: line 343: 0.049
-DEAL:: line 344: -0.0095
-DEAL:: line 345: -0.17
-DEAL:: line 346: -0.18
-DEAL:: line 347: 0.036
-DEAL:: line 348: 0.65
-DEAL:: line 349: 0.72
-DEAL:: line 350: -0.14
+DEAL:: line 342: 0.044257
+DEAL:: line 343: 0.048611
+DEAL:: line 344: -0.0095346
+DEAL:: line 345: -0.16578
+DEAL:: line 346: -0.18210
+DEAL:: line 347: 0.035716
+DEAL:: line 348: 0.65261
+DEAL:: line 349: 0.71682
+DEAL:: line 350: -0.14060
DEAL::not identity constrained: 1925
-DEAL:: line 342: 0.0069
-DEAL:: line 343: 0.082
-DEAL:: line 344: -0.0052
-DEAL:: line 345: -0.026
-DEAL:: line 346: -0.31
-DEAL:: line 347: 0.019
-DEAL:: line 348: 0.10
-DEAL:: line 349: 1.2
-DEAL:: line 350: -0.076
+DEAL:: line 342: 0.0069444
+DEAL:: line 343: 0.081569
+DEAL:: line 344: -0.0051803
+DEAL:: line 345: -0.026014
+DEAL:: line 346: -0.30556
+DEAL:: line 347: 0.019405
+DEAL:: line 348: 0.10240
+DEAL:: line 349: 1.2028
+DEAL:: line 350: -0.076389
DEAL::not identity constrained: 1989
-DEAL:: line 117: 0.0039
-DEAL:: line 118: -0.061
-DEAL:: line 119: -0.0052
-DEAL:: line 120: -0.061
-DEAL:: line 121: 0.96
-DEAL:: line 122: 0.082
-DEAL:: line 123: -0.0052
-DEAL:: line 124: 0.082
-DEAL:: line 125: 0.0069
+DEAL:: line 117: 0.0038643
+DEAL:: line 118: -0.060848
+DEAL:: line 119: -0.0051803
+DEAL:: line 120: -0.060848
+DEAL:: line 121: 0.95811
+DEAL:: line 122: 0.081569
+DEAL:: line 123: -0.0051803
+DEAL:: line 124: 0.081569
+DEAL:: line 125: 0.0069444
DEAL::not identity constrained: 1990
-DEAL:: line 117: 0.0071
-DEAL:: line 118: -0.036
-DEAL:: line 119: -0.033
-DEAL:: line 120: -0.11
-DEAL:: line 121: 0.57
-DEAL:: line 122: 0.52
-DEAL:: line 123: -0.0095
-DEAL:: line 124: 0.049
-DEAL:: line 125: 0.044
+DEAL:: line 117: 0.0071125
+DEAL:: line 118: -0.036262
+DEAL:: line 119: -0.033014
+DEAL:: line 120: -0.11199
+DEAL:: line 121: 0.57098
+DEAL:: line 122: 0.51984
+DEAL:: line 123: -0.0095346
+DEAL:: line 124: 0.048611
+DEAL:: line 125: 0.044257
DEAL::not identity constrained: 1991
-DEAL:: line 117: -0.0052
-DEAL:: line 118: 0.019
-DEAL:: line 119: -0.076
-DEAL:: line 120: 0.082
-DEAL:: line 121: -0.31
-DEAL:: line 122: 1.2
-DEAL:: line 123: 0.0069
-DEAL:: line 124: -0.026
-DEAL:: line 125: 0.10
+DEAL:: line 117: -0.0051803
+DEAL:: line 118: 0.019405
+DEAL:: line 119: -0.076389
+DEAL:: line 120: 0.081569
+DEAL:: line 121: -0.30556
+DEAL:: line 122: 1.2028
+DEAL:: line 123: 0.0069444
+DEAL:: line 124: -0.026014
+DEAL:: line 125: 0.10240
DEAL::not identity constrained: 1992
-DEAL:: line 117: 0.0071
-DEAL:: line 118: -0.11
-DEAL:: line 119: -0.0095
-DEAL:: line 120: -0.036
-DEAL:: line 121: 0.57
-DEAL:: line 122: 0.049
-DEAL:: line 123: -0.033
-DEAL:: line 124: 0.52
-DEAL:: line 125: 0.044
+DEAL:: line 117: 0.0071125
+DEAL:: line 118: -0.11199
+DEAL:: line 119: -0.0095346
+DEAL:: line 120: -0.036262
+DEAL:: line 121: 0.57098
+DEAL:: line 122: 0.048611
+DEAL:: line 123: -0.033014
+DEAL:: line 124: 0.51984
+DEAL:: line 125: 0.044257
DEAL::not identity constrained: 1993
-DEAL:: line 117: 0.013
-DEAL:: line 118: -0.067
-DEAL:: line 119: -0.061
-DEAL:: line 120: -0.067
-DEAL:: line 121: 0.34
-DEAL:: line 122: 0.31
-DEAL:: line 123: -0.061
-DEAL:: line 124: 0.31
-DEAL:: line 125: 0.28
+DEAL:: line 117: 0.013091
+DEAL:: line 118: -0.066742
+DEAL:: line 119: -0.060764
+DEAL:: line 120: -0.066742
+DEAL:: line 121: 0.34028
+DEAL:: line 122: 0.30980
+DEAL:: line 123: -0.060764
+DEAL:: line 124: 0.30980
+DEAL:: line 125: 0.28205
DEAL::not identity constrained: 1994
-DEAL:: line 117: -0.0095
-DEAL:: line 118: 0.036
-DEAL:: line 119: -0.14
-DEAL:: line 120: 0.049
-DEAL:: line 121: -0.18
-DEAL:: line 122: 0.72
-DEAL:: line 123: 0.044
-DEAL:: line 124: -0.17
-DEAL:: line 125: 0.65
+DEAL:: line 117: -0.0095346
+DEAL:: line 118: 0.035716
+DEAL:: line 119: -0.14060
+DEAL:: line 120: 0.048611
+DEAL:: line 121: -0.18210
+DEAL:: line 122: 0.71682
+DEAL:: line 123: 0.044257
+DEAL:: line 124: -0.16578
+DEAL:: line 125: 0.65261
DEAL::not identity constrained: 1995
-DEAL:: line 117: -0.0052
-DEAL:: line 118: 0.082
-DEAL:: line 119: 0.0069
-DEAL:: line 120: 0.019
-DEAL:: line 121: -0.31
-DEAL:: line 122: -0.026
-DEAL:: line 123: -0.076
-DEAL:: line 124: 1.2
-DEAL:: line 125: 0.10
+DEAL:: line 117: -0.0051803
+DEAL:: line 118: 0.081569
+DEAL:: line 119: 0.0069444
+DEAL:: line 120: 0.019405
+DEAL:: line 121: -0.30556
+DEAL:: line 122: -0.026014
+DEAL:: line 123: -0.076389
+DEAL:: line 124: 1.2028
+DEAL:: line 125: 0.10240
DEAL::not identity constrained: 1996
-DEAL:: line 117: -0.0095
-DEAL:: line 118: 0.049
-DEAL:: line 119: 0.044
-DEAL:: line 120: 0.036
-DEAL:: line 121: -0.18
-DEAL:: line 122: -0.17
-DEAL:: line 123: -0.14
-DEAL:: line 124: 0.72
-DEAL:: line 125: 0.65
+DEAL:: line 117: -0.0095346
+DEAL:: line 118: 0.048611
+DEAL:: line 119: 0.044257
+DEAL:: line 120: 0.035716
+DEAL:: line 121: -0.18210
+DEAL:: line 122: -0.16578
+DEAL:: line 123: -0.14060
+DEAL:: line 124: 0.71682
+DEAL:: line 125: 0.65261
DEAL::not identity constrained: 1997
-DEAL:: line 117: 0.0069
-DEAL:: line 118: -0.026
-DEAL:: line 119: 0.10
-DEAL:: line 120: -0.026
-DEAL:: line 121: 0.097
-DEAL:: line 122: -0.38
-DEAL:: line 123: 0.10
-DEAL:: line 124: -0.38
-DEAL:: line 125: 1.5
+DEAL:: line 117: 0.0069444
+DEAL:: line 118: -0.026014
+DEAL:: line 119: 0.10240
+DEAL:: line 120: -0.026014
+DEAL:: line 121: 0.097446
+DEAL:: line 122: -0.38360
+DEAL:: line 123: 0.10240
+DEAL:: line 124: -0.38360
+DEAL:: line 125: 1.5100
DEAL::not identity constrained: 1998
-DEAL:: line 342: 0.0039
-DEAL:: line 343: -0.061
-DEAL:: line 344: -0.0052
-DEAL:: line 345: -0.061
-DEAL:: line 346: 0.96
-DEAL:: line 347: 0.082
-DEAL:: line 348: -0.0052
-DEAL:: line 349: 0.082
-DEAL:: line 350: 0.0069
+DEAL:: line 342: 0.0038643
+DEAL:: line 343: -0.060848
+DEAL:: line 344: -0.0051803
+DEAL:: line 345: -0.060848
+DEAL:: line 346: 0.95811
+DEAL:: line 347: 0.081569
+DEAL:: line 348: -0.0051803
+DEAL:: line 349: 0.081569
+DEAL:: line 350: 0.0069444
DEAL::not identity constrained: 1999
-DEAL:: line 342: 0.0071
-DEAL:: line 343: -0.036
-DEAL:: line 344: -0.033
-DEAL:: line 345: -0.11
-DEAL:: line 346: 0.57
-DEAL:: line 347: 0.52
-DEAL:: line 348: -0.0095
-DEAL:: line 349: 0.049
-DEAL:: line 350: 0.044
+DEAL:: line 342: 0.0071125
+DEAL:: line 343: -0.036262
+DEAL:: line 344: -0.033014
+DEAL:: line 345: -0.11199
+DEAL:: line 346: 0.57098
+DEAL:: line 347: 0.51984
+DEAL:: line 348: -0.0095346
+DEAL:: line 349: 0.048611
+DEAL:: line 350: 0.044257
DEAL::not identity constrained: 2000
-DEAL:: line 342: -0.0052
-DEAL:: line 343: 0.019
-DEAL:: line 344: -0.076
-DEAL:: line 345: 0.082
-DEAL:: line 346: -0.31
-DEAL:: line 347: 1.2
-DEAL:: line 348: 0.0069
-DEAL:: line 349: -0.026
-DEAL:: line 350: 0.10
+DEAL:: line 342: -0.0051803
+DEAL:: line 343: 0.019405
+DEAL:: line 344: -0.076389
+DEAL:: line 345: 0.081569
+DEAL:: line 346: -0.30556
+DEAL:: line 347: 1.2028
+DEAL:: line 348: 0.0069444
+DEAL:: line 349: -0.026014
+DEAL:: line 350: 0.10240
DEAL::not identity constrained: 2001
-DEAL:: line 342: 0.0071
-DEAL:: line 343: -0.11
-DEAL:: line 344: -0.0095
-DEAL:: line 345: -0.036
-DEAL:: line 346: 0.57
-DEAL:: line 347: 0.049
-DEAL:: line 348: -0.033
-DEAL:: line 349: 0.52
-DEAL:: line 350: 0.044
+DEAL:: line 342: 0.0071125
+DEAL:: line 343: -0.11199
+DEAL:: line 344: -0.0095346
+DEAL:: line 345: -0.036262
+DEAL:: line 346: 0.57098
+DEAL:: line 347: 0.048611
+DEAL:: line 348: -0.033014
+DEAL:: line 349: 0.51984
+DEAL:: line 350: 0.044257
DEAL::not identity constrained: 2002
-DEAL:: line 342: 0.013
-DEAL:: line 343: -0.067
-DEAL:: line 344: -0.061
-DEAL:: line 345: -0.067
-DEAL:: line 346: 0.34
-DEAL:: line 347: 0.31
-DEAL:: line 348: -0.061
-DEAL:: line 349: 0.31
-DEAL:: line 350: 0.28
+DEAL:: line 342: 0.013091
+DEAL:: line 343: -0.066742
+DEAL:: line 344: -0.060764
+DEAL:: line 345: -0.066742
+DEAL:: line 346: 0.34028
+DEAL:: line 347: 0.30980
+DEAL:: line 348: -0.060764
+DEAL:: line 349: 0.30980
+DEAL:: line 350: 0.28205
DEAL::not identity constrained: 2003
-DEAL:: line 342: -0.0095
-DEAL:: line 343: 0.036
-DEAL:: line 344: -0.14
-DEAL:: line 345: 0.049
-DEAL:: line 346: -0.18
-DEAL:: line 347: 0.72
-DEAL:: line 348: 0.044
-DEAL:: line 349: -0.17
-DEAL:: line 350: 0.65
+DEAL:: line 342: -0.0095346
+DEAL:: line 343: 0.035716
+DEAL:: line 344: -0.14060
+DEAL:: line 345: 0.048611
+DEAL:: line 346: -0.18210
+DEAL:: line 347: 0.71682
+DEAL:: line 348: 0.044257
+DEAL:: line 349: -0.16578
+DEAL:: line 350: 0.65261
DEAL::not identity constrained: 2004
-DEAL:: line 342: -0.0052
-DEAL:: line 343: 0.082
-DEAL:: line 344: 0.0069
-DEAL:: line 345: 0.019
-DEAL:: line 346: -0.31
-DEAL:: line 347: -0.026
-DEAL:: line 348: -0.076
-DEAL:: line 349: 1.2
-DEAL:: line 350: 0.10
+DEAL:: line 342: -0.0051803
+DEAL:: line 343: 0.081569
+DEAL:: line 344: 0.0069444
+DEAL:: line 345: 0.019405
+DEAL:: line 346: -0.30556
+DEAL:: line 347: -0.026014
+DEAL:: line 348: -0.076389
+DEAL:: line 349: 1.2028
+DEAL:: line 350: 0.10240
DEAL::not identity constrained: 2005
-DEAL:: line 342: -0.0095
-DEAL:: line 343: 0.049
-DEAL:: line 344: 0.044
-DEAL:: line 345: 0.036
-DEAL:: line 346: -0.18
-DEAL:: line 347: -0.17
-DEAL:: line 348: -0.14
-DEAL:: line 349: 0.72
-DEAL:: line 350: 0.65
+DEAL:: line 342: -0.0095346
+DEAL:: line 343: 0.048611
+DEAL:: line 344: 0.044257
+DEAL:: line 345: 0.035716
+DEAL:: line 346: -0.18210
+DEAL:: line 347: -0.16578
+DEAL:: line 348: -0.14060
+DEAL:: line 349: 0.71682
+DEAL:: line 350: 0.65261
DEAL::not identity constrained: 2006
-DEAL:: line 342: 0.0069
-DEAL:: line 343: -0.026
-DEAL:: line 344: 0.10
-DEAL:: line 345: -0.026
-DEAL:: line 346: 0.097
-DEAL:: line 347: -0.38
-DEAL:: line 348: 0.10
-DEAL:: line 349: -0.38
-DEAL:: line 350: 1.5
+DEAL:: line 342: 0.0069444
+DEAL:: line 343: -0.026014
+DEAL:: line 344: 0.10240
+DEAL:: line 345: -0.026014
+DEAL:: line 346: 0.097446
+DEAL:: line 347: -0.38360
+DEAL:: line 348: 0.10240
+DEAL:: line 349: -0.38360
+DEAL:: line 350: 1.5100
DEAL::Checking FE_Q<1>(1)3 in 1d:
DEAL::Checking FE_DGQ<1>(2)2 in 1d:
DEAL::0
DEAL::6
DEAL::111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 36
-DEAL:: line 0: 0.50
-DEAL:: line 3: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 3: 0.50000
DEAL::not identity constrained: 37
-DEAL:: line 1: 0.50
-DEAL:: line 4: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 38
-DEAL:: line 2: 0.50
-DEAL:: line 5: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 51
-DEAL:: line 3: 0.50
-DEAL:: line 12: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 12: 0.50000
DEAL::not identity constrained: 52
-DEAL:: line 4: 0.50
-DEAL:: line 13: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 53
-DEAL:: line 5: 0.50
-DEAL:: line 14: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 14: 0.50000
DEAL::Checking FE_DGQ<2>(2)2 in 2d:
DEAL::0
DEAL::0
DEAL::48
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 108
-DEAL:: line 0: 0.50
-DEAL:: line 3: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 3: 0.50000
DEAL::not identity constrained: 109
-DEAL:: line 1: 0.50
-DEAL:: line 4: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 110
-DEAL:: line 2: 0.50
-DEAL:: line 5: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 111
-DEAL:: line 0: 0.50
-DEAL:: line 12: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 12: 0.50000
DEAL::not identity constrained: 112
-DEAL:: line 1: 0.50
-DEAL:: line 13: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 113
-DEAL:: line 2: 0.50
-DEAL:: line 14: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 14: 0.50000
DEAL::not identity constrained: 114
-DEAL:: line 0: 0.25
-DEAL:: line 3: 0.25
-DEAL:: line 12: 0.25
-DEAL:: line 15: 0.25
+DEAL:: line 0: 0.25000
+DEAL:: line 3: 0.25000
+DEAL:: line 12: 0.25000
+DEAL:: line 15: 0.25000
DEAL::not identity constrained: 115
-DEAL:: line 1: 0.25
-DEAL:: line 4: 0.25
-DEAL:: line 13: 0.25
-DEAL:: line 16: 0.25
+DEAL:: line 1: 0.25000
+DEAL:: line 4: 0.25000
+DEAL:: line 13: 0.25000
+DEAL:: line 16: 0.25000
DEAL::not identity constrained: 116
-DEAL:: line 2: 0.25
-DEAL:: line 5: 0.25
-DEAL:: line 14: 0.25
-DEAL:: line 17: 0.25
+DEAL:: line 2: 0.25000
+DEAL:: line 5: 0.25000
+DEAL:: line 14: 0.25000
+DEAL:: line 17: 0.25000
DEAL::not identity constrained: 117
-DEAL:: line 3: 0.50
-DEAL:: line 15: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 15: 0.50000
DEAL::not identity constrained: 118
-DEAL:: line 4: 0.50
-DEAL:: line 16: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 119
-DEAL:: line 5: 0.50
-DEAL:: line 17: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 17: 0.50000
DEAL::not identity constrained: 120
-DEAL:: line 36: 0.50
-DEAL:: line 39: 0.50
+DEAL:: line 36: 0.50000
+DEAL:: line 39: 0.50000
DEAL::not identity constrained: 121
-DEAL:: line 37: 0.50
-DEAL:: line 40: 0.50
+DEAL:: line 37: 0.50000
+DEAL:: line 40: 0.50000
DEAL::not identity constrained: 122
-DEAL:: line 38: 0.50
-DEAL:: line 41: 0.50
+DEAL:: line 38: 0.50000
+DEAL:: line 41: 0.50000
DEAL::not identity constrained: 123
-DEAL:: line 12: 0.50
-DEAL:: line 36: 0.50
+DEAL:: line 12: 0.50000
+DEAL:: line 36: 0.50000
DEAL::not identity constrained: 124
-DEAL:: line 13: 0.50
-DEAL:: line 37: 0.50
+DEAL:: line 13: 0.50000
+DEAL:: line 37: 0.50000
DEAL::not identity constrained: 125
-DEAL:: line 14: 0.50
-DEAL:: line 38: 0.50
+DEAL:: line 14: 0.50000
+DEAL:: line 38: 0.50000
DEAL::not identity constrained: 126
-DEAL:: line 12: 0.25
-DEAL:: line 15: 0.25
-DEAL:: line 36: 0.25
-DEAL:: line 39: 0.25
+DEAL:: line 12: 0.25000
+DEAL:: line 15: 0.25000
+DEAL:: line 36: 0.25000
+DEAL:: line 39: 0.25000
DEAL::not identity constrained: 127
-DEAL:: line 13: 0.25
-DEAL:: line 16: 0.25
-DEAL:: line 37: 0.25
-DEAL:: line 40: 0.25
+DEAL:: line 13: 0.25000
+DEAL:: line 16: 0.25000
+DEAL:: line 37: 0.25000
+DEAL:: line 40: 0.25000
DEAL::not identity constrained: 128
-DEAL:: line 14: 0.25
-DEAL:: line 17: 0.25
-DEAL:: line 38: 0.25
-DEAL:: line 41: 0.25
+DEAL:: line 14: 0.25000
+DEAL:: line 17: 0.25000
+DEAL:: line 38: 0.25000
+DEAL:: line 41: 0.25000
DEAL::not identity constrained: 129
-DEAL:: line 15: 0.50
-DEAL:: line 39: 0.50
+DEAL:: line 15: 0.50000
+DEAL:: line 39: 0.50000
DEAL::not identity constrained: 130
-DEAL:: line 16: 0.50
-DEAL:: line 40: 0.50
+DEAL:: line 16: 0.50000
+DEAL:: line 40: 0.50000
DEAL::not identity constrained: 131
-DEAL:: line 17: 0.50
-DEAL:: line 41: 0.50
+DEAL:: line 17: 0.50000
+DEAL:: line 41: 0.50000
DEAL::not identity constrained: 132
-DEAL:: line 12: 0.50
-DEAL:: line 15: 0.50
+DEAL:: line 12: 0.50000
+DEAL:: line 15: 0.50000
DEAL::not identity constrained: 133
-DEAL:: line 13: 0.50
-DEAL:: line 16: 0.50
+DEAL:: line 13: 0.50000
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 134
-DEAL:: line 14: 0.50
-DEAL:: line 17: 0.50
+DEAL:: line 14: 0.50000
+DEAL:: line 17: 0.50000
DEAL::not identity constrained: 159
-DEAL:: line 3: 0.50
-DEAL:: line 24: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 24: 0.50000
DEAL::not identity constrained: 160
-DEAL:: line 4: 0.50
-DEAL:: line 25: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 25: 0.50000
DEAL::not identity constrained: 161
-DEAL:: line 5: 0.50
-DEAL:: line 26: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 26: 0.50000
DEAL::not identity constrained: 162
-DEAL:: line 3: 0.25
-DEAL:: line 15: 0.25
-DEAL:: line 24: 0.25
-DEAL:: line 30: 0.25
+DEAL:: line 3: 0.25000
+DEAL:: line 15: 0.25000
+DEAL:: line 24: 0.25000
+DEAL:: line 30: 0.25000
DEAL::not identity constrained: 163
-DEAL:: line 4: 0.25
-DEAL:: line 16: 0.25
-DEAL:: line 25: 0.25
-DEAL:: line 31: 0.25
+DEAL:: line 4: 0.25000
+DEAL:: line 16: 0.25000
+DEAL:: line 25: 0.25000
+DEAL:: line 31: 0.25000
DEAL::not identity constrained: 164
-DEAL:: line 5: 0.25
-DEAL:: line 17: 0.25
-DEAL:: line 26: 0.25
-DEAL:: line 32: 0.25
+DEAL:: line 5: 0.25000
+DEAL:: line 17: 0.25000
+DEAL:: line 26: 0.25000
+DEAL:: line 32: 0.25000
DEAL::not identity constrained: 165
-DEAL:: line 24: 0.50
-DEAL:: line 30: 0.50
+DEAL:: line 24: 0.50000
+DEAL:: line 30: 0.50000
DEAL::not identity constrained: 166
-DEAL:: line 25: 0.50
-DEAL:: line 31: 0.50
+DEAL:: line 25: 0.50000
+DEAL:: line 31: 0.50000
DEAL::not identity constrained: 167
-DEAL:: line 26: 0.50
-DEAL:: line 32: 0.50
+DEAL:: line 26: 0.50000
+DEAL:: line 32: 0.50000
DEAL::not identity constrained: 168
-DEAL:: line 39: 0.50
-DEAL:: line 54: 0.50
+DEAL:: line 39: 0.50000
+DEAL:: line 54: 0.50000
DEAL::not identity constrained: 169
-DEAL:: line 40: 0.50
-DEAL:: line 55: 0.50
+DEAL:: line 40: 0.50000
+DEAL:: line 55: 0.50000
DEAL::not identity constrained: 170
-DEAL:: line 41: 0.50
-DEAL:: line 56: 0.50
+DEAL:: line 41: 0.50000
+DEAL:: line 56: 0.50000
DEAL::not identity constrained: 171
-DEAL:: line 15: 0.25
-DEAL:: line 30: 0.25
-DEAL:: line 39: 0.25
-DEAL:: line 54: 0.25
+DEAL:: line 15: 0.25000
+DEAL:: line 30: 0.25000
+DEAL:: line 39: 0.25000
+DEAL:: line 54: 0.25000
DEAL::not identity constrained: 172
-DEAL:: line 16: 0.25
-DEAL:: line 31: 0.25
-DEAL:: line 40: 0.25
-DEAL:: line 55: 0.25
+DEAL:: line 16: 0.25000
+DEAL:: line 31: 0.25000
+DEAL:: line 40: 0.25000
+DEAL:: line 55: 0.25000
DEAL::not identity constrained: 173
-DEAL:: line 17: 0.25
-DEAL:: line 32: 0.25
-DEAL:: line 41: 0.25
-DEAL:: line 56: 0.25
+DEAL:: line 17: 0.25000
+DEAL:: line 32: 0.25000
+DEAL:: line 41: 0.25000
+DEAL:: line 56: 0.25000
DEAL::not identity constrained: 174
-DEAL:: line 30: 0.50
-DEAL:: line 54: 0.50
+DEAL:: line 30: 0.50000
+DEAL:: line 54: 0.50000
DEAL::not identity constrained: 175
-DEAL:: line 31: 0.50
-DEAL:: line 55: 0.50
+DEAL:: line 31: 0.50000
+DEAL:: line 55: 0.50000
DEAL::not identity constrained: 176
-DEAL:: line 32: 0.50
-DEAL:: line 56: 0.50
+DEAL:: line 32: 0.50000
+DEAL:: line 56: 0.50000
DEAL::not identity constrained: 177
-DEAL:: line 15: 0.50
-DEAL:: line 30: 0.50
+DEAL:: line 15: 0.50000
+DEAL:: line 30: 0.50000
DEAL::not identity constrained: 178
-DEAL:: line 16: 0.50
-DEAL:: line 31: 0.50
+DEAL:: line 16: 0.50000
+DEAL:: line 31: 0.50000
DEAL::not identity constrained: 179
-DEAL:: line 17: 0.50
-DEAL:: line 32: 0.50
+DEAL:: line 17: 0.50000
+DEAL:: line 32: 0.50000
DEAL::Checking FE_DGQ<3>(2)2 in 3d:
DEAL::0
DEAL::0
DEAL::6
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 108
-DEAL:: line 0: 0.50
-DEAL:: line 3: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 3: 0.50000
DEAL::not identity constrained: 109
-DEAL:: line 1: 0.50
-DEAL:: line 4: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 110
-DEAL:: line 2: 0.50
-DEAL:: line 5: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 195
-DEAL:: line 3: 0.50
-DEAL:: line 30: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 30: 0.50000
DEAL::not identity constrained: 196
-DEAL:: line 4: 0.50
-DEAL:: line 31: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 31: 0.50000
DEAL::not identity constrained: 197
-DEAL:: line 5: 0.50
-DEAL:: line 32: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 32: 0.50000
DEAL::Checking FE_DGQ<2>(2)2FE_DGP<2>(3)1 in 2d:
DEAL::0
DEAL::0
DEAL::12
DEAL::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 112
-DEAL:: line 0: 0.50
-DEAL:: line 6: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 6: 0.50000
DEAL::not identity constrained: 113
-DEAL:: line 1: 0.50
-DEAL:: line 7: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 7: 0.50000
DEAL::not identity constrained: 114
-DEAL:: line 2: 0.50
-DEAL:: line 8: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 8: 0.50000
DEAL::not identity constrained: 115
-DEAL:: line 3: 0.50
-DEAL:: line 9: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 9: 0.50000
DEAL::not identity constrained: 116
-DEAL:: line 4: 0.50
-DEAL:: line 10: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 10: 0.50000
DEAL::not identity constrained: 117
-DEAL:: line 5: 0.50
-DEAL:: line 11: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 11: 0.50000
DEAL::not identity constrained: 182
-DEAL:: line 6: 0.50
-DEAL:: line 34: 0.50
+DEAL:: line 6: 0.50000
+DEAL:: line 34: 0.50000
DEAL::not identity constrained: 183
-DEAL:: line 7: 0.50
-DEAL:: line 35: 0.50
+DEAL:: line 7: 0.50000
+DEAL:: line 35: 0.50000
DEAL::not identity constrained: 184
-DEAL:: line 8: 0.50
-DEAL:: line 36: 0.50
+DEAL:: line 8: 0.50000
+DEAL:: line 36: 0.50000
DEAL::not identity constrained: 185
-DEAL:: line 9: 0.50
-DEAL:: line 37: 0.50
+DEAL:: line 9: 0.50000
+DEAL:: line 37: 0.50000
DEAL::not identity constrained: 186
-DEAL:: line 10: 0.50
-DEAL:: line 38: 0.50
+DEAL:: line 10: 0.50000
+DEAL:: line 38: 0.50000
DEAL::not identity constrained: 187
-DEAL:: line 11: 0.50
-DEAL:: line 39: 0.50
+DEAL:: line 11: 0.50000
+DEAL:: line 39: 0.50000
DEAL::Checking FE_DGQ<2>(2)2FE_DGQ<2>(2)2FE_Q<2>(3)3 in 2d:
DEAL::30
DEAL::4
DEAL::30
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101010111111111111111111111111111111111111111111111111111111010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101010111111111111111111111111111111111111111111111111111111010101111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 312
-DEAL:: line 0: -0.062
-DEAL:: line 3: -0.062
-DEAL:: line 24: 0.56
-DEAL:: line 25: 0.56
+DEAL:: line 0: -0.062500
+DEAL:: line 3: -0.062500
+DEAL:: line 24: 0.56250
+DEAL:: line 25: 0.56250
DEAL::not identity constrained: 313
-DEAL:: line 1: -0.062
-DEAL:: line 4: -0.062
-DEAL:: line 26: 0.56
-DEAL:: line 27: 0.56
+DEAL:: line 1: -0.062500
+DEAL:: line 4: -0.062500
+DEAL:: line 26: 0.56250
+DEAL:: line 27: 0.56250
DEAL::not identity constrained: 314
-DEAL:: line 2: -0.062
-DEAL:: line 5: -0.062
-DEAL:: line 28: 0.56
-DEAL:: line 29: 0.56
+DEAL:: line 2: -0.062500
+DEAL:: line 5: -0.062500
+DEAL:: line 28: 0.56250
+DEAL:: line 29: 0.56250
DEAL::not identity constrained: 327
-DEAL:: line 0: 0.31
-DEAL:: line 3: 0.062
-DEAL:: line 24: 0.94
-DEAL:: line 25: -0.31
+DEAL:: line 0: 0.31250
+DEAL:: line 3: 0.062500
+DEAL:: line 24: 0.93750
+DEAL:: line 25: -0.31250
DEAL::not identity constrained: 328
-DEAL:: line 24: 1.0
+DEAL:: line 24: 1.0000
DEAL::not identity constrained: 329
-DEAL:: line 1: 0.31
-DEAL:: line 4: 0.062
-DEAL:: line 26: 0.94
-DEAL:: line 27: -0.31
+DEAL:: line 1: 0.31250
+DEAL:: line 4: 0.062500
+DEAL:: line 26: 0.93750
+DEAL:: line 27: -0.31250
DEAL::not identity constrained: 330
-DEAL:: line 26: 1.0
+DEAL:: line 26: 1.0000
DEAL::not identity constrained: 331
-DEAL:: line 2: 0.31
-DEAL:: line 5: 0.062
-DEAL:: line 28: 0.94
-DEAL:: line 29: -0.31
+DEAL:: line 2: 0.31250
+DEAL:: line 5: 0.062500
+DEAL:: line 28: 0.93750
+DEAL:: line 29: -0.31250
DEAL::not identity constrained: 332
-DEAL:: line 28: 1.0
+DEAL:: line 28: 1.0000
DEAL::not identity constrained: 387
-DEAL:: line 25: 1.0
+DEAL:: line 25: 1.0000
DEAL::not identity constrained: 388
-DEAL:: line 0: 0.063
-DEAL:: line 3: 0.31
-DEAL:: line 24: -0.31
-DEAL:: line 25: 0.94
+DEAL:: line 0: 0.062500
+DEAL:: line 3: 0.31250
+DEAL:: line 24: -0.31250
+DEAL:: line 25: 0.93750
DEAL::not identity constrained: 389
-DEAL:: line 27: 1.0
+DEAL:: line 27: 1.0000
DEAL::not identity constrained: 390
-DEAL:: line 1: 0.063
-DEAL:: line 4: 0.31
-DEAL:: line 26: -0.31
-DEAL:: line 27: 0.94
+DEAL:: line 1: 0.062500
+DEAL:: line 4: 0.31250
+DEAL:: line 26: -0.31250
+DEAL:: line 27: 0.93750
DEAL::not identity constrained: 391
-DEAL:: line 29: 1.0
+DEAL:: line 29: 1.0000
DEAL::not identity constrained: 392
-DEAL:: line 2: 0.063
-DEAL:: line 5: 0.31
-DEAL:: line 28: -0.31
-DEAL:: line 29: 0.94
+DEAL:: line 2: 0.062500
+DEAL:: line 5: 0.31250
+DEAL:: line 28: -0.31250
+DEAL:: line 29: 0.93750
DEAL::not identity constrained: 585
-DEAL:: line 3: -0.062
-DEAL:: line 84: -0.062
-DEAL:: line 96: 0.56
-DEAL:: line 97: 0.56
+DEAL:: line 3: -0.062500
+DEAL:: line 84: -0.062500
+DEAL:: line 96: 0.56250
+DEAL:: line 97: 0.56250
DEAL::not identity constrained: 586
-DEAL:: line 4: -0.062
-DEAL:: line 85: -0.062
-DEAL:: line 98: 0.56
-DEAL:: line 99: 0.56
+DEAL:: line 4: -0.062500
+DEAL:: line 85: -0.062500
+DEAL:: line 98: 0.56250
+DEAL:: line 99: 0.56250
DEAL::not identity constrained: 587
-DEAL:: line 5: -0.062
-DEAL:: line 86: -0.062
-DEAL:: line 100: 0.56
-DEAL:: line 101: 0.56
+DEAL:: line 5: -0.062500
+DEAL:: line 86: -0.062500
+DEAL:: line 100: 0.56250
+DEAL:: line 101: 0.56250
DEAL::not identity constrained: 594
-DEAL:: line 3: 0.31
-DEAL:: line 84: 0.062
-DEAL:: line 96: 0.94
-DEAL:: line 97: -0.31
+DEAL:: line 3: 0.31250
+DEAL:: line 84: 0.062500
+DEAL:: line 96: 0.93750
+DEAL:: line 97: -0.31250
DEAL::not identity constrained: 595
-DEAL:: line 96: 1.0
+DEAL:: line 96: 1.0000
DEAL::not identity constrained: 596
-DEAL:: line 4: 0.31
-DEAL:: line 85: 0.062
-DEAL:: line 98: 0.94
-DEAL:: line 99: -0.31
+DEAL:: line 4: 0.31250
+DEAL:: line 85: 0.062500
+DEAL:: line 98: 0.93750
+DEAL:: line 99: -0.31250
DEAL::not identity constrained: 597
-DEAL:: line 98: 1.0
+DEAL:: line 98: 1.0000
DEAL::not identity constrained: 598
-DEAL:: line 5: 0.31
-DEAL:: line 86: 0.062
-DEAL:: line 100: 0.94
-DEAL:: line 101: -0.31
+DEAL:: line 5: 0.31250
+DEAL:: line 86: 0.062500
+DEAL:: line 100: 0.93750
+DEAL:: line 101: -0.31250
DEAL::not identity constrained: 599
-DEAL:: line 100: 1.0
+DEAL:: line 100: 1.0000
DEAL::not identity constrained: 654
-DEAL:: line 97: 1.0
+DEAL:: line 97: 1.0000
DEAL::not identity constrained: 655
-DEAL:: line 3: 0.063
-DEAL:: line 84: 0.31
-DEAL:: line 96: -0.31
-DEAL:: line 97: 0.94
+DEAL:: line 3: 0.062500
+DEAL:: line 84: 0.31250
+DEAL:: line 96: -0.31250
+DEAL:: line 97: 0.93750
DEAL::not identity constrained: 656
-DEAL:: line 99: 1.0
+DEAL:: line 99: 1.0000
DEAL::not identity constrained: 657
-DEAL:: line 4: 0.063
-DEAL:: line 85: 0.31
-DEAL:: line 98: -0.31
-DEAL:: line 99: 0.94
+DEAL:: line 4: 0.062500
+DEAL:: line 85: 0.31250
+DEAL:: line 98: -0.31250
+DEAL:: line 99: 0.93750
DEAL::not identity constrained: 658
-DEAL:: line 101: 1.0
+DEAL:: line 101: 1.0000
DEAL::not identity constrained: 659
-DEAL:: line 5: 0.063
-DEAL:: line 86: 0.31
-DEAL:: line 100: -0.31
-DEAL:: line 101: 0.94
+DEAL:: line 5: 0.062500
+DEAL:: line 86: 0.31250
+DEAL:: line 100: -0.31250
+DEAL:: line 101: 0.93750
DEAL::Checking FE_DGP<2>(3)1FE_DGP<2>(3)1FE_Q<2>(2)3 in 2d:
DEAL::18
DEAL::3
DEAL::18
DEAL::11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110001111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 170
-DEAL:: line 18: 1.0
+DEAL:: line 18: 1.0000
DEAL::not identity constrained: 171
-DEAL:: line 19: 1.0
+DEAL:: line 19: 1.0000
DEAL::not identity constrained: 172
-DEAL:: line 20: 1.0
+DEAL:: line 20: 1.0000
DEAL::not identity constrained: 179
-DEAL:: line 0: 0.38
-DEAL:: line 3: -0.12
-DEAL:: line 18: 0.75
+DEAL:: line 0: 0.37500
+DEAL:: line 3: -0.12500
+DEAL:: line 18: 0.75000
DEAL::not identity constrained: 180
-DEAL:: line 1: 0.38
-DEAL:: line 4: -0.12
-DEAL:: line 19: 0.75
+DEAL:: line 1: 0.37500
+DEAL:: line 4: -0.12500
+DEAL:: line 19: 0.75000
DEAL::not identity constrained: 181
-DEAL:: line 2: 0.38
-DEAL:: line 5: -0.12
-DEAL:: line 20: 0.75
+DEAL:: line 2: 0.37500
+DEAL:: line 5: -0.12500
+DEAL:: line 20: 0.75000
DEAL::not identity constrained: 208
-DEAL:: line 0: -0.12
-DEAL:: line 3: 0.38
-DEAL:: line 18: 0.75
+DEAL:: line 0: -0.12500
+DEAL:: line 3: 0.37500
+DEAL:: line 18: 0.75000
DEAL::not identity constrained: 209
-DEAL:: line 1: -0.12
-DEAL:: line 4: 0.38
-DEAL:: line 19: 0.75
+DEAL:: line 1: -0.12500
+DEAL:: line 4: 0.37500
+DEAL:: line 19: 0.75000
DEAL::not identity constrained: 210
-DEAL:: line 2: -0.12
-DEAL:: line 5: 0.38
-DEAL:: line 20: 0.75
+DEAL:: line 2: -0.12500
+DEAL:: line 5: 0.37500
+DEAL:: line 20: 0.75000
DEAL::not identity constrained: 310
-DEAL:: line 56: 1.0
+DEAL:: line 56: 1.0000
DEAL::not identity constrained: 311
-DEAL:: line 57: 1.0
+DEAL:: line 57: 1.0000
DEAL::not identity constrained: 312
-DEAL:: line 58: 1.0
+DEAL:: line 58: 1.0000
DEAL::not identity constrained: 316
-DEAL:: line 3: 0.38
-DEAL:: line 47: -0.12
-DEAL:: line 56: 0.75
+DEAL:: line 3: 0.37500
+DEAL:: line 47: -0.12500
+DEAL:: line 56: 0.75000
DEAL::not identity constrained: 317
-DEAL:: line 4: 0.38
-DEAL:: line 48: -0.12
-DEAL:: line 57: 0.75
+DEAL:: line 4: 0.37500
+DEAL:: line 48: -0.12500
+DEAL:: line 57: 0.75000
DEAL::not identity constrained: 318
-DEAL:: line 5: 0.38
-DEAL:: line 49: -0.12
-DEAL:: line 58: 0.75
+DEAL:: line 5: 0.37500
+DEAL:: line 49: -0.12500
+DEAL:: line 58: 0.75000
DEAL::not identity constrained: 345
-DEAL:: line 3: -0.12
-DEAL:: line 47: 0.38
-DEAL:: line 56: 0.75
+DEAL:: line 3: -0.12500
+DEAL:: line 47: 0.37500
+DEAL:: line 56: 0.75000
DEAL::not identity constrained: 346
-DEAL:: line 4: -0.12
-DEAL:: line 48: 0.38
-DEAL:: line 57: 0.75
+DEAL:: line 4: -0.12500
+DEAL:: line 48: 0.37500
+DEAL:: line 57: 0.75000
DEAL::not identity constrained: 347
-DEAL:: line 5: -0.12
-DEAL:: line 49: 0.38
-DEAL:: line 58: 0.75
+DEAL:: line 5: -0.12500
+DEAL:: line 49: 0.37500
+DEAL:: line 58: 0.75000
DEAL::Checking FE_DGQ<3>(1)3FE_DGP<3>(3)1FE_Q<3>(1)3 in 3d:
DEAL::48
DEAL::4
DEAL::48
DEAL::11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 460
-DEAL:: line 0: 0.50
-DEAL:: line 3: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 3: 0.50000
DEAL::not identity constrained: 461
-DEAL:: line 1: 0.50
-DEAL:: line 4: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 462
-DEAL:: line 2: 0.50
-DEAL:: line 5: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 463
-DEAL:: line 0: 0.50
-DEAL:: line 12: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 12: 0.50000
DEAL::not identity constrained: 464
-DEAL:: line 1: 0.50
-DEAL:: line 13: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 465
-DEAL:: line 2: 0.50
-DEAL:: line 14: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 14: 0.50000
DEAL::not identity constrained: 466
-DEAL:: line 0: 0.25
-DEAL:: line 3: 0.25
-DEAL:: line 12: 0.25
-DEAL:: line 15: 0.25
+DEAL:: line 0: 0.25000
+DEAL:: line 3: 0.25000
+DEAL:: line 12: 0.25000
+DEAL:: line 15: 0.25000
DEAL::not identity constrained: 467
-DEAL:: line 1: 0.25
-DEAL:: line 4: 0.25
-DEAL:: line 13: 0.25
-DEAL:: line 16: 0.25
+DEAL:: line 1: 0.25000
+DEAL:: line 4: 0.25000
+DEAL:: line 13: 0.25000
+DEAL:: line 16: 0.25000
DEAL::not identity constrained: 468
-DEAL:: line 2: 0.25
-DEAL:: line 5: 0.25
-DEAL:: line 14: 0.25
-DEAL:: line 17: 0.25
+DEAL:: line 2: 0.25000
+DEAL:: line 5: 0.25000
+DEAL:: line 14: 0.25000
+DEAL:: line 17: 0.25000
DEAL::not identity constrained: 513
-DEAL:: line 3: 0.50
-DEAL:: line 15: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 15: 0.50000
DEAL::not identity constrained: 514
-DEAL:: line 4: 0.50
-DEAL:: line 16: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 515
-DEAL:: line 5: 0.50
-DEAL:: line 17: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 17: 0.50000
DEAL::not identity constrained: 560
-DEAL:: line 124: 0.50
-DEAL:: line 127: 0.50
+DEAL:: line 124: 0.50000
+DEAL:: line 127: 0.50000
DEAL::not identity constrained: 561
-DEAL:: line 125: 0.50
-DEAL:: line 128: 0.50
+DEAL:: line 125: 0.50000
+DEAL:: line 128: 0.50000
DEAL::not identity constrained: 562
-DEAL:: line 126: 0.50
-DEAL:: line 129: 0.50
+DEAL:: line 126: 0.50000
+DEAL:: line 129: 0.50000
DEAL::not identity constrained: 563
-DEAL:: line 12: 0.50
-DEAL:: line 124: 0.50
+DEAL:: line 12: 0.50000
+DEAL:: line 124: 0.50000
DEAL::not identity constrained: 564
-DEAL:: line 13: 0.50
-DEAL:: line 125: 0.50
+DEAL:: line 13: 0.50000
+DEAL:: line 125: 0.50000
DEAL::not identity constrained: 565
-DEAL:: line 14: 0.50
-DEAL:: line 126: 0.50
+DEAL:: line 14: 0.50000
+DEAL:: line 126: 0.50000
DEAL::not identity constrained: 566
-DEAL:: line 12: 0.25
-DEAL:: line 15: 0.25
-DEAL:: line 124: 0.25
-DEAL:: line 127: 0.25
+DEAL:: line 12: 0.25000
+DEAL:: line 15: 0.25000
+DEAL:: line 124: 0.25000
+DEAL:: line 127: 0.25000
DEAL::not identity constrained: 567
-DEAL:: line 13: 0.25
-DEAL:: line 16: 0.25
-DEAL:: line 125: 0.25
-DEAL:: line 128: 0.25
+DEAL:: line 13: 0.25000
+DEAL:: line 16: 0.25000
+DEAL:: line 125: 0.25000
+DEAL:: line 128: 0.25000
DEAL::not identity constrained: 568
-DEAL:: line 14: 0.25
-DEAL:: line 17: 0.25
-DEAL:: line 126: 0.25
-DEAL:: line 129: 0.25
+DEAL:: line 14: 0.25000
+DEAL:: line 17: 0.25000
+DEAL:: line 126: 0.25000
+DEAL:: line 129: 0.25000
DEAL::not identity constrained: 613
-DEAL:: line 15: 0.50
-DEAL:: line 127: 0.50
+DEAL:: line 15: 0.50000
+DEAL:: line 127: 0.50000
DEAL::not identity constrained: 614
-DEAL:: line 16: 0.50
-DEAL:: line 128: 0.50
+DEAL:: line 16: 0.50000
+DEAL:: line 128: 0.50000
DEAL::not identity constrained: 615
-DEAL:: line 17: 0.50
-DEAL:: line 129: 0.50
+DEAL:: line 17: 0.50000
+DEAL:: line 129: 0.50000
DEAL::not identity constrained: 660
-DEAL:: line 12: 0.50
-DEAL:: line 15: 0.50
+DEAL:: line 12: 0.50000
+DEAL:: line 15: 0.50000
DEAL::not identity constrained: 661
-DEAL:: line 13: 0.50
-DEAL:: line 16: 0.50
+DEAL:: line 13: 0.50000
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 662
-DEAL:: line 14: 0.50
-DEAL:: line 17: 0.50
+DEAL:: line 14: 0.50000
+DEAL:: line 17: 0.50000
DEAL::not identity constrained: 863
-DEAL:: line 3: 0.50
-DEAL:: line 68: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 68: 0.50000
DEAL::not identity constrained: 864
-DEAL:: line 4: 0.50
-DEAL:: line 69: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 69: 0.50000
DEAL::not identity constrained: 865
-DEAL:: line 5: 0.50
-DEAL:: line 70: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 70: 0.50000
DEAL::not identity constrained: 866
-DEAL:: line 3: 0.25
-DEAL:: line 15: 0.25
-DEAL:: line 68: 0.25
-DEAL:: line 74: 0.25
+DEAL:: line 3: 0.25000
+DEAL:: line 15: 0.25000
+DEAL:: line 68: 0.25000
+DEAL:: line 74: 0.25000
DEAL::not identity constrained: 867
-DEAL:: line 4: 0.25
-DEAL:: line 16: 0.25
-DEAL:: line 69: 0.25
-DEAL:: line 75: 0.25
+DEAL:: line 4: 0.25000
+DEAL:: line 16: 0.25000
+DEAL:: line 69: 0.25000
+DEAL:: line 75: 0.25000
DEAL::not identity constrained: 868
-DEAL:: line 5: 0.25
-DEAL:: line 17: 0.25
-DEAL:: line 70: 0.25
-DEAL:: line 76: 0.25
+DEAL:: line 5: 0.25000
+DEAL:: line 17: 0.25000
+DEAL:: line 70: 0.25000
+DEAL:: line 76: 0.25000
DEAL::not identity constrained: 913
-DEAL:: line 68: 0.50
-DEAL:: line 74: 0.50
+DEAL:: line 68: 0.50000
+DEAL:: line 74: 0.50000
DEAL::not identity constrained: 914
-DEAL:: line 69: 0.50
-DEAL:: line 75: 0.50
+DEAL:: line 69: 0.50000
+DEAL:: line 75: 0.50000
DEAL::not identity constrained: 915
-DEAL:: line 70: 0.50
-DEAL:: line 76: 0.50
+DEAL:: line 70: 0.50000
+DEAL:: line 76: 0.50000
DEAL::not identity constrained: 960
-DEAL:: line 127: 0.50
-DEAL:: line 186: 0.50
+DEAL:: line 127: 0.50000
+DEAL:: line 186: 0.50000
DEAL::not identity constrained: 961
-DEAL:: line 128: 0.50
-DEAL:: line 187: 0.50
+DEAL:: line 128: 0.50000
+DEAL:: line 187: 0.50000
DEAL::not identity constrained: 962
-DEAL:: line 129: 0.50
-DEAL:: line 188: 0.50
+DEAL:: line 129: 0.50000
+DEAL:: line 188: 0.50000
DEAL::not identity constrained: 963
-DEAL:: line 15: 0.25
-DEAL:: line 74: 0.25
-DEAL:: line 127: 0.25
-DEAL:: line 186: 0.25
+DEAL:: line 15: 0.25000
+DEAL:: line 74: 0.25000
+DEAL:: line 127: 0.25000
+DEAL:: line 186: 0.25000
DEAL::not identity constrained: 964
-DEAL:: line 16: 0.25
-DEAL:: line 75: 0.25
-DEAL:: line 128: 0.25
-DEAL:: line 187: 0.25
+DEAL:: line 16: 0.25000
+DEAL:: line 75: 0.25000
+DEAL:: line 128: 0.25000
+DEAL:: line 187: 0.25000
DEAL::not identity constrained: 965
-DEAL:: line 17: 0.25
-DEAL:: line 76: 0.25
-DEAL:: line 129: 0.25
-DEAL:: line 188: 0.25
+DEAL:: line 17: 0.25000
+DEAL:: line 76: 0.25000
+DEAL:: line 129: 0.25000
+DEAL:: line 188: 0.25000
DEAL::not identity constrained: 1010
-DEAL:: line 74: 0.50
-DEAL:: line 186: 0.50
+DEAL:: line 74: 0.50000
+DEAL:: line 186: 0.50000
DEAL::not identity constrained: 1011
-DEAL:: line 75: 0.50
-DEAL:: line 187: 0.50
+DEAL:: line 75: 0.50000
+DEAL:: line 187: 0.50000
DEAL::not identity constrained: 1012
-DEAL:: line 76: 0.50
-DEAL:: line 188: 0.50
+DEAL:: line 76: 0.50000
+DEAL:: line 188: 0.50000
DEAL::not identity constrained: 1057
-DEAL:: line 15: 0.50
-DEAL:: line 74: 0.50
+DEAL:: line 15: 0.50000
+DEAL:: line 74: 0.50000
DEAL::not identity constrained: 1058
-DEAL:: line 16: 0.50
-DEAL:: line 75: 0.50
+DEAL:: line 16: 0.50000
+DEAL:: line 75: 0.50000
DEAL::not identity constrained: 1059
-DEAL:: line 17: 0.50
-DEAL:: line 76: 0.50
+DEAL:: line 17: 0.50000
+DEAL:: line 76: 0.50000
DEAL::Checking (FESystem<2>(FE_Q<2>(1),3))3FE_DGQ<2>(0)1FE_Q<2>(1)3 in 2d:
DEAL::24
DEAL::2
DEAL::24
DEAL::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 148
-DEAL:: line 0: 0.50
-DEAL:: line 12: 0.50
+DEAL:: line 0: 0.50000
+DEAL:: line 12: 0.50000
DEAL::not identity constrained: 149
-DEAL:: line 1: 0.50
-DEAL:: line 13: 0.50
+DEAL:: line 1: 0.50000
+DEAL:: line 13: 0.50000
DEAL::not identity constrained: 150
-DEAL:: line 2: 0.50
-DEAL:: line 14: 0.50
+DEAL:: line 2: 0.50000
+DEAL:: line 14: 0.50000
DEAL::not identity constrained: 151
-DEAL:: line 3: 0.50
-DEAL:: line 15: 0.50
+DEAL:: line 3: 0.50000
+DEAL:: line 15: 0.50000
DEAL::not identity constrained: 152
-DEAL:: line 4: 0.50
-DEAL:: line 16: 0.50
+DEAL:: line 4: 0.50000
+DEAL:: line 16: 0.50000
DEAL::not identity constrained: 153
-DEAL:: line 5: 0.50
-DEAL:: line 17: 0.50
+DEAL:: line 5: 0.50000
+DEAL:: line 17: 0.50000
DEAL::not identity constrained: 154
-DEAL:: line 6: 0.50
-DEAL:: line 18: 0.50
+DEAL:: line 6: 0.50000
+DEAL:: line 18: 0.50000
DEAL::not identity constrained: 155
-DEAL:: line 7: 0.50
-DEAL:: line 19: 0.50
+DEAL:: line 7: 0.50000
+DEAL:: line 19: 0.50000
DEAL::not identity constrained: 156
-DEAL:: line 8: 0.50
-DEAL:: line 20: 0.50
+DEAL:: line 8: 0.50000
+DEAL:: line 20: 0.50000
DEAL::not identity constrained: 157
-DEAL:: line 9: 0.50
-DEAL:: line 21: 0.50
+DEAL:: line 9: 0.50000
+DEAL:: line 21: 0.50000
DEAL::not identity constrained: 158
-DEAL:: line 10: 0.50
-DEAL:: line 22: 0.50
+DEAL:: line 10: 0.50000
+DEAL:: line 22: 0.50000
DEAL::not identity constrained: 159
-DEAL:: line 11: 0.50
-DEAL:: line 23: 0.50
+DEAL:: line 11: 0.50000
+DEAL:: line 23: 0.50000
DEAL::not identity constrained: 212
-DEAL:: line 12: 0.50
-DEAL:: line 49: 0.50
+DEAL:: line 12: 0.50000
+DEAL:: line 49: 0.50000
DEAL::not identity constrained: 213
-DEAL:: line 13: 0.50
-DEAL:: line 50: 0.50
+DEAL:: line 13: 0.50000
+DEAL:: line 50: 0.50000
DEAL::not identity constrained: 214
-DEAL:: line 14: 0.50
-DEAL:: line 51: 0.50
+DEAL:: line 14: 0.50000
+DEAL:: line 51: 0.50000
DEAL::not identity constrained: 215
-DEAL:: line 15: 0.50
-DEAL:: line 52: 0.50
+DEAL:: line 15: 0.50000
+DEAL:: line 52: 0.50000
DEAL::not identity constrained: 216
-DEAL:: line 16: 0.50
-DEAL:: line 53: 0.50
+DEAL:: line 16: 0.50000
+DEAL:: line 53: 0.50000
DEAL::not identity constrained: 217
-DEAL:: line 17: 0.50
-DEAL:: line 54: 0.50
+DEAL:: line 17: 0.50000
+DEAL:: line 54: 0.50000
DEAL::not identity constrained: 218
-DEAL:: line 18: 0.50
-DEAL:: line 55: 0.50
+DEAL:: line 18: 0.50000
+DEAL:: line 55: 0.50000
DEAL::not identity constrained: 219
-DEAL:: line 19: 0.50
-DEAL:: line 56: 0.50
+DEAL:: line 19: 0.50000
+DEAL:: line 56: 0.50000
DEAL::not identity constrained: 220
-DEAL:: line 20: 0.50
-DEAL:: line 57: 0.50
+DEAL:: line 20: 0.50000
+DEAL:: line 57: 0.50000
DEAL::not identity constrained: 221
-DEAL:: line 21: 0.50
-DEAL:: line 58: 0.50
+DEAL:: line 21: 0.50000
+DEAL:: line 58: 0.50000
DEAL::not identity constrained: 222
-DEAL:: line 22: 0.50
-DEAL:: line 59: 0.50
+DEAL:: line 22: 0.50000
+DEAL:: line 59: 0.50000
DEAL::not identity constrained: 223
-DEAL:: line 23: 0.50
-DEAL:: line 60: 0.50
+DEAL:: line 23: 0.50000
+DEAL:: line 60: 0.50000
DEAL::Checking FE_DGQ<2>(3)1FESystem<2>(FE_DGQ<2>(0),3)1FESystem<2>(FE_Q<2>(2),1, FE_DGQ<2>(0),1)2 in 2d:
DEAL::12
DEAL::3
DEAL::12
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 144
-DEAL:: line 12: 1.0
+DEAL:: line 12: 1.0000
DEAL::not identity constrained: 145
-DEAL:: line 13: 1.0
+DEAL:: line 13: 1.0000
DEAL::not identity constrained: 150
-DEAL:: line 0: 0.38
-DEAL:: line 2: -0.12
-DEAL:: line 12: 0.75
+DEAL:: line 0: 0.37500
+DEAL:: line 2: -0.12500
+DEAL:: line 12: 0.75000
DEAL::not identity constrained: 151
-DEAL:: line 1: 0.38
-DEAL:: line 3: -0.12
-DEAL:: line 13: 0.75
+DEAL:: line 1: 0.37500
+DEAL:: line 3: -0.12500
+DEAL:: line 13: 0.75000
DEAL::not identity constrained: 177
-DEAL:: line 0: -0.12
-DEAL:: line 2: 0.38
-DEAL:: line 12: 0.75
+DEAL:: line 0: -0.12500
+DEAL:: line 2: 0.37500
+DEAL:: line 12: 0.75000
DEAL::not identity constrained: 178
-DEAL:: line 1: -0.12
-DEAL:: line 3: 0.38
-DEAL:: line 13: 0.75
+DEAL:: line 1: -0.12500
+DEAL:: line 3: 0.37500
+DEAL:: line 13: 0.75000
DEAL::not identity constrained: 268
-DEAL:: line 45: 1.0
+DEAL:: line 45: 1.0000
DEAL::not identity constrained: 269
-DEAL:: line 46: 1.0
+DEAL:: line 46: 1.0000
DEAL::not identity constrained: 272
-DEAL:: line 2: 0.38
-DEAL:: line 39: -0.12
-DEAL:: line 45: 0.75
+DEAL:: line 2: 0.37500
+DEAL:: line 39: -0.12500
+DEAL:: line 45: 0.75000
DEAL::not identity constrained: 273
-DEAL:: line 3: 0.38
-DEAL:: line 40: -0.12
-DEAL:: line 46: 0.75
+DEAL:: line 3: 0.37500
+DEAL:: line 40: -0.12500
+DEAL:: line 46: 0.75000
DEAL::not identity constrained: 299
-DEAL:: line 2: -0.12
-DEAL:: line 39: 0.38
-DEAL:: line 45: 0.75
+DEAL:: line 2: -0.12500
+DEAL:: line 39: 0.37500
+DEAL:: line 45: 0.75000
DEAL::not identity constrained: 300
-DEAL:: line 3: -0.12
-DEAL:: line 40: 0.38
-DEAL:: line 46: 0.75
+DEAL:: line 3: -0.12500
+DEAL:: line 40: 0.37500
+DEAL:: line 46: 0.75000
DEAL::Checking FE_DGQ<2>(3)1FE_Nedelec<2>(0)2 in 2d:
DEAL::8
DEAL::1
DEAL::8
DEAL::11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 96
-DEAL:: line 4: 0.50
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 97
-DEAL:: line 5: 0.50
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 116
-DEAL:: line 4: 0.50
+DEAL:: line 4: 0.50000
DEAL::not identity constrained: 117
-DEAL:: line 5: 0.50
+DEAL:: line 5: 0.50000
DEAL::not identity constrained: 180
-DEAL:: line 26: 0.50
+DEAL:: line 26: 0.50000
DEAL::not identity constrained: 181
-DEAL:: line 27: 0.50
+DEAL:: line 27: 0.50000
DEAL::not identity constrained: 200
-DEAL:: line 26: 0.50
+DEAL:: line 26: 0.50000
DEAL::not identity constrained: 201
-DEAL:: line 27: 0.50
+DEAL:: line 27: 0.50000
DEAL::Checking FE_Nedelec<2>(0)1FESystem<2>(FE_DGQ<2>(1),2)1FESystem<2>(FE_Q<2>(2),1, FE_Nedelec<2>(0),2)2 in 2d:
DEAL::32
DEAL::3
DEAL::32
DEAL::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111
DEAL::not identity constrained: 162
-DEAL:: line 23: 1.0
+DEAL:: line 23: 1.0000
DEAL::not identity constrained: 163
-DEAL:: line 26: 1.0
+DEAL:: line 26: 1.0000
DEAL::not identity constrained: 178
-DEAL:: line 22: 0.50
+DEAL:: line 22: 0.50000
DEAL::not identity constrained: 179
-DEAL:: line 0: 0.38
-DEAL:: line 2: -0.12
-DEAL:: line 23: 0.75
+DEAL:: line 0: 0.37500
+DEAL:: line 2: -0.12500
+DEAL:: line 23: 0.75000
DEAL::not identity constrained: 180
-DEAL:: line 24: 0.50
+DEAL:: line 24: 0.50000
DEAL::not identity constrained: 181
-DEAL:: line 25: 0.50
+DEAL:: line 25: 0.50000
DEAL::not identity constrained: 182
-DEAL:: line 1: 0.38
-DEAL:: line 3: -0.12
-DEAL:: line 26: 0.75
+DEAL:: line 1: 0.37500
+DEAL:: line 3: -0.12500
+DEAL:: line 26: 0.75000
DEAL::not identity constrained: 183
-DEAL:: line 27: 0.50
+DEAL:: line 27: 0.50000
DEAL::not identity constrained: 184
-DEAL:: line 28: 0.50
+DEAL:: line 28: 0.50000
DEAL::not identity constrained: 202
-DEAL:: line 22: 0.50
+DEAL:: line 22: 0.50000
DEAL::not identity constrained: 203
-DEAL:: line 0: -0.12
-DEAL:: line 2: 0.38
-DEAL:: line 23: 0.75
+DEAL:: line 0: -0.12500
+DEAL:: line 2: 0.37500
+DEAL:: line 23: 0.75000
DEAL::not identity constrained: 204
-DEAL:: line 24: 0.50
+DEAL:: line 24: 0.50000
DEAL::not identity constrained: 205
-DEAL:: line 25: 0.50
+DEAL:: line 25: 0.50000
DEAL::not identity constrained: 206
-DEAL:: line 1: -0.12
-DEAL:: line 3: 0.38
-DEAL:: line 26: 0.75
+DEAL:: line 1: -0.12500
+DEAL:: line 3: 0.37500
+DEAL:: line 26: 0.75000
DEAL::not identity constrained: 207
-DEAL:: line 27: 0.50
+DEAL:: line 27: 0.50000
DEAL::not identity constrained: 208
-DEAL:: line 28: 0.50
+DEAL:: line 28: 0.50000
DEAL::not identity constrained: 289
-DEAL:: line 58: 1.0
+DEAL:: line 58: 1.0000
DEAL::not identity constrained: 290
-DEAL:: line 61: 1.0
+DEAL:: line 61: 1.0000
DEAL::not identity constrained: 298
-DEAL:: line 57: 0.50
+DEAL:: line 57: 0.50000
DEAL::not identity constrained: 299
-DEAL:: line 2: 0.38
-DEAL:: line 46: -0.12
-DEAL:: line 58: 0.75
+DEAL:: line 2: 0.37500
+DEAL:: line 46: -0.12500
+DEAL:: line 58: 0.75000
DEAL::not identity constrained: 300
-DEAL:: line 59: 0.50
+DEAL:: line 59: 0.50000
DEAL::not identity constrained: 301
-DEAL:: line 60: 0.50
+DEAL:: line 60: 0.50000
DEAL::not identity constrained: 302
-DEAL:: line 3: 0.38
-DEAL:: line 47: -0.12
-DEAL:: line 61: 0.75
+DEAL:: line 3: 0.37500
+DEAL:: line 47: -0.12500
+DEAL:: line 61: 0.75000
DEAL::not identity constrained: 303
-DEAL:: line 62: 0.50
+DEAL:: line 62: 0.50000
DEAL::not identity constrained: 304
-DEAL:: line 63: 0.50
+DEAL:: line 63: 0.50000
DEAL::not identity constrained: 322
-DEAL:: line 57: 0.50
+DEAL:: line 57: 0.50000
DEAL::not identity constrained: 323
-DEAL:: line 2: -0.12
-DEAL:: line 46: 0.38
-DEAL:: line 58: 0.75
+DEAL:: line 2: -0.12500
+DEAL:: line 46: 0.37500
+DEAL:: line 58: 0.75000
DEAL::not identity constrained: 324
-DEAL:: line 59: 0.50
+DEAL:: line 59: 0.50000
DEAL::not identity constrained: 325
-DEAL:: line 60: 0.50
+DEAL:: line 60: 0.50000
DEAL::not identity constrained: 326
-DEAL:: line 3: -0.12
-DEAL:: line 47: 0.38
-DEAL:: line 61: 0.75
+DEAL:: line 3: -0.12500
+DEAL:: line 47: 0.37500
+DEAL:: line 61: 0.75000
DEAL::not identity constrained: 327
-DEAL:: line 62: 0.50
+DEAL:: line 62: 0.50000
DEAL::not identity constrained: 328
-DEAL:: line 63: 0.50
+DEAL:: line 63: 0.50000
// third further restrict to
// boundary indicator 0
{
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
DoFTools::extract_boundary_dofs (dof_handler,
component_select,
// check
// DoFTools::map_dof_to_boundary_indices(const DoFHandler<int> &,
-// const std::set<types::boundary_id_t> &,
+// const std::set<types::boundary_id> &,
// std::vector<unsigned int> &)
check_this (const DoFHandler<dim> &dof_handler)
{
std::vector<unsigned int> map(dof_handler.n_dofs());
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
// check for boundary id 0 alone
boundary_ids.insert (0);
deallog << dof_handler.n_boundary_dofs(fm) << std::endl;
// with std::set
- std::set<types::boundary_id_t> s;
+ std::set<types::boundary_id> s;
s.insert (0);
deallog << dof_handler.n_boundary_dofs(s) << std::endl;
return;
std::vector<unsigned int> map (dof_handler.n_dofs());
- std::set<types::boundary_id_t> set;
+ std::set<types::boundary_id> set;
set.insert (0);
DoFTools::map_dof_to_boundary_indices (dof_handler, set, map);
return;
std::vector<unsigned int> map (dof_handler.n_dofs());
- std::set<types::boundary_id_t> set;
+ std::set<types::boundary_id> set;
set.insert (0);
DoFTools::map_dof_to_boundary_indices (dof_handler, set, map);
return;
std::vector<unsigned int> map (dof_handler.n_dofs());
- std::set<types::boundary_id_t> set;
+ std::set<types::boundary_id> set;
set.insert (0);
DoFTools::map_dof_to_boundary_indices (dof_handler, set, map);
return;
std::vector<unsigned int> map (dof_handler.n_dofs());
- std::set<types::boundary_id_t> set;
+ std::set<types::boundary_id> set;
set.insert (0);
DoFTools::map_dof_to_boundary_indices (dof_handler, set, map);
return;
std::vector<unsigned int> map (dof_handler.n_dofs());
- std::set<types::boundary_id_t> set;
+ std::set<types::boundary_id> set;
set.insert (0);
DoFTools::map_dof_to_boundary_indices (dof_handler, set, map);
return;
std::vector<unsigned int> map (dof_handler.n_dofs());
- std::set<types::boundary_id_t> set;
+ std::set<types::boundary_id> set;
set.insert (0);
DoFTools::map_dof_to_boundary_indices (dof_handler, set, map);
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/base/function.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/dofs/dof_tools.h>
// third further restrict to
// boundary indicator 0
{
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
DoFTools::extract_dofs_with_support_on_boundary (dof_handler,
component_select,
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <fstream>
MappingQ<dim> mapping(3);
Quadrature<dim-1> &q_face = get_q_face(function);
- std::map<types::boundary_id_t,const Function<dim>*> neumann_bc;
+ std::map<types::boundary_id,const Function<dim>*> neumann_bc;
neumann_bc[0] = &function;
Vector<double> v (dof.n_dofs());
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <fstream>
MappingQ<dim> mapping(3);
Quadrature<dim-1> &q_face = get_q_face(function);
- std::map<types::boundary_id_t,const Function<dim>*> neumann_bc;
+ std::map<types::boundary_id,const Function<dim>*> neumann_bc;
neumann_bc[0] = &function;
Vector<double> v (dof.n_dofs());
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_abf.h>
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_dgp_monomial.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_abf.h>
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_dgp_monomial.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
double abs_zero(double a)
{
#include <deal.II/fe/fe_system.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
#include <deal.II/fe/fe_q.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
double abs_zero(double a)
{
#include <deal.II/fe/fe_q.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
void test() {
#include <deal.II/fe/fe_q.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
void test() {
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/fe_field_function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/polynomial.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/dofs/dof_handler.h>
// $Id$
// Version: $Name$
//
-// Copyright (C) 2005 by the deal.II authors
+// Copyright (C) 2005, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
check_this (const FiniteElement<dim> &fe1,
const FiniteElement<dim> &fe2)
{
+ // use a higher output accuracy for this
+ // test. the reason is that many of the
+ // constraints are negative powers of 2,
+ // which have exact representations with 3
+ // or 4 digits of accuracy, but not with
+ // the usual 2 digits (for example, 0.375,
+ // which sometimes rounds to 0.38 and
+ // sometimes to 0.37, depending on how
+ // intermediate errors have accumulated)
+ deallog << std::setprecision (3);
+
if (fe1.n_components() != 1)
return;
if (fe1.n_components() != fe2.n_components())
DEAL::Checking Q1 against Q1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.4
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.41
+DEAL::1.00 0 1.00 0
DEAL::Checking Q1 against Q1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.4
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.41
+DEAL::1.00 0 1.00 0
DEAL::Checking Q1 against Q1 in 2d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q1 against Q1 in 2d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q1 against Q1 in 3d:
-DEAL::1.0 1.0
-DEAL::2.8
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.83
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q1 against Q1 in 3d:
-DEAL::1.0 1.0
-DEAL::2.8
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.83
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q1 against Q2 in 1d:
-DEAL::1.5 1.0
-DEAL::1.0 0 1.0 0
+DEAL::1.50 1.00
+DEAL::1.00 0 1.00 0
DEAL::Checking Q2 against Q1 in 1d:
-DEAL::1.3 1.7
-DEAL::0.67 -0.33 0.67 -0.33
+DEAL::1.33 1.67
+DEAL::0.667 -0.333 0.667 -0.333
DEAL::Checking Q1 against Q2 in 2d:
-DEAL::2.3 1.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::2.25 1.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q2 against Q1 in 2d:
-DEAL::1.8 2.8
-DEAL::0.44 0.11 0.44 0.11 0.44 0.11 0.44 0.11
+DEAL::1.78 2.78
+DEAL::0.444 0.111 0.444 0.111 0.444 0.111 0.444 0.111
DEAL::Checking Q1 against Q2 in 3d:
-DEAL::3.4 1.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::3.38 1.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q2 against Q1 in 3d:
-DEAL::2.4 4.6
-DEAL::0.30 -0.037 0.30 -0.037 0.30 -0.037 0.30 -0.037 0.30 -0.037 0.30 -0.037 0.30 -0.037 0.30 -0.037
+DEAL::2.37 4.63
+DEAL::0.296 -0.0370 0.296 -0.0370 0.296 -0.0370 0.296 -0.0370 0.296 -0.0370 0.296 -0.0370 0.296 -0.0370 0.296 -0.0370
DEAL::Checking Q1 against Q3 in 1d:
-DEAL::2.0 1.0
-DEAL::1.0 0 1.0 0
+DEAL::2.00 1.00
+DEAL::1.00 0 1.00 0
DEAL::Checking Q3 against Q1 in 1d:
-DEAL::1.4 1.9
-DEAL::0.40 -0.15 0.40 -0.15
+DEAL::1.35 1.90
+DEAL::0.400 -0.150 0.400 -0.150
DEAL::Checking Q1 against Q3 in 2d:
-DEAL::4.0 1.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::4.00 1.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q1 in 2d:
-DEAL::1.8 3.6
-DEAL::0.16 0.022 0.16 0.022 0.16 0.022 0.16 0.022
+DEAL::1.82 3.61
+DEAL::0.160 0.0225 0.160 0.0225 0.160 0.0225 0.160 0.0225
DEAL::Checking Q1 against Q3 in 3d:
-DEAL::8.0 1.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::8.00 1.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q1 in 3d:
-DEAL::2.5 6.9
-DEAL::0.064 -0.0034 0.064 -0.0034 0.064 -0.0034 0.064 -0.0034 0.064 -0.0034 0.064 -0.0034 0.064 -0.0034 0.064 -0.0034
+DEAL::2.46 6.86
+DEAL::0.0640 -0.00338 0.0640 -0.00338 0.0640 -0.00338 0.0640 -0.00338 0.0640 -0.00338 0.0640 -0.00338 0.0640 -0.00338 0.0640 -0.00338
DEAL::Checking Q2 against Q2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking Q2 against Q2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking Q2 against Q2 in 2d:
-DEAL::1.0 1.0
-DEAL::3.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q2 against Q2 in 2d:
-DEAL::1.0 1.0
-DEAL::3.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q2 against Q2 in 3d:
-DEAL::1.0 1.0
-DEAL::5.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::5.20
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q2 against Q2 in 3d:
-DEAL::1.0 1.0
-DEAL::5.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::5.20
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q2 against Q3 in 1d:
-DEAL::1.8 1.2
-DEAL::1.0 0 1.0 1.0 0.89 0.22
+DEAL::1.78 1.22
+DEAL::1.00 0 1.00 1.00 0.889 0.222
DEAL::Checking Q3 against Q2 in 1d:
-DEAL::1.9 2.4
-DEAL::0.78 0.68 0.77 0.77 0.56 -0.063
+DEAL::1.91 2.35
+DEAL::0.775 0.675 0.775 0.775 0.562 -0.0625
DEAL::Checking Q2 against Q3 in 2d:
-DEAL::3.2 1.5
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 0.89 0.89 0 0 0 0 0 -0.11 0 0.22
+DEAL::3.16 1.49
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 0.889 0.889 0 0 0 0 0 -0.111 0 0.222
DEAL::Checking Q3 against Q2 in 2d:
-DEAL::3.7 5.5
-DEAL::0.60 0.52 0.60 -0.52 0.60 -0.15 0.60 0.15 0.44 0.44 0.13 -0.048 -0.042 -0.014 -0.042 -0.014 -0.035 0.0039
+DEAL::3.66 5.52
+DEAL::0.601 0.523 0.601 -0.523 0.601 -0.152 0.601 0.152 0.436 0.436 0.127 -0.0484 -0.0422 -0.0141 -0.0422 -0.0141 -0.0352 0.00391
DEAL::Checking Q2 against Q3 in 3d:
-DEAL::5.6 1.8
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 0.89 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.89 0 0 0 0 0 0 0 0.22 0 0 0 0.22 0 0 0 0 0 0 0 0 0 0
+DEAL::5.62 1.83
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 0.889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.889 0 0 0 0 0 0 0 0.222 0 0 0 0.222 0 0 0 0 0 0 0 0 0 0
DEAL::Checking Q3 against Q2 in 3d:
-DEAL::7.0 13.
-DEAL::0.47 0.12 0.47 -0.12 0.47 0.12 0.47 0.12 0.47 0.12 0.47 0.41 0.47 0.12 0.47 0.41 0.34 0.028 0.098 0.028 -0.033 -0.0095 -0.033 0.34 -0.0095 -0.0095 -0.0095 -0.0095 0.028 0.098 0.098 -0.0095 -0.033 -0.0095 0.0095 0.0095 0.0095 0.033 -0.033 -0.038 0.0026 0.0030 0.0026 0.0030 -0.0079 0.0030 -0.027 0.0030 0.0026 0.0030 0.0026 0.00088 0.0022 -0.00024
+DEAL::7.00 13.0
+DEAL::0.465 0.118 0.465 -0.118 0.465 0.118 0.465 0.118 0.465 0.118 0.465 0.405 0.465 0.118 0.465 0.405 0.338 0.0285 0.0981 0.0285 -0.0327 -0.00949 -0.0327 0.338 -0.00949 -0.00949 -0.00949 -0.00949 0.0285 0.0981 0.0981 -0.00949 -0.0327 -0.00949 0.00949 0.00949 0.00949 0.0327 -0.0327 -0.0375 0.00264 0.00303 0.00264 0.00303 -0.00791 0.00303 -0.0272 0.00303 0.00264 0.00303 0.00264 0.000879 0.00220 -0.000244
DEAL::Checking Q3 against Q3 in 1d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q3 in 1d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q3 in 2d:
-DEAL::1.0 1.0
-DEAL::4.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::4.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q3 in 2d:
-DEAL::1.0 1.0
-DEAL::4.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::4.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q3 in 3d:
-DEAL::1.0 1.0
-DEAL::8.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::8.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Q3 against Q3 in 3d:
-DEAL::1.0 1.0
-DEAL::8.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::8.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ0 against DGQ0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ0 against DGQ0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ0 against DGQ0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ0 against DGQ0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ0 against DGQ0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ0 against DGQ0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ0 against DGQ1 in 1d:
-DEAL::2.0 1.0
-DEAL::1.0 1.0
+DEAL::2.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ1 against DGQ0 in 1d:
-DEAL::0.50 1.0
-DEAL::0.50 0.50
+DEAL::0.500 1.00
+DEAL::0.500 0.500
DEAL::Checking DGQ0 against DGQ1 in 2d:
-DEAL::4.0 1.0
-DEAL::1.0 1.0
+DEAL::4.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ1 against DGQ0 in 2d:
-DEAL::0.25 1.0
-DEAL::0.25 0.25
+DEAL::0.250 1.00
+DEAL::0.250 0.250
DEAL::Checking DGQ0 against DGQ1 in 3d:
-DEAL::8.0 1.0
-DEAL::1.0 1.0
+DEAL::8.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ1 against DGQ0 in 3d:
-DEAL::0.13 1.0
-DEAL::0.12 0.12
+DEAL::0.125 1.00
+DEAL::0.125 0.125
DEAL::Checking DGQ0 against DGQ2 in 1d:
-DEAL::3.0 1.0
-DEAL::1.0 1.0
+DEAL::3.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ2 against DGQ0 in 1d:
-DEAL::0.67 1.0
-DEAL::0.17 0.17
+DEAL::0.667 1.00
+DEAL::0.167 0.167
DEAL::Checking DGQ0 against DGQ2 in 2d:
-DEAL::9.0 1.0
-DEAL::1.0 1.0
+DEAL::9.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ2 against DGQ0 in 2d:
-DEAL::0.44 1.0
-DEAL::0.028 0.028
+DEAL::0.444 1.00
+DEAL::0.0278 0.0278
DEAL::Checking DGQ0 against DGQ2 in 3d:
-DEAL::27. 1.0
-DEAL::1.0 1.0
+DEAL::27.0 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ2 against DGQ0 in 3d:
-DEAL::0.30 1.0
-DEAL::0.0046 0.0046
+DEAL::0.296 1.00
+DEAL::0.00463 0.00463
DEAL::Checking DGQ0 against DGQ4 in 1d:
-DEAL::5.0 1.0
-DEAL::1.0 1.0
+DEAL::5.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ4 against DGQ0 in 1d:
-DEAL::0.36 1.0
-DEAL::0.078 0.078
+DEAL::0.356 1.00
+DEAL::0.0778 0.0778
DEAL::Checking DGQ0 against DGQ4 in 2d:
-DEAL::25. 1.0
-DEAL::1.0 1.0
+DEAL::25.0 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ4 against DGQ0 in 2d:
-DEAL::0.13 1.0
-DEAL::0.0060 0.0060
+DEAL::0.126 1.00
+DEAL::0.00605 0.00605
DEAL::Checking DGQ0 against DGQ4 in 3d:
-DEAL::1.2e+02 1.0
-DEAL::1.0 1.0
+DEAL::125. 1.00
+DEAL::1.00 1.00
DEAL::Checking DGQ4 against DGQ0 in 3d:
-DEAL::0.045 1.0
-DEAL::0.00047 0.00047
+DEAL::0.0449 1.00
+DEAL::0.000471 0.000471
DEAL::Checking DGQ1 against DGQ1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.4
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.41
+DEAL::1.00 0 1.00 0
DEAL::Checking DGQ1 against DGQ1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.4
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.41
+DEAL::1.00 0 1.00 0
DEAL::Checking DGQ1 against DGQ1 in 2d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ1 against DGQ1 in 2d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ1 against DGQ1 in 3d:
-DEAL::1.0 1.0
-DEAL::2.8
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.83
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ1 against DGQ1 in 3d:
-DEAL::1.0 1.0
-DEAL::2.8
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.83
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ1 against DGQ3 in 1d:
-DEAL::2.0 1.0
-DEAL::1.0 0 0.33 0.67
+DEAL::2.00 1.00
+DEAL::1.00 0 0.333 0.667
DEAL::Checking DGQ3 against DGQ1 in 1d:
-DEAL::1.4 1.9
-DEAL::0.40 1.0 -0.30 -0.15
+DEAL::1.35 1.90
+DEAL::0.400 1.05 -0.300 -0.150
DEAL::Checking DGQ1 against DGQ3 in 2d:
-DEAL::4.0 1.0
-DEAL::1.0 0 0.33 0 0 0.67 0 0
+DEAL::4.00 1.00
+DEAL::1.00 0 0.333 0 0 0.667 0 0
DEAL::Checking DGQ3 against DGQ1 in 2d:
-DEAL::1.8 3.6
-DEAL::0.16 -0.060 -0.12 0.42 0.045 -0.16 -0.060 0.022
+DEAL::1.82 3.61
+DEAL::0.160 -0.0600 -0.120 0.420 0.0450 -0.157 -0.0600 0.0225
DEAL::Checking DGQ1 against DGQ3 in 3d:
-DEAL::8.0 1.0
-DEAL::1.0 0 0.33 0 0 0 0 0 0 0 0 0.22 0 0.44 0 0
+DEAL::8.00 1.00
+DEAL::1.00 0 0.333 0 0 0 0 0 0 0 0 0.222 0 0.444 0 0
DEAL::Checking DGQ3 against DGQ1 in 3d:
-DEAL::2.5 6.9
-DEAL::0.064 -0.063 -0.048 0.44 0.018 -0.13 -0.024 0.018 -0.063 0.0090 0.047 -0.063 -0.014 0.024 0.018 -0.0034
+DEAL::2.46 6.86
+DEAL::0.0640 -0.0630 -0.0480 0.441 0.0180 -0.126 -0.0240 0.0180 -0.0630 0.00900 0.0473 -0.0630 -0.0135 0.0236 0.0180 -0.00338
DEAL::Checking DGQ2 against DGQ2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 2d:
-DEAL::1.0 1.0
-DEAL::3.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 2d:
-DEAL::1.0 1.0
-DEAL::3.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 3d:
-DEAL::1.0 1.0
-DEAL::5.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::5.20
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 3d:
-DEAL::1.0 1.0
-DEAL::5.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::5.20
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 2d:
-DEAL::1.0 1.0
-DEAL::3.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 2d:
-DEAL::1.0 1.0
-DEAL::3.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 3d:
-DEAL::1.0 1.0
-DEAL::5.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::5.20
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ2 in 3d:
-DEAL::1.0 1.0
-DEAL::5.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 1.0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::5.20
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 1.00 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ2 against DGQ4 in 1d:
-DEAL::2.5 1.2
-DEAL::1.0 0 0.75 0.75 0 0
+DEAL::2.50 1.25
+DEAL::1.00 0 0.750 0.750 0 0
DEAL::Checking DGQ4 against DGQ2 in 1d:
-DEAL::2.5 2.8
-DEAL::0.58 -0.91 0.23 0.23 -0.91 0.11
+DEAL::2.49 2.83
+DEAL::0.581 -0.914 0.229 0.229 -0.914 0.114
DEAL::Checking DGQ2 against DGQ4 in 2d:
-DEAL::6.3 1.6
-DEAL::1.0 0 0.75 0 0 0 0 0 0 0 0 0.75 -0.047 -0.047 -0.13 0.38 -0.047 -0.047
+DEAL::6.25 1.56
+DEAL::1.00 0 0.750 0 0 0 0 0 0 0 0 0.750 -0.0469 -0.0469 -0.125 0.375 -0.0469 -0.0469
DEAL::Checking DGQ4 against DGQ2 in 2d:
-DEAL::6.2 8.0
-DEAL::0.34 0.087 0.13 0.75 -0.53 0.087 -0.0044 0.13 0.0033 0.0033 0.026 -0.065 0.087 -0.10 0.050 0.026 0.087 0.013
+DEAL::6.18 8.00
+DEAL::0.338 0.0871 0.133 0.751 -0.531 0.0871 -0.00435 0.133 0.00327 0.00327 0.0261 -0.0653 0.0871 -0.104 0.0501 0.0261 0.0871 0.0131
DEAL::Checking DGQ2 against DGQ4 in 3d:
-DEAL::16. 2.0
-DEAL::1.0 0 0.75 0 0 0 0 0 0 0 0 0 -0.047 0 -0.13 0 -0.047 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 1.0 0 0 0 0 0 0 0 0 0 0 0 0.14
+DEAL::15.6 1.95
+DEAL::1.00 0 0.750 0 0 0 0 0 0 0 0 0 -0.0469 0 -0.125 0 -0.0469 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 1.00 0 0 0 0 0 0 0 0 0 0 0 0.141
DEAL::Checking DGQ4 against DGQ2 in 3d:
-DEAL::15. 23.
-DEAL::0.20 0.76 0.077 -0.038 -0.31 0.039 -0.0025 -0.0025 0.0019 -0.022 0.015 -0.0025 0.051 0.20 0.029 -0.038 0.051 0.76 -0.0075 0.0040 -0.0030 -0.0010 0.0040 -0.00050 0.034 -0.0043 -0.0086 -0.0086 -0.022 0.034 -0.038 0.060 -0.015 -0.0030 0.060 -0.0025 0.00066 0.010 -0.00050 0.086 0.0015 0.010 -0.0075 0.015 -0.0043 0.00037 -0.0075 -0.0075 0.0076 -0.012 -0.00050 0.0030 0.00066 0.0015
+DEAL::15.4 22.6
+DEAL::0.196 0.759 0.0771 -0.0379 -0.309 0.0386 -0.00253 -0.00253 0.00190 -0.0218 0.0152 -0.00253 0.0506 0.196 0.0291 -0.0379 0.0506 0.759 -0.00746 0.00398 -0.00299 -0.000995 0.00398 -0.000498 0.0343 -0.00429 -0.00858 -0.00858 -0.0218 0.0343 -0.0379 0.0597 -0.0149 -0.00299 0.0597 -0.00253 0.000663 0.00995 -0.000498 0.0858 0.00149 0.00995 -0.00746 0.0152 -0.00429 0.000373 -0.00746 -0.00746 0.00759 -0.0119 -0.000498 0.00299 0.000663 0.00149
DEAL::Checking DGQ3 against DGQ3 in 1d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ3 against DGQ3 in 1d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ3 against DGQ3 in 2d:
-DEAL::1.0 1.0
-DEAL::4.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::4.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ3 against DGQ3 in 2d:
-DEAL::1.0 1.0
-DEAL::4.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::4.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ3 against DGQ3 in 3d:
-DEAL::1.0 1.0
-DEAL::8.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::8.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGQ3 against DGQ3 in 3d:
-DEAL::1.0 1.0
-DEAL::8.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::8.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP0 against DGP0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP1 against DGP0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP1 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP1 against DGP0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP1 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP1 against DGP0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP2 against DGP0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP2 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP2 against DGP0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP2 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP2 against DGP0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP4 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP4 against DGP0 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP4 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP4 against DGP0 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP0 against DGP4 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP4 against DGP0 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 1.0
+DEAL::1.00 1.00
+DEAL::1.00 1.00
DEAL::Checking DGP1 against DGP1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.4
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.41
+DEAL::1.00 0 1.00 0
DEAL::Checking DGP1 against DGP1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.4
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.41
+DEAL::1.00 0 1.00 0
DEAL::Checking DGP1 against DGP1 in 2d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP1 against DGP1 in 2d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP1 against DGP1 in 3d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP1 against DGP1 in 3d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP1 against DGP3 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0
DEAL::Checking DGP3 against DGP1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0
DEAL::Checking DGP1 against DGP3 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 1.0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 1.00 0 0
DEAL::Checking DGP3 against DGP1 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 1.0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 1.00 0 0
DEAL::Checking DGP1 against DGP3 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 0 0 0 0
DEAL::Checking DGP3 against DGP1 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 0 0 0 0
DEAL::Checking DGP2 against DGP2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP2 against DGP2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP2 against DGP2 in 2d:
-DEAL::1.0 1.0
-DEAL::2.4
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.45
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 2d:
-DEAL::1.0 1.0
-DEAL::2.4
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.45
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 3d:
-DEAL::1.0 1.0
-DEAL::3.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.16
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 3d:
-DEAL::1.0 1.0
-DEAL::3.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.16
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP2 against DGP2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.7
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.73
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP2 against DGP2 in 2d:
-DEAL::1.0 1.0
-DEAL::2.4
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.45
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 2d:
-DEAL::1.0 1.0
-DEAL::2.4
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.45
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 3d:
-DEAL::1.0 1.0
-DEAL::3.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.16
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP2 in 3d:
-DEAL::1.0 1.0
-DEAL::3.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.16
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP2 against DGP4 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP4 against DGP2 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 1.0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 1.00 1.00 0
DEAL::Checking DGP2 against DGP4 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 1.0 0 0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 1.00 0 0 0 0 0 0 0
DEAL::Checking DGP4 against DGP2 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 1.0 0 0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 1.00 0 0 0 0 0 0 0
DEAL::Checking DGP2 against DGP4 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 1.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 1.00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DEAL::Checking DGP4 against DGP2 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 1.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 1.00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DEAL::Checking DGP3 against DGP3 in 1d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP3 against DGP3 in 1d:
-DEAL::1.0 1.0
-DEAL::2.0
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::2.00
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP3 against DGP3 in 2d:
-DEAL::1.0 1.0
-DEAL::3.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.16
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP3 against DGP3 in 2d:
-DEAL::1.0 1.0
-DEAL::3.2
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::3.16
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP3 against DGP3 in 3d:
-DEAL::1.0 1.0
-DEAL::4.5
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::4.47
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking DGP3 against DGP3 in 3d:
-DEAL::1.0 1.0
-DEAL::4.5
-DEAL::1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::4.47
+DEAL::1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0 1.00 0
DEAL::Checking Nedelec0 against Nedelec0 in 2d:
DEAL::Checking Nedelec0 against Nedelec0 in 2d:
DEAL::Checking Nedelec0 against Nedelec0 in 3d:
DEAL::Checking FE_DGQ<1>(2)2 against FE_DGQ<1>(3)2 in 1d:
DEAL::Checking FE_DGQ<1>(3)2 against FE_DGQ<1>(2)2 in 1d:
DEAL::Checking FE_DGP<1>(3)1 against FE_DGP<1>(1)1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0
DEAL::Checking FE_DGP<1>(1)1 against FE_DGP<1>(3)1 in 1d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0
DEAL::Checking FE_Q<2>(1)3 against FE_Q<2>(2)3 in 2d:
DEAL::Checking FE_Q<2>(2)3 against FE_Q<2>(1)3 in 2d:
DEAL::Checking FE_DGQ<2>(2)2 against FE_DGQ<2>(3)2 in 2d:
DEAL::Checking FE_DGQ<2>(3)2 against FE_DGQ<2>(2)2 in 2d:
DEAL::Checking FE_DGP<2>(3)1 against FE_DGP<2>(1)1 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 1.0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 1.00 0 0
DEAL::Checking FE_DGP<2>(1)1 against FE_DGP<2>(3)1 in 2d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 1.0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 1.00 0 0
DEAL::Checking FE_Q<3>(1)3 against FE_Q<3>(2)3 in 3d:
DEAL::Checking FE_Q<3>(2)3 against FE_Q<3>(1)3 in 3d:
DEAL::Checking FE_DGQ<3>(2)2 against FE_DGQ<3>(3)2 in 3d:
DEAL::Checking FE_DGQ<3>(3)2 against FE_DGQ<3>(2)2 in 3d:
DEAL::Checking FE_DGP<3>(3)1 against FE_DGP<3>(1)1 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 0 0 0 0
DEAL::Checking FE_DGP<3>(1)1 against FE_DGP<3>(3)1 in 3d:
-DEAL::1.0 1.0
-DEAL::1.0 0 1.0 0 0 0 0 0
+DEAL::1.00 1.00
+DEAL::1.00 0 1.00 0 0 0 0 0
#include <deal.II/fe/fe_values.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
Triangulation<1> triangulation;
GridGenerator::hyper_cube (triangulation, -1, 1);
- const std::vector<types::boundary_id_t> indicators = triangulation.get_boundary_indicators();
+ const std::vector<types::boundary_id> indicators = triangulation.get_boundary_indicators();
for (unsigned int i=0; i<indicators.size(); ++i)
deallog << int (indicators[i]) << std::endl;
#include <iomanip>
-template <int dim> Table<dim,types::material_id_t> material_ids();
+template <int dim> Table<dim,types::material_id> material_ids();
-template <> Table<1,types::material_id_t> material_ids<1>()
+template <> Table<1,types::material_id> material_ids<1>()
{
- Table<1,types::material_id_t> t(2);
+ Table<1,types::material_id> t(2);
for (unsigned int i=0; i<2; ++i)
t[i] = 1;
return t;
}
-template <> Table<2,types::material_id_t> material_ids<2>()
+template <> Table<2,types::material_id> material_ids<2>()
{
- Table<2,types::material_id_t> t(2,3);
+ Table<2,types::material_id> t(2,3);
for (unsigned int i=0; i<2; ++i)
for (unsigned int j=0; j<3; ++j)
t[i][j] = 1;
// produce a hole in the middle
- t[1][1] = (types::material_id_t)(-1);
+ t[1][1] = (types::material_id)(-1);
return t;
}
-template <> Table<3,types::material_id_t> material_ids<3>()
+template <> Table<3,types::material_id> material_ids<3>()
{
- Table<3,types::material_id_t> t(2,3,4);
+ Table<3,types::material_id> t(2,3,4);
for (unsigned int i=0; i<2; ++i)
for (unsigned int j=0; j<3; ++j)
for (unsigned int k=0; k<4; ++k)
t[i][j][k] = 1;
// produce a hole in the middle
- t[1][1][1] = (types::material_id_t)(-1);
- t[1][1][2] = (types::material_id_t)(-1);
+ t[1][1][1] = (types::material_id)(-1);
+ t[1][1][2] = (types::material_id)(-1);
return t;
}
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <iomanip>
#include <deal.II/fe/mapping_q1_eulerian.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/multithread_info.h>
#include <fstream>
#include <deal.II/fe/mapping_q_eulerian.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/multithread_info.h>
#include <fstream>
#include <deal.II/fe/mapping_q_eulerian.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/multithread_info.h>
#include <fstream>
#include <deal.II/fe/mapping_q_eulerian.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/multithread_info.h>
#include <fstream>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/numerics/error_estimator.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/grid/grid_generator.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/grid/grid_generator.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <cmath>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/base/function.h>
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/solution_transfer.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/compressed_sparsity_pattern.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/fe_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/solution_transfer.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/multigrid/multigrid.h>
#include <deal.II/multigrid/mg_dof_handler.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/grid/grid_in.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/dofs/dof_renumbering.h>
#include <deal.II/base/smartpointer.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/convergence_table.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/numerics/error_estimator.h>
// now extract a mesh of the 5
// surface faces
- std::set<types::boundary_id_t> boundary_indicators;
+ std::set<types::boundary_id> boundary_indicators;
boundary_indicators.insert (0);
GridTools::extract_boundary_mesh (volume_mesh, boundary_mesh,
boundary_indicators);
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/grid/grid_in.h>
#include <deal.II/lac/vector.h>
#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/mapping_q.h>
std::ofstream logfile("data_out_03/output");
tria.set_boundary (1, surface_description);
tria.set_boundary (0, surface_description);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
GridTools::extract_boundary_mesh (volume_mesh, tria,
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <fstream>
MappingQ<dim,spacedim> mapping(3);
Quadrature<dim-1> &q_face = get_q_face<dim>();
- std::map<types::boundary_id_t,const Function<spacedim>*> neumann_bc;
+ std::map<types::boundary_id,const Function<spacedim>*> neumann_bc;
neumann_bc[0] = &function;
Vector<double> v (dof.n_dofs());
save_mesh(volume_mesh);
Triangulation<dim-1,dim> boundary_mesh;
- set<types::boundary_id_t> boundary_ids;
+ set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
surface_to_volume_mapping
boundary_mesh.set_boundary (1, surface_description);
boundary_mesh.set_boundary (0, surface_description);
- set<types::boundary_id_t> boundary_ids;
+ set<types::boundary_id> boundary_ids;
boundary_ids.insert(1);
surface_to_volume_mapping
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_in.h>
#include <deal.II/grid/grid_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <cmath>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_in.h>
#include <deal.II/grid/grid_out.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <cmath>
cell = volume_mesh.begin_active();
cell->face(0)->set_all_boundary_indicators (1);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
GridTools::extract_boundary_mesh (volume_mesh, boundary_mesh, boundary_ids);
}
cell = volume_mesh.begin_active();
cell->face(0)->set_all_boundary_indicators (1);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
GridTools::extract_boundary_mesh (volume_mesh, boundary_mesh, boundary_ids);
}
cell = volume_mesh.begin_active();
cell->face(0)->set_all_boundary_indicators (1);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
GridTools::extract_boundary_mesh (volume_mesh, boundary_mesh, boundary_ids);
}
#include <deal.II/grid/grid_in.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <string>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <string>
#include <deal.II/grid/grid_generator.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <string>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <string>
#include <deal.II/grid/grid_tools.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <string>
Triangulation<dim, spacedim> tria;
Triangulation<spacedim> volume_mesh;
GridGenerator::half_hyper_ball(volume_mesh);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
GridTools::extract_boundary_mesh (volume_mesh, tria,boundary_ids);
#include <deal.II/grid/grid_tools.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <string>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/base/function_parser.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/base/function.h>
#include <deal.II/base/function_lib.h>
#include <deal.II/fe/fe_dgq.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/solution_transfer.h>
#include <fstream>
triangulation.set_boundary (1, surface_description);
triangulation.set_boundary (0, surface_description);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert(0);
GridTools::extract_boundary_mesh (volume_mesh, triangulation,
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/block_vector.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
--- /dev/null
+//---------------------------- constraints.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- constraints.cc ---------------------------
+
+
+// test that we fixed a case where we tried to deal with some constraints in a
+// block matrix where the last few rows of one of the blocks were empty and we
+// ran into an unrelated assertion because we were accessing something beyond
+// the end of the array
+//
+// testcase by Jason Sheldon
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <base/utilities.h>
+#include <base/quadrature_lib.h>
+
+#include <numerics/vectors.h>
+#include <numerics/matrices.h>
+#include <numerics/data_out.h>
+
+#include <lac/vector.h>
+#include <lac/sparse_direct.h>
+#include <lac/full_matrix.h>
+#include <lac/compressed_sparsity_pattern.h>
+#include <lac/sparse_matrix.h>
+#include <lac/constraint_matrix.h>
+
+#include <dofs/dof_accessor.h>
+#include <dofs/dof_constraints.h>
+#include <dofs/dof_renumbering.h>
+#include <dofs/dof_handler.h>
+#include <dofs/dof_tools.h>
+
+#include <hp/dof_handler.h>
+#include <hp/q_collection.h>
+#include <hp/fe_collection.h>
+#include <hp/fe_values.h>
+
+#include <fe/fe.h>
+#include <fe/fe_tools.h>
+#include <fe/fe_q.h>
+#include <fe/fe_nothing.h>
+#include <fe/fe_system.h>
+#include <fe/fe_values.h>
+
+#include <grid/grid_generator.h>
+#include <grid/tria_iterator.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria.h>
+
+#include <fstream>
+#include <cmath>
+#include <cstdlib>
+
+
+std::ofstream logfile("constraints_block_01/output");
+
+
+int main ()
+{
+ deallog << std::setprecision (2);
+ logfile << std::setprecision (2);
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ // setting up some constants
+ const unsigned int dim = 2;
+ const unsigned int solid_dim = 2*dim;
+ const unsigned int fluid_dim = dim+1;
+ const unsigned int mesh_dim = dim;
+ const unsigned int total_dim = solid_dim + fluid_dim + mesh_dim;
+
+ // make the tria and domain
+ Triangulation<dim> tria;
+
+ GridGenerator::hyper_cube (tria);
+ tria.refine_global(1);
+
+ Point<dim> real_cell_center;
+
+ // create a solid domain (0) in the
+ // lower left hand corner of a 2x2 grid
+ // the rest is fluid/mesh (1)
+
+ for (Triangulation<dim>::active_cell_iterator
+ cell = tria.begin_active();
+ cell != tria.end(); ++cell)
+ {
+ real_cell_center = cell->center();
+ if (real_cell_center(0) < 0.5
+ && real_cell_center(1) < 0.5 )
+ cell->set_material_id (0); // solid
+ else
+ cell->set_material_id (1); //fluid
+ }//cell
+
+ //create the FE spaces for the solid and the fluid/mesh
+ //each are padded with FE_Nothing to be equal length
+
+ std::string solid_fe_name = "FESystem[FE_Q(2)^2-FE_Q(2)^2-FE_Nothing()^2-FE_Nothing()-FE_Nothing()^2]";
+ std::string fluid_fe_name = "FESystem[FE_Nothing()^2-FE_Nothing()^2-FE_Q(2)^2-FE_Q(1)-FE_Q(2)^2]";
+
+ hp::FECollection<dim> fe_collection;
+ FiniteElement<dim> * solid_fe = FETools::get_fe_from_name<dim>(solid_fe_name);
+ FiniteElement<dim> * fluid_fe = FETools::get_fe_from_name<dim>(fluid_fe_name);
+
+ deallog << "Solid FE Space: " << solid_fe->get_name() << std::endl;
+ deallog << "Fluid/Mesh FE Space: " << fluid_fe->get_name() << std::endl;
+
+ fe_collection.push_back(*solid_fe);
+ fe_collection.push_back(*fluid_fe);
+
+ hp::DoFHandler<dim> dh(tria);
+
+ for (hp::DoFHandler<dim>::active_cell_iterator
+ cell = dh.begin_active();
+ cell != dh.end(); ++cell)
+ {
+ if (int(cell->material_id()) == 0)
+ cell->set_active_fe_index (0);
+ else
+ cell->set_active_fe_index (1);
+ }//cell
+ dh.distribute_dofs(fe_collection);
+
+ std::vector<unsigned int> block_component (total_dim,0);
+
+ for (unsigned int comp=0; comp < total_dim; comp++)
+ {
+ if ( comp < solid_dim )
+ block_component[comp] = 0;
+ else if ( comp < solid_dim+fluid_dim )
+ block_component[comp] = 1;
+ else
+ block_component[comp] = 2;
+ }//comp
+
+ std::vector<unsigned int> dofs_per_block(3,0);//3 blocks, count dofs:
+ DoFTools::count_dofs_per_component (dh, dofs_per_block, false, block_component);
+
+ DoFRenumbering::component_wise(dh, block_component);
+
+ //build the sparsitypattern
+
+ BlockSparsityPattern block_sparsity_pattern;
+ {
+ BlockCompressedSimpleSparsityPattern csp(3,3);
+ csp.block(0,0).reinit (dofs_per_block[0],dofs_per_block[0]);//solid-solid
+ csp.block(0,1).reinit (dofs_per_block[0],dofs_per_block[1]);//solid-fluid
+ csp.block(0,2).reinit (dofs_per_block[0],dofs_per_block[2]);//solid-mesh
+
+ csp.block(1,0).reinit (dofs_per_block[1],dofs_per_block[0]);//fluid-solid
+ csp.block(1,1).reinit (dofs_per_block[1],dofs_per_block[1]);//fluid-fluid
+ csp.block(1,2).reinit (dofs_per_block[1],dofs_per_block[2]);//fluid-mesh
+
+ csp.block(2,0).reinit (dofs_per_block[2],dofs_per_block[0]);//mesh-solid
+ csp.block(2,1).reinit (dofs_per_block[2],dofs_per_block[1]);//mesh-fluid
+ csp.block(2,2).reinit (dofs_per_block[2],dofs_per_block[2]);//mesh-mesh
+
+ csp.collect_sizes();
+
+ //enforce coupling across cells and interface
+
+ Table<2,DoFTools::Coupling> cell_coupling (fe_collection.n_components(), fe_collection.n_components());
+ Table<2,DoFTools::Coupling> face_coupling (fe_collection.n_components(), fe_collection.n_components());
+
+ for (unsigned int c=0; c<fe_collection.n_components(); ++c)
+ {
+ for (unsigned int d=0; d<fe_collection.n_components(); ++d)
+ {
+ if (((c<solid_dim) && (d<solid_dim)) //couples solid dims with solid dims
+ ||
+ (((c>=solid_dim) && (d>=solid_dim)) //couples fluid dims and mesh dims
+ && !((c==solid_dim+dim) && (d==solid_dim+dim)))) //fluid pressure does not couple with itself
+ {
+ cell_coupling[c][d] = DoFTools::always;
+ cell_coupling[d][c] = DoFTools::always;
+ }//cell_coupling
+
+ if ((c<solid_dim) && (d>=solid_dim)) //couples solid dims with fluid and mesh dims on the interface
+ {
+ face_coupling[c][d] = DoFTools::always;
+ face_coupling[d][c] = DoFTools::always;
+ }//face_coupling
+ }//d
+ }//c
+ DoFTools::make_flux_sparsity_pattern (dh, csp, cell_coupling, face_coupling);
+ block_sparsity_pattern.copy_from (csp);
+ }
+
+ // build matrices and vectors
+
+ BlockSparseMatrix<double> system_matrix(block_sparsity_pattern);
+ BlockVector<double> system_rhs(dofs_per_block);
+
+ // set up constraints for solution and solution update
+ /**
+ * These constraints enforce that the solid displacement
+ * and mesh displacement are the same on the interface.
+ *
+ * They also constrain that the solid velocity
+ * and fluid velocity are the same on the interface
+ *
+ * The interface check is simplified for this 2x2 case
+ */
+
+ ConstraintMatrix constraints;
+
+ const unsigned int dofs_per_fl_msh_face = fluid_fe->dofs_per_face;
+ const unsigned int dofs_per_solid_face = solid_fe->dofs_per_face;
+ std::vector<unsigned int> fl_msh_face_dof_indices (dofs_per_fl_msh_face);
+ std::vector<unsigned int> solid_face_dof_indices (dofs_per_solid_face );
+
+ std::vector<std::pair<unsigned int, unsigned int> > solid_fluid_pairs;
+ std::vector<std::pair<unsigned int, unsigned int> > solid_mesh_pairs;
+
+ for (hp::DoFHandler<dim>::active_cell_iterator
+ cell = dh.begin_active(); cell!=dh.end(); ++cell) //loops over the cells
+ {
+ if (int(cell->material_id()) == 1)
+ {//Only loop over cells in the fluid region
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ if (!cell->at_boundary(f))
+ {
+ bool face_is_on_interface = false;
+ //checks to see if cell face neighbor is in the solid domain
+ if (int(cell->neighbor(f)->material_id()) == 0 )
+ face_is_on_interface = true;
+
+ if (face_is_on_interface)
+ {
+ std::vector<unsigned int> solid_disp_dof, solid_vel_dof, fluid_vel_dof, mesh_disp_dof;
+
+ cell->face(f)->get_dof_indices (solid_face_dof_indices, 0);
+ cell->face(f)->get_dof_indices (fl_msh_face_dof_indices, 1);
+
+ for (unsigned int i=0; i<dofs_per_solid_face; ++i)
+ {
+ unsigned int comp = solid_fe->face_system_to_component_index(i).first;
+ if (comp <dim)
+ solid_disp_dof.push_back(i);
+ if (comp >= dim && comp < solid_dim)
+ solid_vel_dof.push_back(i);
+ }//i
+ for (unsigned int i=0; i<dofs_per_fl_msh_face; ++i)
+ {
+ unsigned int comp = fluid_fe->face_system_to_component_index(i).first;
+ if (comp >= solid_dim && comp < solid_dim+dim)
+ fluid_vel_dof.push_back(i);
+ if (comp>=solid_dim+fluid_dim)
+ mesh_disp_dof.push_back(i);
+ }//i
+
+ for (unsigned int i=0; i<solid_vel_dof.size(); ++i)
+ {//in this example solid_vel_dof.size()==fluid_vel_dof.size()
+ constraints.add_line (fl_msh_face_dof_indices[fluid_vel_dof[i]]);
+ constraints.add_entry (fl_msh_face_dof_indices[fluid_vel_dof[i]],
+ solid_face_dof_indices[solid_vel_dof[i]], 1.0);
+
+ solid_fluid_pairs.push_back(std::pair<unsigned int,unsigned int>
+ (solid_face_dof_indices[solid_vel_dof[i]],
+ fl_msh_face_dof_indices[fluid_vel_dof[i]]));
+ }//i
+ for (unsigned int i=0; i<solid_disp_dof.size(); ++i)
+ {
+ constraints.add_line (fl_msh_face_dof_indices[mesh_disp_dof[i]]);
+ constraints.add_entry (fl_msh_face_dof_indices[mesh_disp_dof[i]],
+ solid_face_dof_indices[solid_disp_dof[i]], 1.0);
+
+ solid_mesh_pairs.push_back(std::pair<unsigned int,unsigned int>
+ (solid_face_dof_indices[solid_disp_dof[i]],
+ fl_msh_face_dof_indices[mesh_disp_dof[i]]));
+ }
+ }//at interface check
+ }//not at boundary check
+ }//face
+ }//is this in the fluid material region?
+ }//cell
+
+ constraints.close();
+
+ // prints out which dofs are coupled
+ deallog<<"---------------Coupled dofs---------------"<<std::endl;
+ for (unsigned int i=0; i<solid_fluid_pairs.size(); i++)
+ {
+ deallog<<"solid dof: "<< solid_fluid_pairs[i].first
+ <<", fluid dof: "<<solid_fluid_pairs[i].second<<std::endl;
+ }
+ for (unsigned int i=0; i<solid_fluid_pairs.size(); i++)
+ {
+ deallog<<"solid dof: "<<solid_mesh_pairs[i].first
+ <<", mesh dof: "<<solid_mesh_pairs[i].second<<std::endl;
+ }
+ deallog<<"------------------------------------------"<<std::endl;
+
+
+ //code crashes in the fluid assembly, mocked up below
+ {//fluid assembly
+ const unsigned int dofs_per_cell = fluid_fe->dofs_per_cell;
+
+ FullMatrix<double> cell_matrix (dofs_per_cell, dofs_per_cell);
+ Vector<double> cell_rhs (dofs_per_cell);
+
+ std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+
+ for (hp::DoFHandler<dim>::active_cell_iterator
+ cell = dh.begin_active();
+ cell!=dh.end();
+ ++cell) //loops over the cells
+ {
+ if (int(cell->material_id()) == 1)//are we in the fluid region?
+ {
+ cell->get_dof_indices (local_dof_indices);
+
+ // normally the governing equations would be added
+ // to the cell matrix and right hand side here
+
+ deallog<<"I am about to distribute cell: "<<cell<<std::endl;
+ deallog<<"Cell: "<<cell<<" has it's center at "<<cell->center()<<std::endl;
+
+ constraints.distribute_local_to_global(
+ cell_matrix,
+ cell_rhs,
+ local_dof_indices,
+ system_matrix,
+ system_rhs);
+
+ }//is this in the fluid material region?
+
+ }//cell
+
+ }//assemble fluid system
+
+ return 0;
+}
+
--- /dev/null
+
+DEAL::Solid FE Space: FESystem<2>[FE_Q<2>(2)^2-FE_Q<2>(2)^2-FE_Nothing<2>()^2-FE_Nothing<2>()-FE_Nothing<2>()^2]
+DEAL::Fluid/Mesh FE Space: FESystem<2>[FE_Nothing<2>()^2-FE_Nothing<2>()^2-FE_Q<2>(2)^2-FE_Q<2>(1)-FE_Q<2>(2)^2]
+DEAL::---------------Coupled dofs---------------
+DEAL::solid dof: 6, fluid dof: 36
+DEAL::solid dof: 7, fluid dof: 37
+DEAL::solid dof: 14, fluid dof: 42
+DEAL::solid dof: 15, fluid dof: 43
+DEAL::solid dof: 22, fluid dof: 48
+DEAL::solid dof: 23, fluid dof: 49
+DEAL::solid dof: 10, fluid dof: 58
+DEAL::solid dof: 11, fluid dof: 59
+DEAL::solid dof: 14, fluid dof: 42
+DEAL::solid dof: 15, fluid dof: 43
+DEAL::solid dof: 30, fluid dof: 71
+DEAL::solid dof: 31, fluid dof: 72
+DEAL::solid dof: 4, mesh dof: 86
+DEAL::solid dof: 5, mesh dof: 87
+DEAL::solid dof: 12, mesh dof: 90
+DEAL::solid dof: 13, mesh dof: 91
+DEAL::solid dof: 20, mesh dof: 94
+DEAL::solid dof: 21, mesh dof: 95
+DEAL::solid dof: 8, mesh dof: 104
+DEAL::solid dof: 9, mesh dof: 105
+DEAL::solid dof: 12, mesh dof: 90
+DEAL::solid dof: 13, mesh dof: 91
+DEAL::solid dof: 28, mesh dof: 114
+DEAL::solid dof: 29, mesh dof: 115
+DEAL::------------------------------------------
+DEAL::I am about to distribute cell: 1.1
+DEAL::Cell: 1.1 has it's center at 0.75 0.25
+DEAL::I am about to distribute cell: 1.2
+DEAL::Cell: 1.2 has it's center at 0.25 0.75
+DEAL::I am about to distribute cell: 1.3
+DEAL::Cell: 1.3 has it's center at 0.75 0.75
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_raviart_thomas.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include<deal.II/fe/fe_system.h>
#include<deal.II/grid/grid_generator.h>
#include<deal.II/grid/tria.h>
-#include<deal.II/numerics/vectors.h>
+#include<deal.II/numerics/vector_tools.h>
#include<fstream>
#include<deal.II/grid/tria.h>
#include<deal.II/hp/dof_handler.h>
#include<deal.II/hp/fe_collection.h>
-#include<deal.II/numerics/vectors.h>
+#include<deal.II/numerics/vector_tools.h>
#include<fstream>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/fe/fe_values.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/grid/grid_generator.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/derivative_approximation.h>
#include <fstream>
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/derivative_approximation.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <fstream>
MappingQ<dim> mapping(3);
Quadrature<dim-1> &q_face = get_q_face(function);
- std::map<types::boundary_id_t,const Function<dim>*> neumann_bc;
+ std::map<types::boundary_id,const Function<dim>*> neumann_bc;
neumann_bc[0] = &function;
Vector<double> v (dof.n_dofs());
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <fstream>
MappingQ<dim,spacedim> mapping(3);
QGauss<dim-1> q_face(4);
- std::map<types::boundary_id_t,const Function<spacedim>*> neumann_bc;
+ std::map<types::boundary_id,const Function<spacedim>*> neumann_bc;
neumann_bc[0] = &function;
Vector<double> v (dof.n_dofs());
--- /dev/null
+//---------------------------- extract_dofs_by_component_01.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_01.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from DoFTools::extract_dofs via
+// the component_select flag
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ FESystem<dim> element (FE_Q<dim>(1), 1,
+ FE_RaviartThomas<dim>(0), 1,
+ FE_Q<dim>(1), 1,
+ FE_Nedelec<dim>(0), 1);
+ DoFHandler<dim> dof(tr);
+ dof.distribute_dofs(element);
+
+ // try all possible component
+ // masks, which we encode as bit
+ // strings
+ for (unsigned int int_mask=0; int_mask<(1U<<element.n_components()); ++int_mask)
+ {
+ std::vector<bool> component_mask (element.n_components());
+ for (unsigned int c=0; c<element.n_components(); ++c)
+ component_mask[c] = (int_mask & (1<<c));
+
+ std::vector<bool> dofs (dof.n_dofs());
+ DoFTools::extract_dofs (dof, component_mask, dofs);
+
+ for (unsigned int d=0; d<dof.n_dofs(); ++d)
+ deallog << dofs[d];
+ deallog << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_01/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::101010101010101010101010101010101010101010
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::101010101010101010101010101010101010101010
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::101010101010101010101010101010101010101010
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::111111110000000011110000001111000000110000
+DEAL:2d::010101011010101001011010100101101010011010
+DEAL:2d::111111111010101011111010101111101010111010
+DEAL:2d::010101011010101001011010100101101010011010
+DEAL:2d::111111111010101011111010101111101010111010
+DEAL:2d::010101011010101001011010100101101010011010
+DEAL:2d::111111111010101011111010101111101010111010
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::101010100101010110100101011010010101100101
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::010101010101010101010101010101010101010101
+DEAL:2d::111111110101010111110101011111010101110101
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::101010100101010110100101011010010101100101
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::010101010101010101010101010101010101010101
+DEAL:2d::111111110101010111110101011111010101110101
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::101010100101010110100101011010010101100101
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::010101010101010101010101010101010101010101
+DEAL:2d::111111110101010111110101011111010101110101
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::111111111111111100000000000000000011111111000000000000011111111000000000000011110000000001111111100000000000001111000000000111100000000011000000
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
--- /dev/null
+//---------------------------- extract_dofs_by_component_01_hp.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_01_hp.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from DoFTools::extract_dofs via
+// the component_select flag
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ // create an FECollection and set
+ // one cell to use the second
+ // element of this collection
+ hp::FECollection<dim> element;
+ for (unsigned int i=0; i<2; ++i)
+ element.push_back (FESystem<dim> (FE_Q<dim>(1+i), 1,
+ FE_Nedelec<dim>(0), 1));
+ hp::DoFHandler<dim> dof(tr);
+ dof.begin_active()->set_active_fe_index(1);
+ dof.distribute_dofs(element);
+
+ // try all possible component
+ // masks, which we encode as bit
+ // strings
+ for (unsigned int int_mask=0; int_mask<(1U<<element.n_components()); ++int_mask)
+ {
+ std::vector<bool> component_mask (element.n_components());
+ for (unsigned int c=0; c<element.n_components(); ++c)
+ component_mask[c] = (int_mask & (1<<c));
+
+ std::vector<bool> dofs (dof.n_dofs());
+ DoFTools::extract_dofs (dof, component_mask, dofs);
+
+ for (unsigned int d=0; d<dof.n_dofs(); ++d)
+ deallog << dofs[d];
+ deallog << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_01_hp/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::00000000000000000000000000
+DEAL:2d::11011011111100001110000100
+DEAL:2d::00100100000011110001111011
+DEAL:2d::11111111111111111111111111
+DEAL:2d::00100100000011110001111011
+DEAL:2d::11111111111111111111111111
+DEAL:2d::00100100000011110001111011
+DEAL:2d::11111111111111111111111111
+DEAL:3d::0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::1101010101010101010101010111111111111111000000000000111111000000000001100000111110000000000110000011000001000
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
--- /dev/null
+//---------------------------- extract_dofs_by_component_02.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_02.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from DoFTools::extract_dofs via
+// the block_select flag
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ FESystem<dim> element (FE_Q<dim>(1), 1,
+ FE_RaviartThomas<dim>(0), 1,
+ FE_Q<dim>(1), 1,
+ FE_Nedelec<dim>(0), 1);
+ DoFHandler<dim> dof(tr);
+ dof.distribute_dofs(element);
+
+ // try all possible block
+ // masks, which we encode as bit
+ // strings
+ for (unsigned int int_mask=0; int_mask<(1U<<element.n_blocks()); ++int_mask)
+ {
+ std::vector<bool> component_mask (element.n_blocks());
+ for (unsigned int c=0; c<element.n_blocks(); ++c)
+ component_mask[c] = (int_mask & (1<<c));
+
+ std::vector<bool> dofs (dof.n_dofs());
+ DoFTools::extract_dofs (dof, component_mask, dofs, true);
+
+ for (unsigned int d=0; d<dof.n_dofs(); ++d)
+ deallog << dofs[d];
+ deallog << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_02/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::101010101010101010101010101010101010101010
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::111111110000000011110000001111000000110000
+DEAL:2d::010101011010101001011010100101101010011010
+DEAL:2d::111111111010101011111010101111101010111010
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::101010100101010110100101011010010101100101
+DEAL:2d::000000001111111100001111110000111111001111
+DEAL:2d::101010101111111110101111111010111111101111
+DEAL:2d::010101010101010101010101010101010101010101
+DEAL:2d::111111110101010111110101011111010101110101
+DEAL:2d::010101011111111101011111110101111111011111
+DEAL:2d::111111111111111111111111111111111111111111
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::101010101010101000000000000011111110101010000000001111110101010000000001111110100000011111010101000000000111111010000001111101000000111110000111
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::111111111111111100000000000000000011111111000000000000011111111000000000000011110000000001111111100000000000001111000000000111100000000011000000
+DEAL:3d::010101010101010100000000000011111101010101000000001111101010101000000001111101010000011110101010100000000111110101000001111010100000111101000111
+DEAL:3d::111111111111111100000000000011111111111111000000001111111111111000000001111111110000011111111111100000000111111111000001111111100000111111000111
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::101010101010101011111111111100000010101010111111110000010101010111111110000010101111100001010101011111111000001010111110000101011111000010111000
+DEAL:3d::000000000000000011111111111111111100000000111111111111100000000111111111111100001111111110000000011111111111110000111111111000011111111100111111
+DEAL:3d::101010101010101011111111111111111110101010111111111111110101010111111111111110101111111111010101011111111111111010111111111101011111111110111111
+DEAL:3d::010101010101010111111111111100000001010101111111110000001010101111111110000001011111100000101010111111111000000101111110000010111111000001111000
+DEAL:3d::111111111111111111111111111100000011111111111111110000011111111111111110000011111111100001111111111111111000001111111110000111111111000011111000
+DEAL:3d::010101010101010111111111111111111101010101111111111111101010101111111111111101011111111110101010111111111111110101111111111010111111111101111111
+DEAL:3d::111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
--- /dev/null
+//---------------------------- extract_dofs_by_component_02_hp.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_02_hp.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from DoFTools::extract_dofs via
+// the block_select flag
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ // create an FECollection and set
+ // one cell to use the second
+ // element of this collection
+ hp::FECollection<dim> element;
+ for (unsigned int i=0; i<2; ++i)
+ element.push_back (FESystem<dim> (FE_Q<dim>(1+i), 1,
+ FE_Nedelec<dim>(0), 1));
+ hp::DoFHandler<dim> dof(tr);
+ dof.begin_active()->set_active_fe_index(1);
+ dof.distribute_dofs(element);
+
+ // try all possible block
+ // masks, which we encode as bit
+ // strings
+ for (unsigned int int_mask=0; int_mask<(1U<<element[0].n_blocks()); ++int_mask)
+ {
+ std::vector<bool> component_mask (element[0].n_blocks());
+ for (unsigned int c=0; c<element[0].n_blocks(); ++c)
+ component_mask[c] = (int_mask & (1<<c));
+
+ std::vector<bool> dofs (dof.n_dofs());
+ DoFTools::extract_dofs (dof, component_mask, dofs, true);
+
+ for (unsigned int d=0; d<dof.n_dofs(); ++d)
+ deallog << dofs[d];
+ deallog << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_02_hp/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::00000000000000000000000000
+DEAL:2d::11011011111100001110000100
+DEAL:2d::00100100000011110001111011
+DEAL:2d::11111111111111111111111111
+DEAL:3d::0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::1101010101010101010101010111111111111111000000000000111111000000000001100000111110000000000110000011000001000
+DEAL:3d::0010101010101010101010101000000000000000111111111111000000111111111110011111000001111111111001111100111110111
+DEAL:3d::1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
--- /dev/null
+//---------------------------- extract_dofs_by_component_03.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_03.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from
+// DoFTools::distribute_cell_to_dof_vector
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ FESystem<dim> element (FE_Q<dim>(1), 1,
+ FE_Q<dim>(2), 2);
+ DoFHandler<dim> dof(tr);
+ dof.distribute_dofs(element);
+
+ // try all possible components
+ for (unsigned int c=0; c<element.n_components(); ++c)
+ {
+ Vector<double> in(tr.n_active_cells());
+ for (unsigned int i=0; i<in.size(); ++i)
+ in[i] = i;
+ Vector<double> out(dof.n_dofs());
+ DoFTools::distribute_cell_to_dof_vector (dof, in, out, c);
+
+ for (unsigned int d=0; d<dof.n_dofs(); ++d)
+ deallog << out[d] << std::endl;
+ deallog << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_03/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.50
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::2.50
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.50
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::1.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::2.50
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::2.50
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::2.00
+DEAL:2d::0.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::0.00
+DEAL:2d::3.00
+DEAL:2d::
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::1.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::1.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::1.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.50
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::2.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::3.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.50
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::4.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::5.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.50
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::6.00
+DEAL:3d::0.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::0.00
+DEAL:3d::7.00
+DEAL:3d::
--- /dev/null
+//---------------------------- extract_dofs_by_component_04.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_04.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from DoFTools::extract_constant_modes
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ FESystem<dim> element (FE_Q<dim>(1), 1,
+ FE_RaviartThomas<dim>(0), 1,
+ FE_Q<dim>(1), 1,
+ FE_Nedelec<dim>(0), 1);
+ DoFHandler<dim> dof(tr);
+ dof.distribute_dofs(element);
+
+ // try all possible component
+ // masks, which we encode as bit
+ // strings
+ for (unsigned int int_mask=0; int_mask<(1U<<element.n_components()); ++int_mask)
+ {
+ std::vector<bool> component_mask (element.n_components());
+ for (unsigned int c=0; c<element.n_components(); ++c)
+ component_mask[c] = (int_mask & (1<<c));
+
+ std::vector<std::vector<bool> > constant_modes;
+ DoFTools::extract_constant_modes (dof, component_mask, constant_modes);
+
+ for (unsigned int d=0; d<constant_modes.size(); ++d)
+ {
+ deallog << "constant mode " << d << std::endl;
+ for (unsigned int e=0; e<constant_modes[d].size(); ++e)
+ deallog << constant_modes[d][e];
+ deallog << std::endl;
+ }
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_04/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::constant mode 0
+DEAL:2d::111111111
+DEAL:2d::constant mode 0
+DEAL:2d::111111111111
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 0
+DEAL:2d::111111111111
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 0
+DEAL:2d::111111111111
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111111111
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 1
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000101000010100001000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001111000011100001110011
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000010100001010000100
+DEAL:2d::constant mode 0
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 1
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000101000010100001000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001111000011100001110011
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000010100001010000100
+DEAL:2d::constant mode 0
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000101000010100001000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001111000011100001110011
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::010101010000010100001010000100
+DEAL:2d::constant mode 0
+DEAL:2d::111111111111
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000101000010100001000
+DEAL:2d::constant mode 1
+DEAL:2d::010101010000010100001010000100
+DEAL:2d::constant mode 2
+DEAL:2d::000000001111000011100001110011
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 4
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 0
+DEAL:2d::111111111111
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000101000010100001000
+DEAL:2d::constant mode 1
+DEAL:2d::010101010000010100001010000100
+DEAL:2d::constant mode 2
+DEAL:2d::000000001111000011100001110011
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 4
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 0
+DEAL:2d::111111111111
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 3
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 3
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010101010101010101010
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::010101010101010101010101
+DEAL:2d::constant mode 3
+DEAL:2d::000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 1
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 4
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::111100001100011000100
+DEAL:2d::constant mode 1
+DEAL:2d::000011110011100111011
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000101000010100001000
+DEAL:2d::constant mode 1
+DEAL:2d::010101010000010100001010000100
+DEAL:2d::constant mode 2
+DEAL:2d::000000001111000011100001110011
+DEAL:2d::constant mode 3
+DEAL:2d::000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 3
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 4
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 2
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 3
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 4
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::000010101010001010100010101001010
+DEAL:2d::constant mode 1
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 2
+DEAL:2d::111100000000110000001100000010000
+DEAL:2d::constant mode 3
+DEAL:2d::000001010101000101010001010100101
+DEAL:2d::constant mode 4
+DEAL:2d::000000000000000000000000000000000
+DEAL:2d::constant mode 0
+DEAL:2d::101010100000000010100000001010000000100000
+DEAL:2d::constant mode 1
+DEAL:2d::000000001010101000001010100000101010001010
+DEAL:2d::constant mode 2
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:2d::constant mode 3
+DEAL:2d::010101010000000001010000000101000000010000
+DEAL:2d::constant mode 4
+DEAL:2d::000000000101010100000101010000010101000101
+DEAL:2d::constant mode 5
+DEAL:2d::000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101010101010101010101010101010101010101010
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010101010101010101010101010101010101010101
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::000000001111110000111110000111110011110000111110011110011110111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000001111000001111000001100001111000001100001100001000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000010101010000001010101000000101000001010101000000101000001010000010000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000011111100000000111110000000011111000011110000000011111000011110000111100111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000001010101000000101010100000010100000101010100000010100000101000001000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111111111111111111111111111111111111111111111111111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000111111000000001111100000000111110000011110000000011111000001111000001111000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111111111000000111111110000011111111000001111100001111111100000111110000111110000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::111111110000000000001111000000001111000000001100000111100000000110000011000001000
+DEAL:3d::constant mode 1
+DEAL:3d::000000001111111111110000111111110000111111110011111000011111111001111100111110111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000010101010000000001010101000000000101000000101010100000000010100000010100000010000
+DEAL:3d::constant mode 1
+DEAL:3d::010101010101010100000000000001010101000000000101010100000000010100000010101010000000001010000001010000001000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000011111111111100000000111111110000000011111111000011111000000001111111100001111100001111100111
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::000000000000000000001111110000000000001111100000000000011111000000011110000000000001111100000001111000000011110000111
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::111111110000000000000000001111000000000000011110000000000000110000000001111000000000000011000000000110000000001000000
+DEAL:3d::constant mode 4
+DEAL:3d::000000001111111111110000000000111111110000000001111111100000001111100000000111111110000000111110000001111100000111000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 0
+DEAL:3d::101010101010101000000000000000000010101010000000000000010101010000000000000010100000000001010101000000000000001010000000000101000000000010000000
+DEAL:3d::constant mode 1
+DEAL:3d::000000000000000000000000000011111100000000000000001111100000000000000001111100000000011110000000000000000111110000000001111000000000111100000111
+DEAL:3d::constant mode 2
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 3
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 4
+DEAL:3d::010101010101010100000000000000000001010101000000000000001010101000000000000001010000000000101010100000000000000101000000000010100000000001000000
+DEAL:3d::constant mode 5
+DEAL:3d::000000000000000011111111111100000000000000111111110000000000000111111110000000001111100000000000011111111000000000111110000000011111000000111000
+DEAL:3d::constant mode 6
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+DEAL:3d::constant mode 7
+DEAL:3d::000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- /dev/null
+//---------------------------- extract_dofs_by_component_05.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_05.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from
+// DoFTools::count_dofs_per_component with argument only_once=false
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ FESystem<dim> element (FE_Q<dim>(1), 1,
+ FE_RaviartThomas<dim>(0), 1,
+ FE_Q<dim>(1), 1,
+ FE_Nedelec<dim>(0), 1);
+ DoFHandler<dim> dof(tr);
+ dof.distribute_dofs(element);
+
+ std::vector<unsigned int> count (element.n_components());
+ DoFTools::count_dofs_per_component (dof, count, false);
+
+ for (unsigned int d=0; d<count.size(); ++d)
+ deallog << count[d] << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_05/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::9
+DEAL:2d::12
+DEAL:2d::12
+DEAL:2d::9
+DEAL:2d::12
+DEAL:2d::12
+DEAL:3d::27
+DEAL:3d::36
+DEAL:3d::36
+DEAL:3d::36
+DEAL:3d::27
+DEAL:3d::54
+DEAL:3d::54
+DEAL:3d::54
--- /dev/null
+//---------------------------- extract_dofs_by_component_05_hp.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_05_hp.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from
+// DoFTools::count_dofs_per_component with argument only_once=false
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ // create an FECollection and set
+ // one cell to use the second
+ // element of this collection
+ hp::FECollection<dim> element;
+ for (unsigned int i=0; i<2; ++i)
+ element.push_back (FESystem<dim> (FE_Q<dim>(1+i), 1,
+ FE_Nedelec<dim>(0), 1));
+ hp::DoFHandler<dim> dof(tr);
+ dof.begin_active()->set_active_fe_index(1);
+ dof.distribute_dofs(element);
+
+ std::vector<unsigned int> count (element.n_components());
+ DoFTools::count_dofs_per_component (dof, count, false);
+
+ for (unsigned int d=0; d<count.size(); ++d)
+ deallog << count[d] << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_05_hp/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::14
+DEAL:2d::12
+DEAL:2d::12
+DEAL:3d::46
+DEAL:3d::63
+DEAL:3d::63
+DEAL:3d::63
--- /dev/null
+//---------------------------- extract_dofs_by_component_06.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_06.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from
+// DoFTools::count_dofs_per_component with argument only_once=true
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ FESystem<dim> element (FE_Q<dim>(1), 1,
+ FE_RaviartThomas<dim>(0), 1,
+ FE_Q<dim>(1), 1,
+ FE_Nedelec<dim>(0), 1);
+ DoFHandler<dim> dof(tr);
+ dof.distribute_dofs(element);
+
+ std::vector<unsigned int> count (element.n_components());
+ DoFTools::count_dofs_per_component (dof, count, true);
+
+ for (unsigned int d=0; d<count.size(); ++d)
+ deallog << count[d] << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_06/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::9
+DEAL:2d::12
+DEAL:2d::0
+DEAL:2d::9
+DEAL:2d::12
+DEAL:2d::0
+DEAL:3d::27
+DEAL:3d::36
+DEAL:3d::0
+DEAL:3d::0
+DEAL:3d::27
+DEAL:3d::54
+DEAL:3d::0
+DEAL:3d::0
--- /dev/null
+//---------------------------- extract_dofs_by_component_06_hp.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2000, 2001, 2003, 2004, 2007, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- extract_dofs_by_component_06_hp.cc ---------------------------
+
+
+// test internal::extract_dofs_by_component for some corner cases that
+// I was unsure about when refactoring some code in there
+//
+// this particular test checks the call path to
+// internal::extract_dofs_by_component from
+// DoFTools::count_dofs_per_component with argument only_once=true
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <fstream>
+
+
+
+
+template <int dim>
+void
+check ()
+{
+ Triangulation<dim> tr;
+ GridGenerator::hyper_cube(tr, -1,1);
+ tr.refine_global (1);
+
+ // create an FECollection and set
+ // one cell to use the second
+ // element of this collection
+ hp::FECollection<dim> element;
+ for (unsigned int i=0; i<2; ++i)
+ element.push_back (FESystem<dim> (FE_Q<dim>(1+i), 1,
+ FE_Nedelec<dim>(0), 1));
+ hp::DoFHandler<dim> dof(tr);
+ dof.begin_active()->set_active_fe_index(1);
+ dof.distribute_dofs(element);
+
+ std::vector<unsigned int> count (element.n_components());
+ DoFTools::count_dofs_per_component (dof, count, true);
+
+ for (unsigned int d=0; d<count.size(); ++d)
+ deallog << count[d] << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile ("extract_dofs_by_component_06_hp/output");
+ deallog << std::setprecision (2);
+ deallog << std::fixed;
+ deallog.attach(logfile);
+ deallog.depth_console (0);
+
+ deallog.push ("2d");
+ check<2> ();
+ deallog.pop ();
+ deallog.push ("3d");
+ check<3> ();
+ deallog.pop ();
+}
--- /dev/null
+
+DEAL:2d::14
+DEAL:2d::12
+DEAL:2d::0
+DEAL:3d::46
+DEAL:3d::63
+DEAL:3d::0
+DEAL:3d::0
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
cell = dof.begin_active(); cell != dof.end(); ++cell)
{
fe_values.reinit (cell);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
// use a vector extractor if there
// are sufficiently many components
(fe_values[vec_components].gradient(i,q) +
transpose(fe_values[vec_components].gradient(i,q)))/2,
ExcInternalError());
-
+
Assert (fe_values[vec_components].hessian (i,q)[d]
==
fe_values.shape_hessian_component (i,q,c+d),
deallog.attach(logfile);
deallog.depth_console (0);
- deallog.threshold_double(1.e-12);
+ deallog.threshold_double(1.e-7);
test_hyper_sphere<2>();
test_hyper_sphere<3>();
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<1,dim> >(fe.n_components()));
fe_values.get_function_gradients (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
{
FEValuesExtractors::Scalar single_component (c);
fe_values[single_component].get_function_gradients (fe_function,
scalar_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
{
- deallog << scalar_values[q] << std::endl;
+ for (unsigned int d=0; d<dim; ++d)
+ deallog << scalar_values[q][d] << (d<dim-1 ? " " : "");
+ deallog << std::endl;
Assert ((scalar_values[q] - vector_values[q][c]).norm()
<= 1e-12 * scalar_values[q].norm(),
ExcInternalError());
DEAL::125. -61.1
DEAL::125. -40.8
DEAL::component=3
-DEAL::0.00 5.84
-DEAL::0.00 5.84
-DEAL::0.00 9.52
-DEAL::0.00 9.52
+DEAL::0 5.84
+DEAL::0 5.84
+DEAL::0 9.52
+DEAL::0 9.52
DEAL::component=4
DEAL::5.84 -6.75
DEAL::5.84 6.75
DEAL::2.37 4.73 9.46
DEAL::2.37 4.73 9.46
DEAL::component=1
-DEAL::-2.21e-12 -275. -138.
-DEAL::2.77e-12 -275. -138.
+DEAL::0 -275. -138.
+DEAL::0 -275. -138.
DEAL::-367. -275. 4.71e+03
DEAL::367. -275. 4.92e+03
DEAL::-184. 4.57e+03 -138.
DEAL::4.80e+03 4.57e+03 4.71e+03
DEAL::-4.38e+03 4.79e+03 4.92e+03
DEAL::component=2
-DEAL::-275. -8.99e-13 -138.
+DEAL::-275. 0 -138.
DEAL::-275. -459. 4.80e+03
-DEAL::-275. 1.41e-12 -138.
+DEAL::-275. 0 -138.
DEAL::-275. 459. 5.02e+03
DEAL::4.67e+03 -91.8 -138.
DEAL::4.67e+03 3.52e+03 4.80e+03
DEAL::4.88e+03 91.8 -138.
DEAL::4.88e+03 -3.09e+03 5.02e+03
DEAL::component=3
-DEAL::-275. -138. 1.36e-12
+DEAL::-275. -138. 0
DEAL::-275. 4.90e+03 -367.
DEAL::4.76e+03 -138. -184.
DEAL::4.76e+03 4.90e+03 2.23e+03
-DEAL::-275. -138. -1.36e-12
+DEAL::-275. -138. 0
DEAL::-275. 5.11e+03 367.
DEAL::4.97e+03 -138. 184.
DEAL::4.97e+03 5.11e+03 -1.81e+03
DEAL::component=4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
-DEAL::0.00 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
+DEAL::0 5.60 22.4
DEAL::component=5
-DEAL::5.60 -1.84e-16 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 -1.84e-16 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 7.35e-16 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 7.35e-16 22.4
-DEAL::5.60 0.00 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 0 22.4
DEAL::component=6
-DEAL::5.60 11.2 2.53e-16
-DEAL::5.60 11.2 1.01e-15
-DEAL::5.60 11.2 1.01e-15
-DEAL::5.60 11.2 0.00
-DEAL::5.60 11.2 2.53e-16
-DEAL::5.60 11.2 1.01e-15
-DEAL::5.60 11.2 1.01e-15
-DEAL::5.60 11.2 0.00
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
+DEAL::5.60 11.2 0
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<2,dim> >(fe.n_components()));
fe_values.get_function_hessians (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
{
FEValuesExtractors::Scalar single_component (c);
fe_values[single_component].get_function_hessians (fe_function,
scalar_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
{
- deallog << scalar_values[q] << std::endl;
+ for (unsigned int d=0; d<dim; ++d)
+ for (unsigned int e=0; e<dim; ++e)
+ deallog << scalar_values[q][d][e] << (d<dim-1 || e<dim-1 ? " " : "");
+ deallog << std::endl;
Assert ((scalar_values[q] - vector_values[q][c]).norm()
<= 1e-12 * scalar_values[q].norm(),
ExcInternalError());
deallog.attach(logfile);
deallog.depth_console (0);
- deallog.threshold_double(1.e-7);
+ deallog.threshold_double(1.e-5);
test_hyper_sphere<2>();
test_hyper_sphere<3>();
DEAL::FE=FESystem<2>[FE_Q<2>(1)-FE_RaviartThomas<2>(1)-FE_Nedelec<2>(0)]
DEAL::component=0
-DEAL::5.60e-11 1.30 1.30 -1.50
-DEAL::0.00 1.30 1.30 1.50
-DEAL::0.00 3.45 3.45 -3.99
-DEAL::0.00 3.45 3.45 3.99
+DEAL::0 1.30 1.30 -1.50
+DEAL::0 1.30 1.30 1.50
+DEAL::0 3.45 3.45 -3.99
+DEAL::0 3.45 3.45 3.99
DEAL::component=1
DEAL::-50.8 877. 848. -953.
DEAL::-50.8 -779. -889. -641.
DEAL::-1.43e+03 2.86e+03 2.65e+03 -2.63e+03
DEAL::-1.43e+03 -2.60e+03 -2.12e+03 -1.44e+03
DEAL::component=2
-DEAL::3.99e-09 278. 209. -236.
-DEAL::-6.72e-10 278. 209. -247.
-DEAL::-1.25e-08 374. 46.3 -122.
-DEAL::8.76e-10 374. 46.3 -1.16e+03
+DEAL::0 278. 209. -236.
+DEAL::0 278. 209. -247.
+DEAL::0 374. 46.3 -122.
+DEAL::0 374. 46.3 -1.16e+03
DEAL::component=3
-DEAL::0.00 0.00 2.69e-10 9.43
-DEAL::0.00 0.00 8.06e-10 9.43
-DEAL::0.00 0.00 -8.76e-10 25.0
-DEAL::0.00 0.00 8.76e-10 25.0
+DEAL::0 0 0 9.43
+DEAL::0 0 0 9.43
+DEAL::0 0 0 25.0
+DEAL::0 0 0 25.0
DEAL::component=4
-DEAL::2.69e-10 9.43 18.9 -21.8
-DEAL::8.06e-10 9.43 18.9 21.8
-DEAL::-8.76e-10 25.0 50.0 -57.8
-DEAL::8.76e-10 25.0 50.0 57.8
+DEAL::0 9.43 18.9 -21.8
+DEAL::0 9.43 18.9 21.8
+DEAL::0 25.0 50.0 -57.8
+DEAL::0 25.0 50.0 57.8
DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(0)]
DEAL::component=0
-DEAL::0.00 9.85e-10 5.09e-10 1.54e-09 2.44e-26 5.91e-10 3.28e-10 4.60e-10 -2.17e-09
-DEAL::0.00 9.85e-10 1.74e-09 -1.38e-09 0.00 2.53e-09 -1.30e-09 5.58e-10 1.64e-09
-DEAL::4.27e-10 -1.18e-09 1.26e-09 2.89e-09 -8.21e-10 2.89e-09 -8.54e-10 -7.88e-10 1.64e-09
-DEAL::0.00 -1.18e-09 -2.30e-10 -3.94e-10 -8.21e-10 -4.60e-10 -7.88e-10 -7.88e-10 -2.17e-09
-DEAL::0.00 5.09e-10 -1.97e-10 1.97e-10 -1.94e-26 -1.38e-09 3.28e-10 4.60e-10 3.23e-27
-DEAL::0.00 5.09e-10 -2.13e-10 -3.94e-10 1.08e-09 -3.94e-10 -1.63e-09 9.52e-10 -1.11e-26
-DEAL::-5.42e-10 4.92e-11 5.42e-10 1.97e-10 -8.21e-10 -3.94e-10 -2.36e-09 -7.88e-10 -5.18e-26
-DEAL::0.00 4.92e-11 4.93e-11 -3.94e-10 0.00 -1.38e-09 -7.88e-10 -7.88e-10 0.00
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
DEAL::component=1
-DEAL::2.57e-07 -1.50e+03 -752. -1.50e+03 3.49e-07 1.99e+04 -752. 1.99e+04 5.31e-08
-DEAL::-3.47e-07 1.50e+03 752. 1.50e+03 5.81e-07 2.07e+04 752. 2.07e+04 7.10e-07
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 -4.08e-07 1.99e+04 2.12e+04 1.99e+04 2.96e-06
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 -2.94e-07 2.07e+04 -1.94e+04 2.07e+04 -8.83e-07
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -6.29e-08 1.99e+04 -752. 1.99e+04 2.25e-08
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 2.06e-06 2.07e+04 752. 2.07e+04 3.03e-13
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -8.04e-07 1.99e+04 2.12e+04 1.99e+04 -7.68e-07
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.10e-08 2.07e+04 -1.94e+04 2.07e+04 -8.83e-07
+DEAL::0 -1.50e+03 -752. -1.50e+03 0 1.99e+04 -752. 1.99e+04 0
+DEAL::0 1.50e+03 752. 1.50e+03 0 2.07e+04 752. 2.07e+04 0
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 0 1.99e+04 2.12e+04 1.99e+04 0
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 0 2.07e+04 -1.94e+04 2.07e+04 0
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 0 1.99e+04 -752. 1.99e+04 0
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 0 2.07e+04 752. 2.07e+04 0
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 0 1.99e+04 2.12e+04 1.99e+04 0
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 0 2.07e+04 -1.94e+04 2.07e+04 0
DEAL::component=2
-DEAL::-2.06e-07 -1.88e+03 2.02e+04 -1.88e+03 1.75e-06 -376. 2.02e+04 -376. 4.37e-07
-DEAL::-3.62e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 2.93e-06
-DEAL::1.88e-08 1.88e+03 2.11e+04 1.88e+03 1.28e-06 376. 2.11e+04 376. 7.40e-07
-DEAL::5.04e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -9.08e-07
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -5.17e-07
-DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
-DEAL::-1.46e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -9.25e-08
-DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
+DEAL::0 -1.88e+03 2.02e+04 -1.88e+03 0 -376. 2.02e+04 -376. 0
+DEAL::0 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 0
+DEAL::0 1.88e+03 2.11e+04 1.88e+03 0 376. 2.11e+04 376. 0
+DEAL::0 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 0
+DEAL::0 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. 0
+DEAL::0 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 0
+DEAL::0 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. 0
+DEAL::0 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0
DEAL::component=3
-DEAL::5.81e-08 2.06e+04 -1.50e+03 2.06e+04 3.99e-08 -752. -1.50e+03 -752. -1.93e-06
-DEAL::-2.94e-08 2.06e+04 -1.50e+03 2.06e+04 2.26e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::3.01e-06 2.06e+04 9.89e+03 2.06e+04 7.78e-08 -752. 9.89e+03 -752. 1.50e+03
-DEAL::-9.50e-07 2.06e+04 9.89e+03 2.06e+04 -3.25e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -1.18e-07 752. 1.50e+03 752. -2.35e-06
-DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 1.87e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-1.34e-06 2.15e+04 -8.16e+03 2.15e+04 1.09e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 5.27e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0 2.06e+04 -1.50e+03 2.06e+04 0 -752. -1.50e+03 -752. 0
+DEAL::0 2.06e+04 -1.50e+03 2.06e+04 0 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::0 2.06e+04 9.89e+03 2.06e+04 0 -752. 9.89e+03 -752. 1.50e+03
+DEAL::0 2.06e+04 9.89e+03 2.06e+04 0 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::0 2.15e+04 1.50e+03 2.15e+04 0 752. 1.50e+03 752. 0
+DEAL::0 2.15e+04 1.50e+03 2.15e+04 0 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
+DEAL::0 2.15e+04 -8.16e+03 2.15e+04 0 752. -8.16e+03 752. 1.50e+03
+DEAL::0 2.15e+04 -8.16e+03 2.15e+04 0 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
DEAL::component=4
-DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
-DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
-DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
-DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
-DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
-DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
-DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
DEAL::component=5
-DEAL::2.35e-09 1.58e-09 2.20e-09 -1.20e-09 4.32e-26 -7.61e-10 1.14e-08 4.33e-25 4.35e-10
-DEAL::-1.31e-09 1.58e-09 6.15e-09 0.00 0.00 6.52e-10 -2.89e-09 0.00 1.58e-08
-DEAL::4.98e-09 -2.89e-09 6.14e-09 -1.20e-09 -7.35e-26 -7.61e-10 1.82e-08 -1.05e-08 2.14e-08
-DEAL::0.00 -2.89e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
-DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 9.45e-26 -8.70e-10 -1.81e-10 -6.81e-26 -5.69e-09
-DEAL::0.00 2.63e-09 -2.63e-10 0.00 0.00 0.00 2.36e-09 5.25e-09 1.25e-25
-DEAL::-4.52e-11 -1.31e-09 9.42e-10 1.74e-09 6.17e-26 -8.70e-10 -1.76e-09 -1.26e-08 -4.35e-10
-DEAL::0.00 0.00 -1.58e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
DEAL::component=6
-DEAL::-1.63e-10 2.42e-09 2.38e-26 4.78e-09 -1.63e-10 1.76e-26 -7.07e-10 -4.89e-10 3.15e-26
-DEAL::-4.35e-10 2.58e-09 4.20e-09 -3.37e-09 -2.17e-10 7.88e-09 -3.70e-09 2.17e-10 6.90e-25
-DEAL::1.10e-09 -3.43e-09 3.94e-09 8.10e-09 -3.17e-09 8.41e-09 -2.17e-10 -5.98e-09 6.64e-25
-DEAL::0.00 -2.89e-09 -1.31e-09 -5.25e-10 -2.63e-09 -2.63e-09 0.00 0.00 0.00
-DEAL::-1.63e-10 1.11e-09 -2.51e-27 -4.71e-10 -1.63e-10 -2.63e-09 -7.07e-10 -4.89e-10 -5.96e-26
-DEAL::-4.35e-10 1.27e-09 1.00e-26 -7.43e-10 3.08e-10 -1.08e-26 -3.70e-09 2.17e-10 -5.71e-26
-DEAL::-1.79e-09 -8.06e-10 1.31e-09 -2.41e-09 -3.17e-09 -7.87e-26 -2.17e-10 -5.98e-09 5.87e-26
-DEAL::0.00 -2.63e-10 0.00 -5.25e-10 0.00 -2.63e-09 0.00 0.00 0.00
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<2,dim> >(fe.n_components()));
fe_values.get_function_hessians (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
{
FEValuesExtractors::Scalar single_component (c);
fe_values[single_component].get_function_hessians (fe_function,
scalar_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
{
- deallog << scalar_values[q] << std::endl;
+ for (unsigned int d=0; d<dim; ++d)
+ for (unsigned int e=0; e<dim; ++e)
+ deallog << scalar_values[q][d][e] << (d<dim-1 || e<dim-1 ? " " : "");
+ deallog << std::endl;
+
Assert ((scalar_values[q] - vector_values[q][c]).norm()
<= 1e-12 * scalar_values[q].norm(),
ExcInternalError());
deallog.attach(logfile);
deallog.depth_console (0);
- deallog.threshold_double(1.e-7);
+ deallog.threshold_double(1.e-5);
test_hyper_sphere<2>();
test_hyper_sphere<3>();
DEAL::-949. 1.90e+03 1.76e+03 -1.73e+03
DEAL::-949. -1.73e+03 -1.39e+03 -877.
DEAL::component=1
-DEAL::2.33e-09 188. 147. -148.
-DEAL::-3.58e-10 188. 147. -204.
-DEAL::-7.59e-09 174. -23.5 33.7
-DEAL::5.84e-10 174. -23.5 -967.
+DEAL::0 188. 147. -148.
+DEAL::0 188. 147. -204.
+DEAL::0 174. -23.5 33.7
+DEAL::0 174. -23.5 -967.
DEAL::FE=FE_RaviartThomas<3>(1)
DEAL::component=0
-DEAL::2.57e-07 -1.50e+03 -752. -1.50e+03 2.23e-07 1.24e+04 -752. 1.24e+04 1.11e-08
-DEAL::2.41e-07 1.50e+03 752. 1.50e+03 3.42e-07 1.32e+04 752. 1.32e+04 4.58e-07
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 -1.98e-07 1.24e+04 2.12e+04 1.24e+04 1.83e-06
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 -1.68e-07 1.32e+04 -1.94e+04 1.32e+04 -5.46e-07
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.24e+04 -752. 1.24e+04 2.25e-08
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 1.23e-06 1.32e+04 752. 1.32e+04 1.80e-13
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -5.09e-07 1.24e+04 2.12e+04 1.24e+04 -5.15e-07
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.10e-08 1.32e+04 -1.94e+04 1.32e+04 -5.46e-07
+DEAL::0 -1.50e+03 -752. -1.50e+03 0 1.24e+04 -752. 1.24e+04 0
+DEAL::0 1.50e+03 752. 1.50e+03 0 1.32e+04 752. 1.32e+04 0
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 0 1.24e+04 2.12e+04 1.24e+04 0
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 0 1.32e+04 -1.94e+04 1.32e+04 0
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 0 1.24e+04 -752. 1.24e+04 0
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 0 1.32e+04 752. 1.32e+04 0
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 0 1.24e+04 2.12e+04 1.24e+04 0
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 0 1.32e+04 -1.94e+04 1.32e+04 0
DEAL::component=1
-DEAL::-1.21e-07 -1.88e+03 1.27e+04 -1.88e+03 1.29e-06 -376. 1.27e+04 -376. 2.69e-07
-DEAL::-2.36e-07 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 1.84e-06
-DEAL::-1.05e-08 1.88e+03 1.36e+04 1.88e+03 1.03e-06 376. 1.36e+04 376. 4.46e-07
-DEAL::5.04e-08 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 -5.72e-07
-DEAL::-8.02e-09 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. -3.07e-07
-DEAL::-2.14e-08 1.48e+04 1.27e+04 1.48e+04 -2.71e+04 1.63e+04 1.27e+04 1.63e+04 4.27e-13
-DEAL::-9.39e-07 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. -5.04e-08
-DEAL::0.00 -1.30e+04 1.36e+04 -1.30e+04 -2.71e+04 -1.46e+04 1.36e+04 -1.46e+04 0.00
+DEAL::0 -1.88e+03 1.27e+04 -1.88e+03 0 -376. 1.27e+04 -376. 0
+DEAL::0 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 0
+DEAL::0 1.88e+03 1.36e+04 1.88e+03 0 376. 1.36e+04 376. 0
+DEAL::0 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 0
+DEAL::0 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. 0
+DEAL::0 1.48e+04 1.27e+04 1.48e+04 -2.71e+04 1.63e+04 1.27e+04 1.63e+04 0
+DEAL::0 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. 0
+DEAL::0 -1.30e+04 1.36e+04 -1.30e+04 -2.71e+04 -1.46e+04 1.36e+04 -1.46e+04 0
DEAL::component=2
-DEAL::-2.60e-08 1.31e+04 -1.50e+03 1.31e+04 -2.10e-09 -752. -1.50e+03 -752. -1.05e-06
-DEAL::1.26e-08 1.31e+04 -1.50e+03 1.31e+04 1.42e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::1.83e-06 1.31e+04 9.89e+03 1.31e+04 7.78e-08 -752. 9.89e+03 -752. 1.50e+03
-DEAL::-5.72e-07 1.31e+04 9.89e+03 1.31e+04 -2.03e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::-1.10e-07 1.40e+04 1.50e+03 1.40e+04 -7.57e-08 752. 1.50e+03 752. -1.34e-06
-DEAL::0.00 1.40e+04 1.50e+03 1.40e+04 1.20e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-8.49e-07 1.40e+04 -8.16e+03 1.40e+04 6.72e-08 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 1.40e+04 -8.16e+03 1.40e+04 3.17e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0 1.31e+04 -1.50e+03 1.31e+04 0 -752. -1.50e+03 -752. 0
+DEAL::0 1.31e+04 -1.50e+03 1.31e+04 0 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::0 1.31e+04 9.89e+03 1.31e+04 0 -752. 9.89e+03 -752. 1.50e+03
+DEAL::0 1.31e+04 9.89e+03 1.31e+04 0 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::0 1.40e+04 1.50e+03 1.40e+04 0 752. 1.50e+03 752. 0
+DEAL::0 1.40e+04 1.50e+03 1.40e+04 0 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
+DEAL::0 1.40e+04 -8.16e+03 1.40e+04 0 752. -8.16e+03 752. 1.50e+03
+DEAL::0 1.40e+04 -8.16e+03 1.40e+04 0 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<2,dim> >(fe.n_components()));
fe_values.get_function_hessians (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
{
FEValuesExtractors::Scalar single_component (c);
fe_values[single_component].get_function_hessians (fe_function,
scalar_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
{
- deallog << scalar_values[q] << std::endl;
+ for (unsigned int d=0; d<dim; ++d)
+ for (unsigned int e=0; e<dim; ++e)
+ deallog << scalar_values[q][d][e] << (d<dim-1 || e<dim-1 ? " " : "");
+ deallog << std::endl;
+
Assert ((scalar_values[q] - vector_values[q][c]).norm()
<= 1e-12 * scalar_values[q].norm(),
ExcInternalError());
DEAL::FE=FE_Nedelec<2>(1)
DEAL::component=0
-DEAL::1.03e-25 -17.8 -30.7 14.9
-DEAL::0.00 -17.8 -30.7 234.
-DEAL::0.00 321. 247. -363.
-DEAL::0.00 321. 247. 1.02e+03
+DEAL::0 -17.8 -30.7 14.9
+DEAL::0 -17.8 -30.7 234.
+DEAL::0 321. 247. -363.
+DEAL::0 321. 247. 1.02e+03
DEAL::component=1
DEAL::7.43 -154. -143. 177.
DEAL::7.43 219. 164. 370.
DEAL::406. 1.02e+03 1.17e+03 1.53e+03
DEAL::FE=FE_Nedelec<3>(1)
DEAL::component=0
-DEAL::0.00 -1.26e+03 -714. -1.26e+03 -32.6 -13.2 -714. -13.2 -32.6
-DEAL::0.00 -1.26e+03 -714. -1.26e+03 2.57e+03 1.10e+03 -714. 1.10e+03 2.02e+03
-DEAL::-7.62e-08 1.34e+03 -820. 1.34e+03 -32.6 13.2 -820. 13.2 -32.6
-DEAL::0.00 1.34e+03 -820. 1.34e+03 2.57e+03 -1.31e+03 -820. -1.31e+03 2.24e+03
-DEAL::0.00 -1.37e+03 1.34e+03 -1.37e+03 -32.6 13.2 1.34e+03 13.2 -32.6
-DEAL::0.00 -1.37e+03 1.34e+03 -1.37e+03 2.79e+03 -1.31e+03 1.34e+03 -1.31e+03 2.02e+03
-DEAL::8.30e-08 1.45e+03 1.45e+03 1.45e+03 -32.6 -13.2 1.45e+03 -13.2 -32.6
-DEAL::0.00 1.45e+03 1.45e+03 1.45e+03 2.79e+03 1.52e+03 1.45e+03 1.52e+03 2.24e+03
+DEAL::0 -1.26e+03 -714. -1.26e+03 -32.6 -13.2 -714. -13.2 -32.6
+DEAL::0 -1.26e+03 -714. -1.26e+03 2.57e+03 1.10e+03 -714. 1.10e+03 2.02e+03
+DEAL::0 1.34e+03 -820. 1.34e+03 -32.6 13.2 -820. 13.2 -32.6
+DEAL::0 1.34e+03 -820. 1.34e+03 2.57e+03 -1.31e+03 -820. -1.31e+03 2.24e+03
+DEAL::0 -1.37e+03 1.34e+03 -1.37e+03 -32.6 13.2 1.34e+03 13.2 -32.6
+DEAL::0 -1.37e+03 1.34e+03 -1.37e+03 2.79e+03 -1.31e+03 1.34e+03 -1.31e+03 2.02e+03
+DEAL::0 1.45e+03 1.45e+03 1.45e+03 -32.6 -13.2 1.45e+03 -13.2 -32.6
+DEAL::0 1.45e+03 1.45e+03 1.45e+03 2.79e+03 1.52e+03 1.45e+03 1.52e+03 2.24e+03
DEAL::component=1
-DEAL::-32.6 -1.33e+03 -13.2 -1.33e+03 -2.47e-14 -229. -13.2 -229. -32.6
-DEAL::-32.6 1.41e+03 13.2 1.41e+03 0.00 -335. 13.2 -335. -32.6
+DEAL::-32.6 -1.33e+03 -13.2 -1.33e+03 0 -229. -13.2 -229. -32.6
+DEAL::-32.6 1.41e+03 13.2 1.41e+03 0 -335. 13.2 -335. -32.6
DEAL::2.71e+03 -1.33e+03 1.15e+03 -1.33e+03 1.23e-07 -229. 1.15e+03 -229. 1.05e+03
-DEAL::2.71e+03 1.41e+03 -1.36e+03 1.41e+03 9.06e-08 -335. -1.36e+03 -335. 1.27e+03
-DEAL::-32.6 -1.44e+03 13.2 -1.44e+03 9.40e-15 857. 13.2 857. -32.6
-DEAL::-32.6 1.51e+03 -13.2 1.51e+03 -9.30e-08 963. -13.2 963. -32.6
-DEAL::2.92e+03 -1.44e+03 -1.36e+03 -1.44e+03 8.09e-08 857. -1.36e+03 857. 1.05e+03
-DEAL::2.92e+03 1.51e+03 1.58e+03 1.51e+03 0.00 963. 1.58e+03 963. 1.27e+03
+DEAL::2.71e+03 1.41e+03 -1.36e+03 1.41e+03 0 -335. -1.36e+03 -335. 1.27e+03
+DEAL::-32.6 -1.44e+03 13.2 -1.44e+03 0 857. 13.2 857. -32.6
+DEAL::-32.6 1.51e+03 -13.2 1.51e+03 0 963. -13.2 963. -32.6
+DEAL::2.92e+03 -1.44e+03 -1.36e+03 -1.44e+03 0 857. -1.36e+03 857. 1.05e+03
+DEAL::2.92e+03 1.51e+03 1.58e+03 1.51e+03 0 963. 1.58e+03 963. 1.27e+03
DEAL::component=2
-DEAL::-32.6 -13.2 -845. -13.2 -32.6 -478. -845. -478. -1.94e-08
-DEAL::-32.6 13.2 922. 13.2 -32.6 -584. 922. -584. 4.75e-08
-DEAL::-32.6 13.2 -951. 13.2 -32.6 739. -951. 739. 8.09e-08
-DEAL::-32.6 -13.2 1.03e+03 -13.2 -32.6 845. 1.03e+03 845. -2.94e-08
-DEAL::1.73e+03 1.21e+03 -845. 1.21e+03 1.18e+03 -478. -845. -478. -5.70e-15
-DEAL::1.73e+03 -1.42e+03 922. -1.42e+03 1.40e+03 -584. 922. -584. 3.83e-14
-DEAL::1.95e+03 -1.42e+03 -951. -1.42e+03 1.18e+03 739. -951. 739. 1.33e-14
-DEAL::1.95e+03 1.63e+03 1.03e+03 1.63e+03 1.40e+03 845. 1.03e+03 845. 0.00
+DEAL::-32.6 -13.2 -845. -13.2 -32.6 -478. -845. -478. 0
+DEAL::-32.6 13.2 922. 13.2 -32.6 -584. 922. -584. 0
+DEAL::-32.6 13.2 -951. 13.2 -32.6 739. -951. 739. 0
+DEAL::-32.6 -13.2 1.03e+03 -13.2 -32.6 845. 1.03e+03 845. 0
+DEAL::1.73e+03 1.21e+03 -845. 1.21e+03 1.18e+03 -478. -845. -478. 0
+DEAL::1.73e+03 -1.42e+03 922. -1.42e+03 1.40e+03 -584. 922. -584. 0
+DEAL::1.95e+03 -1.42e+03 -951. -1.42e+03 1.18e+03 739. -951. 739. 0
+DEAL::1.95e+03 1.63e+03 1.03e+03 1.63e+03 1.40e+03 845. 1.03e+03 845. 0
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<2,dim> >(fe.n_components()));
fe_values.get_function_hessians (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
{
FEValuesExtractors::Scalar single_component (c);
fe_values[single_component].get_function_hessians (fe_function,
scalar_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
{
- deallog << scalar_values[q] << std::endl;
+ for (unsigned int d=0; d<dim; ++d)
+ for (unsigned int e=0; e<dim; ++e)
+ deallog << scalar_values[q][d][e] << (d<dim-1 || e<dim-1 ? " " : "");
+ deallog << std::endl;
+
Assert ((scalar_values[q] - vector_values[q][c]).norm()
<= 1e-12 * scalar_values[q].norm(),
ExcInternalError());
deallog.attach(logfile);
deallog.depth_console (0);
- deallog.threshold_double(1.e-7);
+ deallog.threshold_double(1.e-5);
test_hyper_sphere<2>();
test_hyper_sphere<3>();
DEAL::-949. 1.90e+03 1.76e+03 -1.73e+03
DEAL::-949. -1.73e+03 -1.39e+03 -877.
DEAL::component=1
-DEAL::2.33e-09 188. 147. -148.
-DEAL::-3.58e-10 188. 147. -204.
-DEAL::-7.59e-09 174. -23.5 33.7
-DEAL::5.84e-10 174. -23.5 -967.
+DEAL::0 188. 147. -148.
+DEAL::0 188. 147. -204.
+DEAL::0 174. -23.5 33.7
+DEAL::0 174. -23.5 -967.
DEAL::FE=FESystem<3>[FE_RaviartThomas<3>(1)]
DEAL::component=0
-DEAL::2.57e-07 -1.50e+03 -752. -1.50e+03 2.23e-07 1.24e+04 -752. 1.24e+04 1.11e-08
-DEAL::2.41e-07 1.50e+03 752. 1.50e+03 3.42e-07 1.32e+04 752. 1.32e+04 4.58e-07
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 -1.98e-07 1.24e+04 2.12e+04 1.24e+04 1.83e-06
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 -1.68e-07 1.32e+04 -1.94e+04 1.32e+04 -5.46e-07
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.24e+04 -752. 1.24e+04 2.25e-08
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 1.23e-06 1.32e+04 752. 1.32e+04 1.80e-13
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -5.09e-07 1.24e+04 2.12e+04 1.24e+04 -5.15e-07
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.10e-08 1.32e+04 -1.94e+04 1.32e+04 -5.46e-07
+DEAL::0 -1.50e+03 -752. -1.50e+03 0 1.24e+04 -752. 1.24e+04 0
+DEAL::0 1.50e+03 752. 1.50e+03 0 1.32e+04 752. 1.32e+04 0
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 0 1.24e+04 2.12e+04 1.24e+04 0
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 0 1.32e+04 -1.94e+04 1.32e+04 0
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 0 1.24e+04 -752. 1.24e+04 0
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 0 1.32e+04 752. 1.32e+04 0
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 0 1.24e+04 2.12e+04 1.24e+04 0
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 0 1.32e+04 -1.94e+04 1.32e+04 0
DEAL::component=1
-DEAL::-1.21e-07 -1.88e+03 1.27e+04 -1.88e+03 1.29e-06 -376. 1.27e+04 -376. 2.69e-07
-DEAL::-2.36e-07 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 1.84e-06
-DEAL::-1.05e-08 1.88e+03 1.36e+04 1.88e+03 1.03e-06 376. 1.36e+04 376. 4.46e-07
-DEAL::5.04e-08 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 -5.72e-07
-DEAL::-8.02e-09 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. -3.07e-07
-DEAL::-2.14e-08 1.48e+04 1.27e+04 1.48e+04 -2.71e+04 1.63e+04 1.27e+04 1.63e+04 4.27e-13
-DEAL::-9.39e-07 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. -5.04e-08
-DEAL::0.00 -1.30e+04 1.36e+04 -1.30e+04 -2.71e+04 -1.46e+04 1.36e+04 -1.46e+04 0.00
+DEAL::0 -1.88e+03 1.27e+04 -1.88e+03 0 -376. 1.27e+04 -376. 0
+DEAL::0 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 0
+DEAL::0 1.88e+03 1.36e+04 1.88e+03 0 376. 1.36e+04 376. 0
+DEAL::0 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 0
+DEAL::0 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. 0
+DEAL::0 1.48e+04 1.27e+04 1.48e+04 -2.71e+04 1.63e+04 1.27e+04 1.63e+04 0
+DEAL::0 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. 0
+DEAL::0 -1.30e+04 1.36e+04 -1.30e+04 -2.71e+04 -1.46e+04 1.36e+04 -1.46e+04 0
DEAL::component=2
-DEAL::-2.60e-08 1.31e+04 -1.50e+03 1.31e+04 -2.10e-09 -752. -1.50e+03 -752. -1.05e-06
-DEAL::1.26e-08 1.31e+04 -1.50e+03 1.31e+04 1.42e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::1.83e-06 1.31e+04 9.89e+03 1.31e+04 7.78e-08 -752. 9.89e+03 -752. 1.50e+03
-DEAL::-5.72e-07 1.31e+04 9.89e+03 1.31e+04 -2.03e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::-1.10e-07 1.40e+04 1.50e+03 1.40e+04 -7.57e-08 752. 1.50e+03 752. -1.34e-06
-DEAL::0.00 1.40e+04 1.50e+03 1.40e+04 1.20e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-8.49e-07 1.40e+04 -8.16e+03 1.40e+04 6.72e-08 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 1.40e+04 -8.16e+03 1.40e+04 3.17e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0 1.31e+04 -1.50e+03 1.31e+04 0 -752. -1.50e+03 -752. 0
+DEAL::0 1.31e+04 -1.50e+03 1.31e+04 0 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::0 1.31e+04 9.89e+03 1.31e+04 0 -752. 9.89e+03 -752. 1.50e+03
+DEAL::0 1.31e+04 9.89e+03 1.31e+04 0 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::0 1.40e+04 1.50e+03 1.40e+04 0 752. 1.50e+03 752. 0
+DEAL::0 1.40e+04 1.50e+03 1.40e+04 0 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
+DEAL::0 1.40e+04 -8.16e+03 1.40e+04 0 752. -8.16e+03 752. 1.50e+03
+DEAL::0 1.40e+04 -8.16e+03 1.40e+04 0 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<1,dim> >(fe.n_components()));
fe_values.get_function_gradients (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
// use a vector extractor if there
// are sufficiently many components
fe_values[vector_components].get_function_gradients (fe_function,
selected_vector_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
for (unsigned int d=0; d<dim; ++d)
{
- deallog << selected_vector_values[q][d] << std::endl;
+ for (unsigned int e=0; e<dim; ++e)
+ deallog << selected_vector_values[q][d][e] << (e<dim-1 ? " " : "");
+ deallog << std::endl;
Assert ((selected_vector_values[q][d] - vector_values[q][c+d]).norm()
<= 1e-12 * selected_vector_values[q][d].norm(),
ExcInternalError());
DEAL::125. -40.8
DEAL::component=2
DEAL::43.2 -31.7
-DEAL::0.00 5.84
+DEAL::0 5.84
DEAL::43.2 118.
-DEAL::0.00 5.84
+DEAL::0 5.84
DEAL::125. -61.1
-DEAL::0.00 9.52
+DEAL::0 9.52
DEAL::125. -40.8
-DEAL::0.00 9.52
+DEAL::0 9.52
DEAL::component=3
-DEAL::0.00 5.84
+DEAL::0 5.84
DEAL::5.84 -6.75
-DEAL::0.00 5.84
+DEAL::0 5.84
DEAL::5.84 6.75
-DEAL::0.00 9.52
+DEAL::0 9.52
DEAL::9.52 -11.0
-DEAL::0.00 9.52
+DEAL::0 9.52
DEAL::9.52 11.0
DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(0)]
DEAL::component=0
DEAL::2.37 4.73 9.46
-DEAL::-2.21e-12 -275. -138.
-DEAL::-275. -8.99e-13 -138.
+DEAL::0 -275. -138.
+DEAL::-275. 0 -138.
DEAL::2.37 4.73 9.46
-DEAL::2.77e-12 -275. -138.
+DEAL::0 -275. -138.
DEAL::-275. -459. 4.80e+03
DEAL::2.37 4.73 9.46
DEAL::-367. -275. 4.71e+03
-DEAL::-275. 1.41e-12 -138.
+DEAL::-275. 0 -138.
DEAL::2.37 4.73 9.46
DEAL::367. -275. 4.92e+03
DEAL::-275. 459. 5.02e+03
DEAL::-4.38e+03 4.79e+03 4.92e+03
DEAL::4.88e+03 -3.09e+03 5.02e+03
DEAL::component=1
-DEAL::-2.21e-12 -275. -138.
-DEAL::-275. -8.99e-13 -138.
-DEAL::-275. -138. 1.36e-12
-DEAL::2.77e-12 -275. -138.
+DEAL::0 -275. -138.
+DEAL::-275. 0 -138.
+DEAL::-275. -138. 0
+DEAL::0 -275. -138.
DEAL::-275. -459. 4.80e+03
DEAL::-275. 4.90e+03 -367.
DEAL::-367. -275. 4.71e+03
-DEAL::-275. 1.41e-12 -138.
+DEAL::-275. 0 -138.
DEAL::4.76e+03 -138. -184.
DEAL::367. -275. 4.92e+03
DEAL::-275. 459. 5.02e+03
DEAL::4.76e+03 4.90e+03 2.23e+03
DEAL::-184. 4.57e+03 -138.
DEAL::4.67e+03 -91.8 -138.
-DEAL::-275. -138. -1.36e-12
+DEAL::-275. -138. 0
DEAL::184. 4.79e+03 -138.
DEAL::4.67e+03 3.52e+03 4.80e+03
DEAL::-275. 5.11e+03 367.
DEAL::4.88e+03 -3.09e+03 5.02e+03
DEAL::4.97e+03 5.11e+03 -1.81e+03
DEAL::component=2
-DEAL::-275. -8.99e-13 -138.
-DEAL::-275. -138. 1.36e-12
-DEAL::0.00 5.60 22.4
+DEAL::-275. 0 -138.
+DEAL::-275. -138. 0
+DEAL::0 5.60 22.4
DEAL::-275. -459. 4.80e+03
DEAL::-275. 4.90e+03 -367.
-DEAL::0.00 5.60 22.4
-DEAL::-275. 1.41e-12 -138.
+DEAL::0 5.60 22.4
+DEAL::-275. 0 -138.
DEAL::4.76e+03 -138. -184.
-DEAL::0.00 5.60 22.4
+DEAL::0 5.60 22.4
DEAL::-275. 459. 5.02e+03
DEAL::4.76e+03 4.90e+03 2.23e+03
-DEAL::0.00 5.60 22.4
+DEAL::0 5.60 22.4
DEAL::4.67e+03 -91.8 -138.
-DEAL::-275. -138. -1.36e-12
-DEAL::0.00 5.60 22.4
+DEAL::-275. -138. 0
+DEAL::0 5.60 22.4
DEAL::4.67e+03 3.52e+03 4.80e+03
DEAL::-275. 5.11e+03 367.
-DEAL::0.00 5.60 22.4
+DEAL::0 5.60 22.4
DEAL::4.88e+03 91.8 -138.
DEAL::4.97e+03 -138. 184.
-DEAL::0.00 5.60 22.4
+DEAL::0 5.60 22.4
DEAL::4.88e+03 -3.09e+03 5.02e+03
DEAL::4.97e+03 5.11e+03 -1.81e+03
-DEAL::0.00 5.60 22.4
+DEAL::0 5.60 22.4
DEAL::component=3
-DEAL::-275. -138. 1.36e-12
-DEAL::0.00 5.60 22.4
-DEAL::5.60 -1.84e-16 22.4
+DEAL::-275. -138. 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::-275. 4.90e+03 -367.
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::4.76e+03 -138. -184.
-DEAL::0.00 5.60 22.4
-DEAL::5.60 -1.84e-16 22.4
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::4.76e+03 4.90e+03 2.23e+03
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
-DEAL::-275. -138. -1.36e-12
-DEAL::0.00 5.60 22.4
-DEAL::5.60 7.35e-16 22.4
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::-275. -138. 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::-275. 5.11e+03 367.
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::4.97e+03 -138. 184.
-DEAL::0.00 5.60 22.4
-DEAL::5.60 7.35e-16 22.4
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::4.97e+03 5.11e+03 -1.81e+03
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
DEAL::component=4
-DEAL::0.00 5.60 22.4
-DEAL::5.60 -1.84e-16 22.4
-DEAL::5.60 11.2 2.53e-16
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 11.2 1.01e-15
-DEAL::0.00 5.60 22.4
-DEAL::5.60 -1.84e-16 22.4
-DEAL::5.60 11.2 1.01e-15
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 11.2 0.00
-DEAL::0.00 5.60 22.4
-DEAL::5.60 7.35e-16 22.4
-DEAL::5.60 11.2 2.53e-16
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 11.2 1.01e-15
-DEAL::0.00 5.60 22.4
-DEAL::5.60 7.35e-16 22.4
-DEAL::5.60 11.2 1.01e-15
-DEAL::0.00 5.60 22.4
-DEAL::5.60 0.00 22.4
-DEAL::5.60 11.2 0.00
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
+DEAL::0 5.60 22.4
+DEAL::5.60 0 22.4
+DEAL::5.60 11.2 0
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<2,dim> >(fe.n_components()));
fe_values.get_function_hessians (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
// use a vector extractor if there
// are sufficiently many components
fe_values[vector_components].get_function_hessians (fe_function,
selected_vector_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
for (unsigned int d=0; d<dim; ++d)
{
- deallog << selected_vector_values[q][d] << std::endl;
+ for (unsigned int e=0; e<dim; ++e)
+ for (unsigned int f=0; f<dim; ++f)
+ deallog << selected_vector_values[q][d][e][f] << (e<dim-1 && f<dim-1 ? " " : "");
+ deallog << std::endl;
Assert ((selected_vector_values[q][d] - vector_values[q][c+d]).norm()
<= 1e-12 * selected_vector_values[q][d].norm(),
ExcInternalError());
deallog.attach(logfile);
deallog.depth_console (0);
- deallog.threshold_double(1.e-7);
+ deallog.threshold_double(1.e-5);
test_hyper_sphere<2>();
test_hyper_sphere<3>();
DEAL::FE=FESystem<2>[FE_Q<2>(1)-FE_RaviartThomas<2>(1)-FE_Nedelec<2>(0)]
DEAL::component=0
-DEAL::5.60e-11 1.30 1.30 -1.50
-DEAL::-50.8 877. 848. -953.
-DEAL::0.00 1.30 1.30 1.50
-DEAL::-50.8 -779. -889. -641.
-DEAL::0.00 3.45 3.45 -3.99
-DEAL::-1.43e+03 2.86e+03 2.65e+03 -2.63e+03
-DEAL::0.00 3.45 3.45 3.99
-DEAL::-1.43e+03 -2.60e+03 -2.12e+03 -1.44e+03
+DEAL::0 1.301.30-1.50
+DEAL::-50.8 877.848.-953.
+DEAL::0 1.301.301.50
+DEAL::-50.8 -779.-889.-641.
+DEAL::0 3.453.45-3.99
+DEAL::-1.43e+03 2.86e+032.65e+03-2.63e+03
+DEAL::0 3.453.453.99
+DEAL::-1.43e+03 -2.60e+03-2.12e+03-1.44e+03
DEAL::component=1
-DEAL::-50.8 877. 848. -953.
-DEAL::3.99e-09 278. 209. -236.
-DEAL::-50.8 -779. -889. -641.
-DEAL::-6.72e-10 278. 209. -247.
-DEAL::-1.43e+03 2.86e+03 2.65e+03 -2.63e+03
-DEAL::-1.25e-08 374. 46.3 -122.
-DEAL::-1.43e+03 -2.60e+03 -2.12e+03 -1.44e+03
-DEAL::8.76e-10 374. 46.3 -1.16e+03
+DEAL::-50.8 877.848.-953.
+DEAL::0 278.209.-236.
+DEAL::-50.8 -779.-889.-641.
+DEAL::0 278.209.-247.
+DEAL::-1.43e+03 2.86e+032.65e+03-2.63e+03
+DEAL::0 374.46.3-122.
+DEAL::-1.43e+03 -2.60e+03-2.12e+03-1.44e+03
+DEAL::0 374.46.3-1.16e+03
DEAL::component=2
-DEAL::3.99e-09 278. 209. -236.
-DEAL::0.00 0.00 2.69e-10 9.43
-DEAL::-6.72e-10 278. 209. -247.
-DEAL::0.00 0.00 8.06e-10 9.43
-DEAL::-1.25e-08 374. 46.3 -122.
-DEAL::0.00 0.00 -8.76e-10 25.0
-DEAL::8.76e-10 374. 46.3 -1.16e+03
-DEAL::0.00 0.00 8.76e-10 25.0
+DEAL::0 278.209.-236.
+DEAL::0 009.43
+DEAL::0 278.209.-247.
+DEAL::0 009.43
+DEAL::0 374.46.3-122.
+DEAL::0 0025.0
+DEAL::0 374.46.3-1.16e+03
+DEAL::0 0025.0
DEAL::component=3
-DEAL::0.00 0.00 2.69e-10 9.43
-DEAL::2.69e-10 9.43 18.9 -21.8
-DEAL::0.00 0.00 8.06e-10 9.43
-DEAL::8.06e-10 9.43 18.9 21.8
-DEAL::0.00 0.00 -8.76e-10 25.0
-DEAL::-8.76e-10 25.0 50.0 -57.8
-DEAL::0.00 0.00 8.76e-10 25.0
-DEAL::8.76e-10 25.0 50.0 57.8
+DEAL::0 009.43
+DEAL::0 9.4318.9-21.8
+DEAL::0 009.43
+DEAL::0 9.4318.921.8
+DEAL::0 0025.0
+DEAL::0 25.050.0-57.8
+DEAL::0 0025.0
+DEAL::0 25.050.057.8
DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(0)]
DEAL::component=0
-DEAL::0.00 9.85e-10 5.09e-10 1.54e-09 2.44e-26 5.91e-10 3.28e-10 4.60e-10 -2.17e-09
-DEAL::2.57e-07 -1.50e+03 -752. -1.50e+03 3.49e-07 1.99e+04 -752. 1.99e+04 5.31e-08
-DEAL::-2.06e-07 -1.88e+03 2.02e+04 -1.88e+03 1.75e-06 -376. 2.02e+04 -376. 4.37e-07
-DEAL::0.00 9.85e-10 1.74e-09 -1.38e-09 0.00 2.53e-09 -1.30e-09 5.58e-10 1.64e-09
-DEAL::-3.47e-07 1.50e+03 752. 1.50e+03 5.81e-07 2.07e+04 752. 2.07e+04 7.10e-07
-DEAL::-3.62e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 2.93e-06
-DEAL::4.27e-10 -1.18e-09 1.26e-09 2.89e-09 -8.21e-10 2.89e-09 -8.54e-10 -7.88e-10 1.64e-09
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 -4.08e-07 1.99e+04 2.12e+04 1.99e+04 2.96e-06
-DEAL::1.88e-08 1.88e+03 2.11e+04 1.88e+03 1.28e-06 376. 2.11e+04 376. 7.40e-07
-DEAL::0.00 -1.18e-09 -2.30e-10 -3.94e-10 -8.21e-10 -4.60e-10 -7.88e-10 -7.88e-10 -2.17e-09
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 -2.94e-07 2.07e+04 -1.94e+04 2.07e+04 -8.83e-07
-DEAL::5.04e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -9.08e-07
-DEAL::0.00 5.09e-10 -1.97e-10 1.97e-10 -1.94e-26 -1.38e-09 3.28e-10 4.60e-10 3.23e-27
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -6.29e-08 1.99e+04 -752. 1.99e+04 2.25e-08
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -5.17e-07
-DEAL::0.00 5.09e-10 -2.13e-10 -3.94e-10 1.08e-09 -3.94e-10 -1.63e-09 9.52e-10 -1.11e-26
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 2.06e-06 2.07e+04 752. 2.07e+04 3.03e-13
-DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
-DEAL::-5.42e-10 4.92e-11 5.42e-10 1.97e-10 -8.21e-10 -3.94e-10 -2.36e-09 -7.88e-10 -5.18e-26
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -8.04e-07 1.99e+04 2.12e+04 1.99e+04 -7.68e-07
-DEAL::-1.46e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -9.25e-08
-DEAL::0.00 4.92e-11 4.93e-11 -3.94e-10 0.00 -1.38e-09 -7.88e-10 -7.88e-10 0.00
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.10e-08 2.07e+04 -1.94e+04 2.07e+04 -8.83e-07
-DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
+DEAL::0 0 00 0 0000
+DEAL::0 -1.50e+03 -752.-1.50e+03 0 1.99e+04-752.1.99e+040
+DEAL::0 -1.88e+03 2.02e+04-1.88e+03 0 -376.2.02e+04-376.0
+DEAL::0 0 00 0 0000
+DEAL::0 1.50e+03 752.1.50e+03 0 2.07e+04752.2.07e+040
+DEAL::0 -1.88e+03 2.02e+04-1.88e+03 3.76e+03 1.63e+042.02e+041.63e+040
+DEAL::0 0 00 0 0000
+DEAL::3.01e+03 -1.50e+03 2.12e+04-1.50e+03 0 1.99e+042.12e+041.99e+040
+DEAL::0 1.88e+03 2.11e+041.88e+03 0 376.2.11e+04376.0
+DEAL::0 0 00 0 0000
+DEAL::3.01e+03 1.50e+03 -1.94e+041.50e+03 0 2.07e+04-1.94e+042.07e+040
+DEAL::0 1.88e+03 2.11e+041.88e+03 3.76e+03 -1.46e+042.11e+04-1.46e+040
+DEAL::0 0 00 0 0000
+DEAL::1.50e+03 2.04e+04 -752.2.04e+04 0 1.99e+04-752.1.99e+040
+DEAL::0 1.48e+04 2.02e+041.48e+04 752. -376.2.02e+04-376.0
+DEAL::0 0 00 0 0000
+DEAL::1.50e+03 -1.87e+04 752.-1.87e+04 0 2.07e+04752.2.07e+040
+DEAL::0 1.48e+04 2.02e+041.48e+04 -2.71e+04 1.63e+042.02e+041.63e+040
+DEAL::0 0 00 0 0000
+DEAL::-3.76e+04 2.04e+04 2.12e+042.04e+04 0 1.99e+042.12e+041.99e+040
+DEAL::0 -1.30e+04 2.11e+04-1.30e+04 752. 376.2.11e+04376.0
+DEAL::0 0 00 0 0000
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04-1.87e+04 0 2.07e+04-1.94e+042.07e+040
+DEAL::0 -1.30e+04 2.11e+04-1.30e+04 -2.71e+04 -1.46e+042.11e+04-1.46e+040
DEAL::component=1
-DEAL::2.57e-07 -1.50e+03 -752. -1.50e+03 3.49e-07 1.99e+04 -752. 1.99e+04 5.31e-08
-DEAL::-2.06e-07 -1.88e+03 2.02e+04 -1.88e+03 1.75e-06 -376. 2.02e+04 -376. 4.37e-07
-DEAL::5.81e-08 2.06e+04 -1.50e+03 2.06e+04 3.99e-08 -752. -1.50e+03 -752. -1.93e-06
-DEAL::-3.47e-07 1.50e+03 752. 1.50e+03 5.81e-07 2.07e+04 752. 2.07e+04 7.10e-07
-DEAL::-3.62e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 2.93e-06
-DEAL::-2.94e-08 2.06e+04 -1.50e+03 2.06e+04 2.26e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 -4.08e-07 1.99e+04 2.12e+04 1.99e+04 2.96e-06
-DEAL::1.88e-08 1.88e+03 2.11e+04 1.88e+03 1.28e-06 376. 2.11e+04 376. 7.40e-07
-DEAL::3.01e-06 2.06e+04 9.89e+03 2.06e+04 7.78e-08 -752. 9.89e+03 -752. 1.50e+03
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 -2.94e-07 2.07e+04 -1.94e+04 2.07e+04 -8.83e-07
-DEAL::5.04e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -9.08e-07
-DEAL::-9.50e-07 2.06e+04 9.89e+03 2.06e+04 -3.25e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -6.29e-08 1.99e+04 -752. 1.99e+04 2.25e-08
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -5.17e-07
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -1.18e-07 752. 1.50e+03 752. -2.35e-06
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 2.06e-06 2.07e+04 752. 2.07e+04 3.03e-13
-DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
-DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 1.87e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -8.04e-07 1.99e+04 2.12e+04 1.99e+04 -7.68e-07
-DEAL::-1.46e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -9.25e-08
-DEAL::-1.34e-06 2.15e+04 -8.16e+03 2.15e+04 1.09e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.10e-08 2.07e+04 -1.94e+04 2.07e+04 -8.83e-07
-DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 5.27e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0 -1.50e+03 -752.-1.50e+03 0 1.99e+04-752.1.99e+040
+DEAL::0 -1.88e+03 2.02e+04-1.88e+03 0 -376.2.02e+04-376.0
+DEAL::0 2.06e+04 -1.50e+032.06e+04 0 -752.-1.50e+03-752.0
+DEAL::0 1.50e+03 752.1.50e+03 0 2.07e+04752.2.07e+040
+DEAL::0 -1.88e+03 2.02e+04-1.88e+03 3.76e+03 1.63e+042.02e+041.63e+040
+DEAL::0 2.06e+04 -1.50e+032.06e+04 0 1.06e+04-1.50e+031.06e+043.01e+03
+DEAL::3.01e+03 -1.50e+03 2.12e+04-1.50e+03 0 1.99e+042.12e+041.99e+040
+DEAL::0 1.88e+03 2.11e+041.88e+03 0 376.2.11e+04376.0
+DEAL::0 2.06e+04 9.89e+032.06e+04 0 -752.9.89e+03-752.1.50e+03
+DEAL::3.01e+03 1.50e+03 -1.94e+041.50e+03 0 2.07e+04-1.94e+042.07e+040
+DEAL::0 1.88e+03 2.11e+041.88e+03 3.76e+03 -1.46e+042.11e+04-1.46e+040
+DEAL::0 2.06e+04 9.89e+032.06e+04 0 1.06e+049.89e+031.06e+04-1.65e+04
+DEAL::1.50e+03 2.04e+04 -752.2.04e+04 0 1.99e+04-752.1.99e+040
+DEAL::0 1.48e+04 2.02e+041.48e+04 752. -376.2.02e+04-376.0
+DEAL::0 2.15e+04 1.50e+032.15e+04 0 752.1.50e+03752.0
+DEAL::1.50e+03 -1.87e+04 752.-1.87e+04 0 2.07e+04752.2.07e+040
+DEAL::0 1.48e+04 2.02e+041.48e+04 -2.71e+04 1.63e+042.02e+041.63e+040
+DEAL::0 2.15e+04 1.50e+032.15e+04 0 -8.91e+031.50e+03-8.91e+033.01e+03
+DEAL::-3.76e+04 2.04e+04 2.12e+042.04e+04 0 1.99e+042.12e+041.99e+040
+DEAL::0 -1.30e+04 2.11e+04-1.30e+04 752. 376.2.11e+04376.0
+DEAL::0 2.15e+04 -8.16e+032.15e+04 0 752.-8.16e+03752.1.50e+03
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04-1.87e+04 0 2.07e+04-1.94e+042.07e+040
+DEAL::0 -1.30e+04 2.11e+04-1.30e+04 -2.71e+04 -1.46e+042.11e+04-1.46e+040
+DEAL::0 2.15e+04 -8.16e+032.15e+04 0 -8.91e+03-8.16e+03-8.91e+03-1.65e+04
DEAL::component=2
-DEAL::-2.06e-07 -1.88e+03 2.02e+04 -1.88e+03 1.75e-06 -376. 2.02e+04 -376. 4.37e-07
-DEAL::5.81e-08 2.06e+04 -1.50e+03 2.06e+04 3.99e-08 -752. -1.50e+03 -752. -1.93e-06
-DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
-DEAL::-3.62e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 2.93e-06
-DEAL::-2.94e-08 2.06e+04 -1.50e+03 2.06e+04 2.26e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
-DEAL::1.88e-08 1.88e+03 2.11e+04 1.88e+03 1.28e-06 376. 2.11e+04 376. 7.40e-07
-DEAL::3.01e-06 2.06e+04 9.89e+03 2.06e+04 7.78e-08 -752. 9.89e+03 -752. 1.50e+03
-DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
-DEAL::5.04e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -9.08e-07
-DEAL::-9.50e-07 2.06e+04 9.89e+03 2.06e+04 -3.25e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -5.17e-07
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -1.18e-07 752. 1.50e+03 752. -2.35e-06
-DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
-DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
-DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 1.87e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
-DEAL::-1.46e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -9.25e-08
-DEAL::-1.34e-06 2.15e+04 -8.16e+03 2.15e+04 1.09e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
-DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 5.27e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
+DEAL::0 -1.88e+03 2.02e+04-1.88e+03 0 -376.2.02e+04-376.0
+DEAL::0 2.06e+04 -1.50e+032.06e+04 0 -752.-1.50e+03-752.0
+DEAL::0 0 00 0 0000
+DEAL::0 -1.88e+03 2.02e+04-1.88e+03 3.76e+03 1.63e+042.02e+041.63e+040
+DEAL::0 2.06e+04 -1.50e+032.06e+04 0 1.06e+04-1.50e+031.06e+043.01e+03
+DEAL::0 0 00 0 0000
+DEAL::0 1.88e+03 2.11e+041.88e+03 0 376.2.11e+04376.0
+DEAL::0 2.06e+04 9.89e+032.06e+04 0 -752.9.89e+03-752.1.50e+03
+DEAL::0 0 00 0 0000
+DEAL::0 1.88e+03 2.11e+041.88e+03 3.76e+03 -1.46e+042.11e+04-1.46e+040
+DEAL::0 2.06e+04 9.89e+032.06e+04 0 1.06e+049.89e+031.06e+04-1.65e+04
+DEAL::0 0 00 0 0000
+DEAL::0 1.48e+04 2.02e+041.48e+04 752. -376.2.02e+04-376.0
+DEAL::0 2.15e+04 1.50e+032.15e+04 0 752.1.50e+03752.0
+DEAL::0 0 00 0 0000
+DEAL::0 1.48e+04 2.02e+041.48e+04 -2.71e+04 1.63e+042.02e+041.63e+040
+DEAL::0 2.15e+04 1.50e+032.15e+04 0 -8.91e+031.50e+03-8.91e+033.01e+03
+DEAL::0 0 00 0 0000
+DEAL::0 -1.30e+04 2.11e+04-1.30e+04 752. 376.2.11e+04376.0
+DEAL::0 2.15e+04 -8.16e+032.15e+04 0 752.-8.16e+03752.1.50e+03
+DEAL::0 0 00 0 0000
+DEAL::0 -1.30e+04 2.11e+04-1.30e+04 -2.71e+04 -1.46e+042.11e+04-1.46e+040
+DEAL::0 2.15e+04 -8.16e+032.15e+04 0 -8.91e+03-8.16e+03-8.91e+03-1.65e+04
+DEAL::0 0 00 0 0000
DEAL::component=3
-DEAL::5.81e-08 2.06e+04 -1.50e+03 2.06e+04 3.99e-08 -752. -1.50e+03 -752. -1.93e-06
-DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
-DEAL::2.35e-09 1.58e-09 2.20e-09 -1.20e-09 4.32e-26 -7.61e-10 1.14e-08 4.33e-25 4.35e-10
-DEAL::-2.94e-08 2.06e+04 -1.50e+03 2.06e+04 2.26e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
-DEAL::-1.31e-09 1.58e-09 6.15e-09 0.00 0.00 6.52e-10 -2.89e-09 0.00 1.58e-08
-DEAL::3.01e-06 2.06e+04 9.89e+03 2.06e+04 7.78e-08 -752. 9.89e+03 -752. 1.50e+03
-DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
-DEAL::4.98e-09 -2.89e-09 6.14e-09 -1.20e-09 -7.35e-26 -7.61e-10 1.82e-08 -1.05e-08 2.14e-08
-DEAL::-9.50e-07 2.06e+04 9.89e+03 2.06e+04 -3.25e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
-DEAL::0.00 -2.89e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -1.18e-07 752. 1.50e+03 752. -2.35e-06
-DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
-DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 9.45e-26 -8.70e-10 -1.81e-10 -6.81e-26 -5.69e-09
-DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 1.87e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
-DEAL::0.00 2.63e-09 -2.63e-10 0.00 0.00 0.00 2.36e-09 5.25e-09 1.25e-25
-DEAL::-1.34e-06 2.15e+04 -8.16e+03 2.15e+04 1.09e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
-DEAL::-4.52e-11 -1.31e-09 9.42e-10 1.74e-09 6.17e-26 -8.70e-10 -1.76e-09 -1.26e-08 -4.35e-10
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 5.27e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
-DEAL::0.00 0.00 -1.58e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
+DEAL::0 2.06e+04 -1.50e+032.06e+04 0 -752.-1.50e+03-752.0
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.06e+04 -1.50e+032.06e+04 0 1.06e+04-1.50e+031.06e+043.01e+03
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.06e+04 9.89e+032.06e+04 0 -752.9.89e+03-752.1.50e+03
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.06e+04 9.89e+032.06e+04 0 1.06e+049.89e+031.06e+04-1.65e+04
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.15e+04 1.50e+032.15e+04 0 752.1.50e+03752.0
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.15e+04 1.50e+032.15e+04 0 -8.91e+031.50e+03-8.91e+033.01e+03
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.15e+04 -8.16e+032.15e+04 0 752.-8.16e+03752.1.50e+03
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 2.15e+04 -8.16e+032.15e+04 0 -8.91e+03-8.16e+03-8.91e+03-1.65e+04
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
DEAL::component=4
-DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
-DEAL::2.35e-09 1.58e-09 2.20e-09 -1.20e-09 4.32e-26 -7.61e-10 1.14e-08 4.33e-25 4.35e-10
-DEAL::-1.63e-10 2.42e-09 2.38e-26 4.78e-09 -1.63e-10 1.76e-26 -7.07e-10 -4.89e-10 3.15e-26
-DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
-DEAL::-1.31e-09 1.58e-09 6.15e-09 0.00 0.00 6.52e-10 -2.89e-09 0.00 1.58e-08
-DEAL::-4.35e-10 2.58e-09 4.20e-09 -3.37e-09 -2.17e-10 7.88e-09 -3.70e-09 2.17e-10 6.90e-25
-DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
-DEAL::4.98e-09 -2.89e-09 6.14e-09 -1.20e-09 -7.35e-26 -7.61e-10 1.82e-08 -1.05e-08 2.14e-08
-DEAL::1.10e-09 -3.43e-09 3.94e-09 8.10e-09 -3.17e-09 8.41e-09 -2.17e-10 -5.98e-09 6.64e-25
-DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
-DEAL::0.00 -2.89e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
-DEAL::0.00 -2.89e-09 -1.31e-09 -5.25e-10 -2.63e-09 -2.63e-09 0.00 0.00 0.00
-DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
-DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 9.45e-26 -8.70e-10 -1.81e-10 -6.81e-26 -5.69e-09
-DEAL::-1.63e-10 1.11e-09 -2.51e-27 -4.71e-10 -1.63e-10 -2.63e-09 -7.07e-10 -4.89e-10 -5.96e-26
-DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
-DEAL::0.00 2.63e-09 -2.63e-10 0.00 0.00 0.00 2.36e-09 5.25e-09 1.25e-25
-DEAL::-4.35e-10 1.27e-09 1.00e-26 -7.43e-10 3.08e-10 -1.08e-26 -3.70e-09 2.17e-10 -5.71e-26
-DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
-DEAL::-4.52e-11 -1.31e-09 9.42e-10 1.74e-09 6.17e-26 -8.70e-10 -1.76e-09 -1.26e-08 -4.35e-10
-DEAL::-1.79e-09 -8.06e-10 1.31e-09 -2.41e-09 -3.17e-09 -7.87e-26 -2.17e-10 -5.98e-09 5.87e-26
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
-DEAL::0.00 0.00 -1.58e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
-DEAL::0.00 -2.63e-10 0.00 -5.25e-10 0.00 -2.63e-09 0.00 0.00 0.00
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
+DEAL::0 0 00 0 0000
//----------------------------------------------------------------------
// $Id$
-// Version: $Name$
+// Version: $Name$
//
-// Copyright (C) 2007, 2008, 2010 by the deal.II authors
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
Vector<double> fe_function(dof.n_dofs());
for (unsigned int i=0; i<dof.n_dofs(); ++i)
fe_function(i) = i+1;
-
+
const QGauss<dim> quadrature(2);
FEValues<dim> fe_values (fe, quadrature,
update_values | update_gradients | update_hessians);
std::vector<Tensor<1,dim> >(fe.n_components()));
fe_values.get_function_gradients (fe_function, vector_values);
-
+
for (unsigned int c=0; c<fe.n_components(); ++c)
// use a vector extractor if there
// are sufficiently many components
fe_values[vector_components].get_function_symmetric_gradients (fe_function,
selected_vector_values);
deallog << "component=" << c << std::endl;
-
+
for (unsigned int q=0; q<fe_values.n_quadrature_points; ++q)
{
- deallog << selected_vector_values[q] << std::endl;
+ for (unsigned int d=0; d<dim; ++d)
+ for (unsigned int e=0; e<dim; ++e)
+ deallog << selected_vector_values[q][d][e] << (d<dim-1 || e<dim-1 ? " " : "");
+ deallog << std::endl;
Tensor<2,dim> grad;
for (unsigned int d=0; d<dim; ++d)
grad[d] = vector_values[q][c+d];
-
+
Assert ((selected_vector_values[q] - symmetrize(grad)).norm()
<= 1e-12 * selected_vector_values[q].norm(),
ExcInternalError());
DEAL::125. -30.5 -30.5 9.52
DEAL::125. -20.4 -20.4 9.52
DEAL::component=3
-DEAL::0.00 5.84 5.84 -6.75
-DEAL::0.00 5.84 5.84 6.75
-DEAL::0.00 9.52 9.52 -11.0
-DEAL::0.00 9.52 9.52 11.0
+DEAL::0 5.84 5.84 -6.75
+DEAL::0 5.84 5.84 6.75
+DEAL::0 9.52 9.52 -11.0
+DEAL::0 9.52 9.52 11.0
DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(0)]
DEAL::component=0
DEAL::2.37 2.37 -133. 2.37 -275. -68.8 -133. -68.8 -138.
DEAL::2.37 2.40e+03 2.44e+03 2.40e+03 4.57e+03 2.40e+03 2.44e+03 2.40e+03 -138.
DEAL::2.37 -2.19e+03 2.44e+03 -2.19e+03 4.79e+03 916. 2.44e+03 916. 5.02e+03
DEAL::component=1
-DEAL::-2.21e-12 -275. -206. -275. -8.99e-13 -138. -206. -138. 1.36e-12
-DEAL::2.77e-12 -275. -206. -275. -459. 4.85e+03 -206. 4.85e+03 -367.
-DEAL::-367. -275. 4.73e+03 -275. 1.41e-12 -138. 4.73e+03 -138. -184.
+DEAL::0 -275. -206. -275. 0 -138. -206. -138. 0
+DEAL::0 -275. -206. -275. -459. 4.85e+03 -206. 4.85e+03 -367.
+DEAL::-367. -275. 4.73e+03 -275. 0 -138. 4.73e+03 -138. -184.
DEAL::367. -275. 4.84e+03 -275. 459. 4.96e+03 4.84e+03 4.96e+03 2.23e+03
-DEAL::-184. 4.62e+03 -206. 4.62e+03 -91.8 -138. -206. -138. -1.36e-12
+DEAL::-184. 4.62e+03 -206. 4.62e+03 -91.8 -138. -206. -138. 0
DEAL::184. 4.73e+03 -206. 4.73e+03 3.52e+03 4.96e+03 -206. 4.96e+03 367.
DEAL::4.80e+03 4.73e+03 4.84e+03 4.73e+03 91.8 -138. 4.84e+03 -138. 184.
DEAL::-4.38e+03 4.83e+03 4.95e+03 4.83e+03 -3.09e+03 5.06e+03 4.95e+03 5.06e+03 -1.81e+03
DEAL::4.97e+03 -68.8 94.6 -68.8 5.60 11.2 94.6 11.2 22.4
DEAL::4.97e+03 2.55e+03 -901. 2.55e+03 5.60 11.2 -901. 11.2 22.4
DEAL::component=4
-DEAL::0.00 5.60 14.0 5.60 -1.84e-16 16.8 14.0 16.8 2.53e-16
-DEAL::0.00 5.60 14.0 5.60 0.00 16.8 14.0 16.8 1.01e-15
-DEAL::0.00 5.60 14.0 5.60 -1.84e-16 16.8 14.0 16.8 1.01e-15
-DEAL::0.00 5.60 14.0 5.60 0.00 16.8 14.0 16.8 0.00
-DEAL::0.00 5.60 14.0 5.60 7.35e-16 16.8 14.0 16.8 2.53e-16
-DEAL::0.00 5.60 14.0 5.60 0.00 16.8 14.0 16.8 1.01e-15
-DEAL::0.00 5.60 14.0 5.60 7.35e-16 16.8 14.0 16.8 1.01e-15
-DEAL::0.00 5.60 14.0 5.60 0.00 16.8 14.0 16.8 0.00
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
+DEAL::0 5.60 14.0 5.60 0 16.8 14.0 16.8 0
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <vector>
#include <fstream>
#include <string>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/lac/block_sparsity_pattern.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <deal.II/grid/tria_accessor.h>
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
// We need a FESystem
#include <deal.II/fe/fe_system.h>
std::vector<bool> fixed_dofs (dof_handler.n_dofs());
- std::set<types::boundary_id_t> boundary_indicators;
+ std::set<types::boundary_id> boundary_indicators;
boundary_indicators.insert (0);
// get a list of those boundary DoFs which
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_dgq.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_dgq.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include "../tests.h"
#include <deal.II/numerics/operator.h>
#include <deal.II/numerics/newton.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/named_data.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
<< ", case=" << i
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
for (unsigned int j=0; j<=i; ++j)
boundary_ids.insert (j);
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
<< ", case=" << i
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
for (unsigned int j=0; j<=i; ++j)
boundary_ids.insert (j);
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
deallog << "FE=" << fe.get_name()
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
ConstraintMatrix cm;
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
deallog << "FE=" << fe.get_name()
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
ConstraintMatrix cm;
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
<< ", case=" << i
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
for (unsigned int j=0; j<=i; ++j)
boundary_ids.insert (j);
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/vectors.templates.h>
#include <fstream>
deallog << "FE=" << fe.get_name()
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (1);
boundary_ids.insert (3);
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
DoFHandler<dim> dof(tr);
dof.distribute_dofs(fe);
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
ConstraintMatrix cm;
// we used to get this crash:
//
// An error occurred in line <4646> of file </w/heister/deal-trunk/deal.II/include/deal.II/numerics/vectors.templates.h> in function
-// static void dealii::VectorTools::compute_no_normal_flux_constraints(const DH<dim, spacedim>&, unsigned int, const std::set<types::boundary_id_t>&, dealii::ConstraintMatrix&, const dealii::Mapping<dim, spacedim>&) [with int dim = 3, DH = dealii::DoFHandler, int spacedim = 3]
+// static void dealii::VectorTools::compute_no_normal_flux_constraints(const DH<dim, spacedim>&, unsigned int, const std::set<types::boundary_id>&, dealii::ConstraintMatrix&, const dealii::Mapping<dim, spacedim>&) [with int dim = 3, DH = dealii::DoFHandler, int spacedim = 3]
// The violated condition was:
// std::fabs (tangent.norm()-1) < 1e-12
// The name and call sequence of the exception was:
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
dofh.distribute_dofs (fe);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (0);
VectorTools::compute_no_normal_flux_constraints (dofh, 0, no_normal_flux_boundaries, cm, mapping);
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
template <int dim>
dofh.distribute_dofs (fe);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (1);
// no_normal_flux_boundaries.insert (2); // not required for the crash for now, please test with it later!
no_normal_flux_boundaries.insert (3);
#include <dofs/dof_handler.h>
#include <fe/fe_system.h>
#include <fe/mapping_q.h>
-#include <numerics/vectors.h>
+#include <numerics/vector_tools.h>
#include <numerics/data_out.h>
#include <base/exceptions.h>
#include <base/function.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/hp/fe_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
<< ", case=" << i
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
for (unsigned int j=0; j<=i; ++j)
boundary_ids.insert (j);
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
<< ", case=" << i
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
for (unsigned int j=0; j<=i; ++j)
boundary_ids.insert (j);
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
deallog << "FE=" << fe[0].get_name()
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
ConstraintMatrix cm;
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
deallog << "FE=" << fe[0].get_name()
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
boundary_ids.insert (0);
ConstraintMatrix cm;
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
<< ", case=" << i
<< std::endl;
- std::set<types::boundary_id_t> boundary_ids;
+ std::set<types::boundary_id> boundary_ids;
for (unsigned int j=0; j<=i; ++j)
boundary_ids.insert (j);
#include <deal.II/hp/dof_handler.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/dofs/dof_accessor.h>
#include <fstream>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/dofs/dof_accessor.h>
#include <fstream>
#include <deal.II/fe/fe_raviart_thomas.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
TestFunction<dim> f(degree-1);
std::map<unsigned int, double> boundary_constraints;
typename FunctionMap<dim>::type boundary_map;
- for (types::boundary_id_t i=0;i<255;++i)
+ for (types::boundary_id i=0;i<255;++i)
boundary_map[i] = &f;
VectorTools::project_boundary_values(mapping, dof, boundary_map, quadrature,
boundary_constraints);
#include <deal.II/grid/tria.h>
#include <deal.II/fe/fe_nedelec.h>
#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
std::ofstream logfile ("project_bv_curl_conf/output");
#include <deal.II/grid/tria.h>
#include <deal.II/fe/fe_raviart_thomas.h>
#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
std::ofstream logfile ("project_bv_div_conf/output");
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_abf.h>
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_dgp_monomial.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
GridGenerator::hyper_cube (tria);
tria.refine_global (2);
- std::vector<types::boundary_id_t>
+ std::vector<types::boundary_id>
boundary_ids = tria.get_boundary_indicators ();
for (unsigned int i=0; i<boundary_ids.size(); ++i)
tria.begin_active()->face(0)->set_boundary_indicator(2);
tria.begin_active()->face(1)->set_boundary_indicator(4);
- std::vector<types::boundary_id_t>
+ std::vector<types::boundary_id>
boundary_ids = tria.get_boundary_indicators ();
for (unsigned int i=0; i<boundary_ids.size(); ++i)
#include <deal.II/lac/petsc_vector.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/base/function.h>
#include <deal.II/lac/petsc_vector.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/base/function.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/solver_cg.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/fe/fe_tools.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/solution_transfer.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/base/function.h>
#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/solver_cg.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/solver_cg.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/solver_cg.h>
// @p{function} to hold on all parts of the
// boundary
typename FunctionMap<dim>::type boundary_functions;
- for (types::boundary_id_t c=0; c<255; ++c)
+ for (types::boundary_id c=0; c<255; ++c)
boundary_functions[c] = &function;
project_boundary_values (dof, boundary_functions, q_boundary,
boundary_values);
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/solver_cg.h>
//--------------------------------------------------------------------------
// fe_tools.cc,v 1.1 2003/11/28 15:03:26 guido Exp
-// Version:
+// Version:
//
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009 by the deal.II authors
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
template<int dim>
void test_embedding (const FiniteElement<dim>& fe)
-{
+{
const unsigned int n = fe.dofs_per_cell;
const unsigned int nc= GeometryInfo<dim>::max_children_per_cell;
-
+
std::vector<std::vector<FullMatrix<double> > > P;
P.resize(RefinementCase<dim>::isotropic_refinement);
FETools::compute_embedding_matrices(fe, P);
-
+
for (unsigned int i=0;i<nc;++i)
{
deallog << fe.get_name() << " embedding " << i << std::endl;
}
}
-
+
template<int dim>
void test_projection (const FiniteElement<dim>& fe1,
const FiniteElement<dim>& fe2,
{
out << fe1.get_name() << " -> "
<< fe2.get_name() << std::endl;
-
+
const unsigned int n1 = fe1.dofs_per_cell;
const unsigned int n2 = fe2.dofs_per_cell;
FullMatrix<double> P(n2,n1);
FETools::get_projection_matrix(fe1, fe2, P);
+ for (unsigned int i=0; i<P.m(); ++i)
+ for (unsigned int j=0; j<P.n(); ++j)
+ if (std::fabs (P(i,j)) < 1e-14)
+ P(i,j) = 0;
P.print_formatted(out, 3, false, 5);
}
-
+
template<int dim>
void test_projection (std::ostream& out)
{
test_embedding(p1);
test_embedding(p2);
test_embedding(p3);
-
+
test_projection(p1,p0, out);
test_projection(p0,p1, out);
test_projection(p2,p1, out);
deallog << ' ' << start[i][j];
deallog << std::endl;
}
-
+
}
void test_renumbering()
{
deallog.push("Renumber");
-
+
FE_Q<dim> q1(1);
FE_Q<dim> q3(3);
//Todo:[GK] Test Raviart-Thomas and Nedelec?
-
+
FESystem<dim> q1_3(q1,3);
test_renumbering(q1_3);
FESystem<dim> q3_3(q3,3);
deallog.attach(logfile);
deallog.depth_console(0);
deallog.threshold_double(1.e-10);
-
+
test_projection<1>(logfile);
test_projection<2>(logfile);
test_projection<3>(logfile);
-
+
test_renumbering<1>();
test_renumbering<2>();
test_renumbering<3>();
DEAL::~ ~ 0.2500 0.7395
DEAL::~ ~ ~ 0.1250
FE_DGP<1>(1) -> FE_DGP<1>(0)
-1.000 0.000
+1.000
FE_DGP<1>(0) -> FE_DGP<1>(1)
1.000
FE_DGP<1>(2) -> FE_DGP<1>(1)
-1.000 0.000
- 1.000 0.000
+1.000
+ 1.000
FE_DGP<1>(1) -> FE_DGP<1>(2)
-1.000 0.000
-0.000 1.000
+1.000
+ 1.000
FE_DGP<1>(2) -> FE_DGP<1>(0)
-1.000 0.000 0.000
+1.000
FE_DGP<1>(0) -> FE_DGP<1>(2)
1.000
-0.000
+
FE_DGP<1>(3) -> FE_DGP<1>(2)
-1.000 0.000
- 1.000 0.000
- 1.000 0.000
+1.000
+ 1.000
+ 1.000
FE_DGP<1>(2) -> FE_DGP<1>(3)
-1.000 0.000 0.000
-0.000 1.000 0.000
-0.000 0.000 1.000
- 0.000 0.000
+1.000
+ 1.000
+ 1.000
+
FE_DGP<1>(4) -> FE_DGP<1>(3)
-1.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000
- 0.000 0.000 1.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
FE_DGP<1>(3) -> FE_DGP<1>(4)
-1.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000
-0.000 0.000 1.000 0.000
-0.000 0.000 0.000 1.000
-0.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+
FE_DGQ<1>(1) -> FE_DGQ<1>(0)
0.500 0.500
FE_DGQ<1>(2) -> FE_DGQ<1>(0)
0.667 0.667 -0.333
-0.333 0.667 0.667
FE_DGQ<1>(1) -> FE_DGQ<1>(2)
-1.000 0.000
+1.000
0.500 0.500
1.000
FE_DGQ<1>(3) -> FE_DGQ<1>(2)
DEAL::~ ~ ~ ~ ~ ~ ~ ~ 0.1250 ~
DEAL::~ ~ ~ ~ ~ ~ ~ ~ ~ 0.1250
FE_DGP<2>(1) -> FE_DGP<2>(0)
-1.000 0.000 0.000
+1.000
FE_DGP<2>(0) -> FE_DGP<2>(1)
1.000
-0.000
+
FE_DGP<2>(2) -> FE_DGP<2>(1)
-1.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000
- 0.000 0.000 1.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
FE_DGP<2>(1) -> FE_DGP<2>(2)
-1.000 0.000 0.000
-0.000 1.000 0.000
-0.000 0.000 0.000
-0.000 0.000 1.000
-0.000 0.000 0.000
- 0.000 0.000
+1.000
+ 1.000
+
+ 1.000
+
+
FE_DGP<2>(2) -> FE_DGP<2>(0)
-1.000 0.000 0.000 0.000 0.000
+1.000
FE_DGP<2>(0) -> FE_DGP<2>(2)
1.000
-0.000
-0.000
-0.000
-0.000
+
+
+
+
FE_DGP<2>(3) -> FE_DGP<2>(2)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
FE_DGP<2>(2) -> FE_DGP<2>(3)
-1.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000
- 0.000 0.000 0.000 1.000 0.000
- 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000
-0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
FE_DGP<2>(4) -> FE_DGP<2>(3)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
FE_DGP<2>(3) -> FE_DGP<2>(4)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
FE_DGQ<2>(1) -> FE_DGQ<2>(0)
0.250 0.250 0.250 0.250
FE_DGQ<2>(2) -> FE_DGQ<2>(0)
-0.222 -0.222 0.111 0.444 0.444 -0.222 0.444 0.444 -0.222
0.111 -0.222 -0.222 -0.222 0.444 0.444 -0.222 0.444 0.444
FE_DGQ<2>(1) -> FE_DGQ<2>(2)
-1.000 0.000 0.000 0.000
-0.500 0.500 0.000
-0.000 1.000 0.000 0.000
-0.500 0.000 0.500 0.000
+1.000
+0.500 0.500
+ 1.000
+0.500 0.500
0.250 0.250 0.250 0.250
-0.000 0.500 0.000 0.500
-0.000 0.000 1.000 0.000
-0.000 0.000 0.500 0.500
-0.000 0.000 1.000
+ 0.500 0.500
+ 1.000
+ 0.500 0.500
+ 1.000
FE_DGQ<2>(3) -> FE_DGQ<2>(2)
0.601 0.523 -0.523 0.174 0.523 0.456 -0.456 0.152 -0.523 -0.456 0.456 -0.152 0.174 0.152 -0.152 0.051
-0.048 0.436 0.436 -0.048 -0.042 0.380 0.380 -0.042 0.042 -0.380 -0.380 0.042 -0.014 0.127 0.127 -0.014
DEAL::~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 0.1250 ~
DEAL::~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 0.1250
FE_DGP<3>(1) -> FE_DGP<3>(0)
-1.000 0.000 0.000 0.000
+1.000
FE_DGP<3>(0) -> FE_DGP<3>(1)
1.000
-0.000
-0.000
+
+
FE_DGP<3>(2) -> FE_DGP<3>(1)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
FE_DGP<3>(1) -> FE_DGP<3>(2)
-1.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000
-0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000
-0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000
-0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000
- 0.000 0.000 0.000
+1.000
+ 1.000
+
+ 1.000
+
+
+ 1.000
+
+
+
FE_DGP<3>(2) -> FE_DGP<3>(0)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+1.000
FE_DGP<3>(0) -> FE_DGP<3>(2)
1.000
-0.000
-0.000
-0.000
-0.000
-0.000
-0.000
-0.000
-0.000
+
+
+
+
+
+
+
+
FE_DGP<3>(3) -> FE_DGP<3>(2)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
FE_DGP<3>(2) -> FE_DGP<3>(3)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
+ 1.000
+
+
+
FE_DGP<3>(4) -> FE_DGP<3>(3)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
+ 1.000
FE_DGP<3>(3) -> FE_DGP<3>(4)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+1.000
+ 1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
+ 1.000
+ 1.000
+ 1.000
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
+ 1.000
+ 1.000
+
+ 1.000
+
+
+ 1.000
+
+
+
FE_DGQ<3>(1) -> FE_DGQ<3>(0)
0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
FE_DGQ<3>(2) -> FE_DGQ<3>(0)
0.074 0.074 -0.037 -0.148 -0.148 0.074 -0.148 -0.148 0.074 -0.148 -0.148 0.074 0.296 0.296 -0.148 0.296 0.296 -0.148 -0.148 -0.148 0.074 0.296 0.296 -0.148 0.296 0.296 -0.148
-0.037 0.074 0.074 0.074 -0.148 -0.148 0.074 -0.148 -0.148 0.074 -0.148 -0.148 -0.148 0.296 0.296 -0.148 0.296 0.296 0.074 -0.148 -0.148 -0.148 0.296 0.296 -0.148 0.296 0.296
FE_DGQ<3>(1) -> FE_DGQ<3>(2)
-1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.500 0.500 0.000 0.000 0.000 0.000 0.000 0.000
-0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
-0.500 0.000 0.500 0.000 0.000 0.000 0.000 0.000
-0.250 0.250 0.250 0.250 0.000 0.000 0.000 0.000
-0.000 0.500 0.000 0.500 0.000 0.000 0.000 0.000
-0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000
-0.000 0.000 0.500 0.500 0.000 0.000 0.000 0.000
-0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
-0.500 0.000 0.000 0.000 0.500 0.000 0.000 0.000
-0.250 0.250 0.000 0.000 0.250 0.250 0.000 0.000
-0.000 0.500 0.000 0.000 0.000 0.500 0.000 0.000
-0.250 0.000 0.250 0.000 0.250 0.000 0.250 0.000
+1.000
+0.500 0.500
+ 1.000
+0.500 0.500
+0.250 0.250 0.250 0.250
+ 0.500 0.500
+ 1.000
+ 0.500 0.500
+ 1.000
+0.500 0.500
+0.250 0.250 0.250 0.250
+ 0.500 0.500
+0.250 0.250 0.250 0.250
0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.000 0.250 0.000 0.250 0.000 0.250 0.000 0.250
-0.000 0.000 0.500 0.000 0.000 0.000 0.500 0.000
-0.000 0.000 0.250 0.250 0.000 0.000 0.250 0.250
-0.000 0.000 0.000 0.500 0.000 0.000 0.000 0.500
-0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.500 0.500 0.000
-0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000
-0.000 0.000 0.000 0.000 0.500 0.000 0.500 0.000
-0.000 0.000 0.000 0.000 0.250 0.250 0.250 0.250
-0.000 0.000 0.000 0.000 0.000 0.500 0.000 0.500
-0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
-0.000 0.000 0.000 0.000 0.000 0.000 0.500 0.500
-0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
+ 0.250 0.250 0.250 0.250
+ 0.500 0.500
+ 0.250 0.250 0.250 0.250
+ 0.500 0.500
+ 1.000
+ 0.500 0.500
+ 1.000
+ 0.500 0.500
+ 0.250 0.250 0.250 0.250
+ 0.500 0.500
+ 1.000
+ 0.500 0.500
+ 1.000
FE_DGQ<3>(3) -> FE_DGQ<3>(2)
0.465 0.405 -0.405 0.135 0.405 0.353 -0.353 0.118 -0.405 -0.353 0.353 -0.118 0.135 0.118 -0.118 0.039 0.405 0.353 -0.353 0.118 0.353 0.308 -0.308 0.103 -0.353 -0.308 0.308 -0.103 0.118 0.103 -0.103 0.034 -0.405 -0.353 0.353 -0.118 -0.353 -0.308 0.308 -0.103 0.353 0.308 -0.308 0.103 -0.118 -0.103 0.103 -0.034 0.135 0.118 -0.118 0.039 0.118 0.103 -0.103 0.034 -0.118 -0.103 0.103 -0.034 0.039 0.034 -0.034 0.011
-0.038 0.338 0.338 -0.038 -0.033 0.294 0.294 -0.033 0.033 -0.294 -0.294 0.033 -0.011 0.098 0.098 -0.011 -0.033 0.294 0.294 -0.033 -0.028 0.256 0.256 -0.028 0.028 -0.256 -0.256 0.028 -0.009 0.085 0.085 -0.009 0.033 -0.294 -0.294 0.033 0.028 -0.256 -0.256 0.028 -0.028 0.256 0.256 -0.028 0.009 -0.085 -0.085 0.009 -0.011 0.098 0.098 -0.011 -0.009 0.085 0.085 -0.009 0.009 -0.085 -0.085 0.009 -0.003 0.028 0.028 -0.003
#include <deal.II/fe/mapping_q1.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/constraint_matrix.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
// This is needed for C++ output:
-// internals.cc,v 1.12 2003/04/09 15:49:55 wolf Exp
-// (c) Guido Kanschat
+//----------------------------------------------------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2007, 2008, 2010, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//----------------------------------------------------------------------
//
// Compute support points
dof.distribute_dofs (finel);
deallog << name << '<' << dim << '>' << " cell support points" << std::endl;
-
+
const std::vector<Point<dim> > &cell_points = finel.get_unit_support_points ();
for (unsigned int k=0;k<cell_points.size();++k)
deallog << std::setprecision(3) << cell_points[k] << std::endl;
-
+
const std::vector<Point<dim-1> > &face_points = finel.get_unit_face_support_points ();
const std::vector<double> dummy_weights (face_points.size());
-
+
Quadrature<dim-1> q(face_points, dummy_weights);
-
+
for (unsigned int i=0;i<GeometryInfo<dim>::faces_per_cell;++i)
{
std::vector<Point<dim> > q_points (q.get_points().size());
Quadrature<dim> qp(q_points);
deallog << name << '<' << dim << '>' << " face " << i
<< " support points" << std::endl;
-
+
for (unsigned int k=0; k<face_points.size(); ++k)
deallog << std::setprecision(3) << qp.point(k)
<< std::endl;
{
deallog << name << '<' << dim << '>' << " restriction " << i << std::endl;
if (fe.isotropic_restriction_is_implemented())
- print_formatted (fe.get_restriction_matrix(i), 3, 6);
+ print_formatted (fe.get_restriction_matrix(i), 6, 8);
deallog << name << '<' << dim << '>' << " embedding " << i << std::endl;
if (fe.isotropic_prolongation_is_implemented())
- print_formatted (fe.get_prolongation_matrix(i), 3, 6);
+ print_formatted (fe.get_prolongation_matrix(i), 6, 8);
}
}
CHECK_ALL(Nedelec, 0, 3);
CHECK_ALL(Nedelec, 1, 2);
CHECK_ALL(Nedelec, 1, 3);
-
+
CHECK_ALL(RaviartThomas, 0, 2);
CHECK_ALL(RaviartThomas, 0, 3);
CHECK_ALL(RaviartThomas, 1, 2);
CHECK_ALL(RaviartThomas, 1, 3);
-
+
CHECK_ALL(BDM, 1, 2);
CHECK_ALL(BDM, 2, 2);
-
+
CHECK_SYS1(FE_Q<2>(1),3,2);
CHECK_SYS1(FE_DGQ<2>(2),2,2);
// CHECK_SYS1(FE_DGP<2>(3),1,2);
CHECK_SYS3(FE_DGQ<2>(2),2,FE_DGQ<2>(2),2,FE_Q<2>(3),3,2);
// CHECK_SYS3(FE_DGP<2>(3),1,FE_DGP<2>(3),1,FE_Q<2>(2),3,2);
- // systems of systems
+ // systems of systems
CHECK_SYS3((FESystem<2>(FE_Q<2>(1),3)), 3,
FE_DGQ<2>(3), 1,
FE_Q<2>(1), 3,
FESystem<2>(FE_Q<2>(2),3,
FE_Nedelec<2>(1),2),2,
2);
-
+
return 0;
}
#include <deal.II/fe/fe_values.h>
#include <deal.II/fe/mapping.h>
#include <deal.II/fe/mapping_q1.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/fe/fe_dgq.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
// rt_8.cc,v 1.3 2003/06/09 16:00:38 wolf Exp
// Version:
//
-// Copyright (C) 2003, 2005, 2010 by the deal.II authors
+// Copyright (C) 2003, 2005, 2010, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
fe.JxW(q_point));
for (unsigned int i=0; i<dofs_per_cell; ++i)
for (unsigned int j=0; j<dofs_per_cell; ++j)
- if (std::fabs(mass_matrix(i,j)) < 1e-16)
+ if (std::fabs(mass_matrix(i,j)) < 1e-14)
mass_matrix(i,j) = 0;
mass_matrix.print_formatted (logfile, 3, false, 0, " ", 1);
0.196 -0.015 -0.145
-0.014 0.174 -0.129
-0.015 0.196 -0.145
--0.129 -0.129 1.195 0.000
- -0.129 -0.129 1.195 0.000
- -0.145 -0.145 0.000 1.345
- -0.145 -0.145 0.000 1.345
+-0.129 -0.129 1.195
+ -0.129 -0.129 1.195
+ -0.145 -0.145 1.345
+ -0.145 -0.145 1.345
DEAL:cg::Starting value 2.17323
DEAL:cg::Convergence step 6 value 0
DEAL::Degree=1: 6 iterations to obtain convergence.
0.167 0.023 -0.006 -0.001 -0.129 0.178 -0.018 0.025
- 0.187 -0.007 -0.145 0.200 0.000
+ 0.187 -0.007 -0.145 0.200
0.023 0.267 -0.001 -0.010 -0.018 0.025 -0.206 0.284
-0.006 -0.001 0.167 0.023 -0.129 -0.178 -0.018 -0.025
-0.007 0.187 -0.145 -0.200
--0.001 -0.010 0.023 0.267 -0.018 -0.025 0.000 0.000 -0.206 -0.284
+-0.001 -0.010 0.023 0.267 -0.018 -0.025 -0.206 -0.284
0.167 0.023 -0.006 -0.001 -0.129 -0.018 0.178 0.025
0.187 -0.007 -0.145 0.200
- 0.023 0.267 -0.001 -0.010 -0.018 0.000 -0.206 0.025 0.284
+ 0.023 0.267 -0.001 -0.010 -0.018 -0.206 0.025 0.284
-0.006 -0.001 0.167 0.023 -0.129 -0.018 -0.178 -0.025
-0.007 0.187 -0.145 -0.200
-0.001 -0.010 0.023 0.267 -0.018 -0.206 -0.025 -0.284
--0.129 -0.018 -0.129 -0.018 1.195 0.000 0.167
- -0.129 -0.018 -0.129 -0.018 1.195 0.167 0.000
-0.178 0.025 -0.178 -0.025 0.000 1.318 0.000 0.184
- -0.145 0.000 -0.145 1.345 0.000 0.000
- -0.145 -0.145 0.000 1.345 0.000
- -0.018 -0.206 -0.018 -0.206 0.167 0.000 1.914
- 0.200 -0.200 0.000 0.000 1.483 0.000 0.000
- 0.178 0.025 -0.178 -0.025 0.000 1.318 0.000 0.184
--0.018 0.000 -0.206 -0.018 -0.206 0.167 0.000 0.000 1.914 0.000
- 0.200 -0.200 0.000 1.483 0.000
-0.025 0.284 -0.025 -0.284 0.184 0.000 0.000 2.111
- 0.025 0.284 -0.025 -0.284 0.000 0.184 0.000 2.111
+-0.129 -0.018 -0.129 -0.018 1.195 0.167
+ -0.129 -0.018 -0.129 -0.018 1.195 0.167
+0.178 0.025 -0.178 -0.025 1.318 0.184
+ -0.145 -0.145 1.345
+ -0.145 -0.145 1.345
+ -0.018 -0.206 -0.018 -0.206 0.167 1.914
+ 0.200 -0.200 1.483
+ 0.178 0.025 -0.178 -0.025 1.318 0.184
+-0.018 -0.206 -0.018 -0.206 0.167 1.914
+ 0.200 -0.200 1.483
+0.025 0.284 -0.025 -0.284 0.184 2.111
+ 0.025 0.284 -0.025 -0.284 0.184 2.111
DEAL:cg::Starting value 2.69692
DEAL:cg::Convergence step 12 value 0
DEAL::Degree=2: 12 iterations to obtain convergence.
-0.168 0.000 0.024 0.000 -0.005 -0.001 -0.064 0.178 -0.118 0.000 -0.009 0.025 -0.017 0.000 0.000 0.000
-0.000 0.189 0.000 0.108 -0.005 -0.003 0.000 -0.072 0.200 -0.133 0.000 0.000 -0.041 0.114 -0.076
-0.024 0.000 0.269 0.000 -0.001 -0.008 -0.009 0.025 -0.017 0.000 0.000 -0.102 0.284 -0.189 0.000
-0.000 0.108 0.000 0.407 -0.003 -0.011 0.000 0.000 0.000 -0.041 0.114 -0.076 0.000 0.000 -0.155 0.430 -0.286
--0.005 -0.001 0.168 0.000 0.024 0.000 -0.064 -0.178 -0.118 0.000 -0.009 -0.025 -0.017 0.000 0.000 0.000
- -0.005 -0.003 0.000 0.189 0.000 0.108 0.000 -0.072 -0.200 -0.133 0.000 0.000 -0.041 -0.114 -0.076
--0.001 -0.008 0.024 0.000 0.269 0.000 -0.009 -0.025 -0.017 0.000 0.000 -0.102 -0.284 -0.189
- -0.003 -0.011 0.000 0.108 0.000 0.407 0.000 0.000 -0.041 -0.114 -0.076 0.000 0.000 -0.155 -0.430 -0.286
- 0.168 0.000 0.024 0.000 -0.005 -0.001 -0.064 -0.009 0.000 0.178 0.025 0.000 -0.118 0.000 -0.017 0.000
- 0.000 0.189 0.000 0.108 -0.005 -0.003 -0.072 0.000 -0.041 0.000 0.200 0.000 0.114 -0.133 0.000 -0.076
- 0.024 0.000 0.269 0.000 -0.001 -0.008 -0.009 -0.102 0.025 0.000 0.284 -0.017 0.000 -0.189
- 0.000 0.108 0.000 0.407 -0.003 -0.011 0.000 -0.041 -0.155 0.000 0.114 0.430 0.000 -0.076 0.000 -0.286
- -0.005 -0.001 0.168 0.024 0.000 -0.064 -0.009 0.000 -0.178 0.000 -0.025 0.000 -0.118 -0.017 0.000
- -0.005 -0.003 0.189 0.000 0.108 -0.072 -0.041 0.000 -0.200 0.000 -0.114 -0.133 0.000 -0.076
- -0.001 -0.008 0.024 0.000 0.269 0.000 -0.009 -0.102 -0.025 0.000 -0.284 0.000 -0.017 0.000 -0.189 0.000
- -0.003 -0.011 0.000 0.108 0.000 0.407 0.000 -0.041 -0.155 0.000 -0.114 -0.430 0.000 -0.076 0.000 -0.286
--0.064 -0.009 0.000 -0.064 -0.009 0.928 0.000 -0.069 0.000 0.130 -0.010 0.000 0.000 0.000
- -0.064 -0.009 0.000 -0.064 -0.009 0.000 0.928 0.000 0.130 0.000 0.000 0.000 0.000 0.000 -0.069 0.000 -0.010 0.000
-0.178 0.000 0.025 0.000 -0.178 0.000 -0.025 0.000 0.000 1.318 0.000 0.000 0.000 0.184 0.000 0.000
- -0.072 -0.041 -0.072 -0.041 0.000 1.045 0.000 0.598 0.000 0.000 0.000 0.000 -0.078 0.000 -0.045
--0.118 -0.017 0.000 -0.118 -0.017 0.000 -0.069 0.000 1.024 0.000 -0.010 0.143 0.000 0.000 0.000
- -0.009 0.000 -0.102 -0.009 -0.102 0.130 0.000 1.487 0.000 0.000 0.000 0.000 0.000 -0.010 0.000 -0.111 0.000
- -0.072 -0.041 -0.072 -0.041 0.000 1.045 0.000 -0.078 0.000 0.000 0.598 0.000 -0.045
- 0.000 -0.041 -0.155 0.000 -0.041 -0.155 0.000 0.598 0.000 2.247 0.000 0.000 0.000 0.000 0.000 -0.045 0.000 -0.168
-0.000 0.200 0.000 0.114 0.000 -0.200 0.000 -0.114 0.000 0.000 1.483 0.000 0.000 0.000 0.850 0.000
- 0.178 0.000 0.025 0.000 -0.178 0.000 -0.025 0.000 0.000 0.000 0.000 0.000 1.318 0.000 0.184 0.000 0.000 0.000 0.000
- -0.133 0.000 -0.076 -0.133 0.000 -0.076 0.000 -0.078 0.000 1.152 0.000 0.000 -0.045 0.000 0.660
- 0.200 0.000 0.114 0.000 -0.200 0.000 -0.114 0.000 0.000 0.000 0.000 0.000 1.483 0.000 0.850 0.000 0.000
--0.009 -0.102 -0.009 -0.102 0.130 0.000 -0.010 0.000 0.000 0.000 1.487 0.000 -0.111 0.000 0.000 0.000
- 0.025 0.000 0.284 -0.025 0.000 -0.284 0.000 0.000 0.000 0.000 0.184 0.000 2.111 0.000 0.000 0.000 0.000
-0.025 0.000 0.284 0.000 -0.025 0.000 -0.284 0.000 0.184 0.000 0.000 0.000 2.111 0.000 0.000 0.000 0.000
- 0.000 0.114 0.430 0.000 -0.114 0.000 -0.430 0.000 0.000 0.000 0.000 0.000 0.850 0.000 3.190 0.000 0.000 0.000
--0.017 0.000 -0.189 0.000 -0.017 0.000 -0.189 0.000 -0.010 0.143 0.000 -0.111 0.000 1.641 0.000 0.000
- -0.118 -0.017 0.000 -0.118 -0.017 0.000 -0.069 -0.010 0.000 0.000 0.000 1.024 0.000 0.143 0.000
-0.000 -0.041 -0.155 0.000 -0.041 -0.155 0.000 0.000 0.000 0.598 -0.045 0.000 0.000 0.000 2.247 0.000 -0.168
- 0.000 -0.133 0.000 -0.076 -0.133 0.000 -0.076 0.000 -0.078 0.000 -0.045 0.000 0.000 0.000 0.000 1.152 0.000 0.660
-0.000 0.114 0.000 0.430 0.000 -0.114 -0.430 0.000 0.000 0.000 0.000 0.850 0.000 0.000 0.000 0.000 3.190 0.000
- -0.017 0.000 -0.189 0.000 -0.017 0.000 -0.189 0.000 -0.010 0.000 -0.111 0.000 0.000 0.000 0.143 0.000 1.641 0.000
-0.000 -0.076 -0.286 0.000 -0.076 -0.286 0.000 0.000 -0.045 0.000 0.660 0.000 0.000 0.000 -0.168 0.000 2.479
- 0.000 -0.076 -0.286 0.000 -0.076 0.000 -0.286 0.000 -0.045 0.000 -0.168 0.000 0.000 0.000 0.000 0.000 0.660 0.000 2.479
+0.168 0.024 -0.005 -0.001 -0.064 0.178 -0.118 -0.009 0.025 -0.017
+ 0.189 0.108 -0.005 -0.003 -0.072 0.200 -0.133 -0.041 0.114 -0.076
+0.024 0.269 -0.001 -0.008 -0.009 0.025 -0.017 -0.102 0.284 -0.189
+ 0.108 0.407 -0.003 -0.011 -0.041 0.114 -0.076 -0.155 0.430 -0.286
+-0.005 -0.001 0.168 0.024 -0.064 -0.178 -0.118 -0.009 -0.025 -0.017
+ -0.005 -0.003 0.189 0.108 -0.072 -0.200 -0.133 -0.041 -0.114 -0.076
+-0.001 -0.008 0.024 0.269 -0.009 -0.025 -0.017 -0.102 -0.284 -0.189
+ -0.003 -0.011 0.108 0.407 -0.041 -0.114 -0.076 -0.155 -0.430 -0.286
+ 0.168 0.024 -0.005 -0.001 -0.064 -0.009 0.178 0.025 -0.118 -0.017
+ 0.189 0.108 -0.005 -0.003 -0.072 -0.041 0.200 0.114 -0.133 -0.076
+ 0.024 0.269 -0.001 -0.008 -0.009 -0.102 0.025 0.284 -0.017 -0.189
+ 0.108 0.407 -0.003 -0.011 -0.041 -0.155 0.114 0.430 -0.076 -0.286
+ -0.005 -0.001 0.168 0.024 -0.064 -0.009 -0.178 -0.025 -0.118 -0.017
+ -0.005 -0.003 0.189 0.108 -0.072 -0.041 -0.200 -0.114 -0.133 -0.076
+ -0.001 -0.008 0.024 0.269 -0.009 -0.102 -0.025 -0.284 -0.017 -0.189
+ -0.003 -0.011 0.108 0.407 -0.041 -0.155 -0.114 -0.430 -0.076 -0.286
+-0.064 -0.009 -0.064 -0.009 0.928 -0.069 0.130 -0.010
+ -0.064 -0.009 -0.064 -0.009 0.928 0.130 -0.069 -0.010
+0.178 0.025 -0.178 -0.025 1.318 0.184
+ -0.072 -0.041 -0.072 -0.041 1.045 0.598 -0.078 -0.045
+-0.118 -0.017 -0.118 -0.017 -0.069 1.024 -0.010 0.143
+ -0.009 -0.102 -0.009 -0.102 0.130 1.487 -0.010 -0.111
+ -0.072 -0.041 -0.072 -0.041 1.045 -0.078 0.598 -0.045
+ -0.041 -0.155 -0.041 -0.155 0.598 2.247 -0.045 -0.168
+ 0.200 0.114 -0.200 -0.114 1.483 0.850
+ 0.178 0.025 -0.178 -0.025 1.318 0.184
+ -0.133 -0.076 -0.133 -0.076 -0.078 1.152 -0.045 0.660
+ 0.200 0.114 -0.200 -0.114 1.483 0.850
+-0.009 -0.102 -0.009 -0.102 0.130 -0.010 1.487 -0.111
+ 0.025 0.284 -0.025 -0.284 0.184 2.111
+0.025 0.284 -0.025 -0.284 0.184 2.111
+ 0.114 0.430 -0.114 -0.430 0.850 3.190
+-0.017 -0.189 -0.017 -0.189 -0.010 0.143 -0.111 1.641
+ -0.118 -0.017 -0.118 -0.017 -0.069 -0.010 1.024 0.143
+ -0.041 -0.155 -0.041 -0.155 0.598 -0.045 2.247 -0.168
+ -0.133 -0.076 -0.133 -0.076 -0.078 -0.045 1.152 0.660
+ 0.114 0.430 -0.114 -0.430 0.850 3.190
+ -0.017 -0.189 -0.017 -0.189 -0.010 -0.111 0.143 1.641
+ -0.076 -0.286 -0.076 -0.286 -0.045 0.660 -0.168 2.479
+ -0.076 -0.286 -0.076 -0.286 -0.045 -0.168 0.660 2.479
DEAL:cg::Starting value 3.81366
DEAL:cg::Convergence step 21 value 0.00000
DEAL::Degree=3: 21 iterations to obtain convergence.
#include <deal.II/grid/grid_generator.h>
#include <deal.II/grid/grid_tools.h>
#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <vector>
#include <fstream>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/solver_cg.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/fe/mapping_q1_eulerian.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/vector.h>
#include <deal.II/base/function.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_abf.h>
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_dgp_monomial.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/mapping_collection.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/function.h>
#include <deal.II/base/quadrature_lib.h>
Vector<double> rhs_vector(hp_dof_handler.n_dofs());
Vector<double> rhs_vector2(hp_dof_handler2.n_dofs());
- types::boundary_id_t myints[1];
- std::set<types::boundary_id_t> boundary_indicators (myints,myints+1);
+ types::boundary_id myints[1];
+ std::set<types::boundary_id> boundary_indicators (myints,myints+1);
myints[0]=0;
hp::QCollection<1> quadrature;
quadrature.push_back (QGauss<1>(1));
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/dof_handler.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_abf.h>
#include <deal.II/fe/fe_dgp.h>
#include <deal.II/fe/fe_dgp_monomial.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/fe_collection.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/grid/tria_boundary_lib.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <fstream>
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/solution_transfer.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/compressed_sparsity_pattern.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/fe/mapping_q.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/compressed_set_sparsity_pattern.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/base/quadrature_lib.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/lac/vector.h>
#include <deal.II/lac/full_matrix.h>
#include <deal.II/lac/sparse_matrix.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/grid/grid_in.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <fstream>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/dofs/dof_renumbering.h>
#include <deal.II/base/smartpointer.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/convergence_table.h>
#include <deal.II/hp/fe_values.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/dofs/dof_tools.h>
#include <deal.II/hp/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/numerics/error_estimator.h>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/hp/q_collection.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
--- /dev/null
+//--------------------------------------------------------------------
+// $Id$
+//
+// Copyright (C) 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//--------------------------------------------------------------------
+
+// Test the functions in integrators/divergence.h
+// Output matrices and assert consistency of residuals
+
+#include "../tests.h"
+#include "../lib/test_grids.h"
+
+#include <deal.II/base/logstream.h>
+#include <deal.II/integrators/divergence.h>
+
+#include <deal.II/fe/fe_dgq.h>
+#include <deal.II/fe/fe_nedelec.h>
+#include <deal.II/fe/fe_raviart_thomas.h>
+#include <deal.II/fe/fe_system.h>
+
+using namespace LocalIntegrators::Divergence;
+
+template <int dim>
+void test_cell(const FEValuesBase<dim>& fev, const FEValuesBase<dim>& fes)
+{
+ AssertDimension(fev.get_fe().n_components(), dim);
+ AssertDimension(fes.get_fe().n_components(), 1);
+
+ const unsigned int nv = fev.dofs_per_cell;
+ const unsigned int ns = fes.dofs_per_cell;
+
+ FullMatrix<double> Md(ns,nv);
+ cell_matrix(Md,fev,fes);
+ Md.print(deallog,8);
+
+ deallog << "gradient_matrix" << std::endl;
+ FullMatrix<double> Mg(nv,ns);
+ gradient_matrix(Mg,fes,fev);
+ Mg.print(deallog,8);
+
+
+ Vector<double> u(nv), v(ns), w(ns);
+ std::vector<std::vector<Tensor<1,dim> > >
+ ugrad(dim,std::vector<Tensor<1,dim> >(fev.n_quadrature_points));
+
+ std::vector<unsigned int> indices(nv);
+ for (unsigned int i=0;i<nv;++i)
+ indices[i] = i;
+
+ deallog << "Divergence-Residuals";
+ for (unsigned int i=0;i<nv;++i)
+ {
+ u = 0.;
+ u(i) = 1.;
+ w = 0.;
+ fev.get_function_gradients(u, indices, ugrad, true);
+ cell_residual(w, fes, make_slice(ugrad));
+ Md.vmult(v,u);
+ w.add(-1., v);
+ deallog << ' ' << w.l2_norm();
+ }
+ deallog << std::endl;
+
+ v.reinit(nv);
+ indices.resize(ns);
+ for (unsigned int i=0;i<ns;++i)
+ indices[i] = i;
+
+ deallog << "Gradient-Residuals";
+ for (unsigned int i=0;i<ns;++i)
+ {
+ w = 0.;
+ w(i) = 1.;
+ u = 0.;
+ fes.get_function_gradients(w, indices, ugrad[0]);
+ gradient_residual(u, fev, ugrad[0]);
+ Mg.vmult(v,w);
+ u.add(-1., v);
+ deallog << ' ' << u.l2_norm();
+ }
+ deallog << std::endl;
+}
+
+
+template <int dim>
+void test_boundary(const FEValuesBase<dim>& fev, const FEValuesBase<dim>& fes)
+{
+ AssertDimension(fev.get_fe().n_components(), dim);
+ AssertDimension(fes.get_fe().n_components(), 1);
+
+ const unsigned int nv = fev.dofs_per_cell;
+ const unsigned int ns = fes.dofs_per_cell;
+
+ FullMatrix<double> M(ns,nv);
+ u_dot_n_matrix(M, fev, fes);
+ M.print(deallog,8);
+
+ Vector<double> u(nv), v(ns), w(ns);
+ std::vector<std::vector<double> >
+ uval (dim,std::vector<double>(fev.n_quadrature_points));
+
+ std::vector<unsigned int> indices(nv);
+ for (unsigned int i=0;i<nv;++i)
+ indices[i] = i;
+
+ deallog << "Residuals u dot n";
+ for (unsigned int i=0;i<nv;++i)
+ {
+ u = 0.;
+ u(i) = 1.;
+ w = 0.;
+ fev.get_function_values(u, indices, uval, true);
+ u_dot_n_residual(w, fev, fes, make_slice(uval));
+ M.vmult(v,u);
+ w.add(-1., v);
+ deallog << ' ' << w.l2_norm();
+ }
+ deallog << std::endl;
+}
+
+
+template <int dim>
+void test_face(const FEValuesBase<dim>& fev1,
+ const FEValuesBase<dim>& fev2,
+ const FEValuesBase<dim>& fes1,
+ const FEValuesBase<dim>& fes2)
+{
+ AssertDimension(fev1.get_fe().n_components(), dim);
+ AssertDimension(fes1.get_fe().n_components(), 1);
+ AssertDimension(fev2.get_fe().n_components(), dim);
+ AssertDimension(fes2.get_fe().n_components(), 1);
+
+ const unsigned int nv1 = fev1.dofs_per_cell;
+ const unsigned int nv2 = fev1.dofs_per_cell;
+ const unsigned int ns1 = fes1.dofs_per_cell;
+ const unsigned int ns2 = fes1.dofs_per_cell;
+
+ FullMatrix<double> M11(ns1,nv1);
+ FullMatrix<double> M12(ns1,nv2);
+ FullMatrix<double> M21(ns2,nv1);
+ FullMatrix<double> M22(ns2,nv2);
+
+ u_dot_n_matrix(M11, M12, M21, M22, fev1, fev2, fes1, fes2);
+ deallog << "M11" << std::endl;
+ M11.print(deallog,8);
+ deallog << "M22" << std::endl;
+ M22.print(deallog,8);
+ deallog << "M12" << std::endl;
+ M12.print(deallog,8);
+ deallog << "M21" << std::endl;
+ M21.print(deallog,8);
+
+ // Vector<double> u1(n1), v1(n1), w1(n1);
+ // Vector<double> u2(n2), v2(n2), w2(n2);
+ // std::vector<std::vector<double> >
+ // u1val (d,std::vector<double>(fev1.n_quadrature_points)),
+ // u2val (d,std::vector<double>(fev2.n_quadrature_points));
+ // std::vector<std::vector<Tensor<1,dim> > >
+ // u1grad(d,std::vector<Tensor<1,dim> >(fev1.n_quadrature_points)),
+ // u2grad(d,std::vector<Tensor<1,dim> >(fev2.n_quadrature_points));
+
+ // std::vector<unsigned int> indices1(n1), indices2(n2);
+ // for (unsigned int i=0;i<n1;++i) indices1[i] = i;
+ // for (unsigned int i=0;i<n2;++i) indices2[i] = i;
+
+ // deallog << "Residuals"; for (unsigned int i=0;i<n1;++i) indices1[i] = i;
+
+ // for (unsigned int i1=0;i1<n1;++i1)
+ // for (unsigned int i2=0;i2<n2;++i2)
+ // {
+ // u1 = 0.;
+ // u1(i1) = 1.;
+ // w1 = 0.;
+ // fev1.get_function_values(u1, indices1, u1val, true);
+ // fev1.get_function_gradients(u1, indices1, u1grad, true);
+ // u2 = 0.;
+ // u2(i2) = 1.;
+ // w2 = 0.;
+ // fev2.get_function_values(u2, indices2, u2val, true);
+ // fev2.get_function_gradients(u2, indices2, u2grad, true);
+ // ip_residual(w1, w2, fev1, fev2,
+ // make_slice(u1val), make_slice(u1grad),
+ // make_slice(u2val), make_slice(u2grad),
+ // 17);
+ // M11.vmult(v1,u1); w1.add(-1., v1);
+ // M12.vmult(v1,u2); w1.add(-1., v1);
+ // M21.vmult(v2,u1); w2.add(-1., v2);
+ // M22.vmult(v2,u2); w2.add(-1., v2);
+ // deallog << ' ' << w1.l2_norm() + w2.l2_norm();
+ // if (d==1)
+ // {
+ // ip_residual(w1, w2, fev1, fev2, u1val[0], u1grad[0], u2val[0], u2grad[0], 17);
+ // M11.vmult(v1,u1); w1.add(-1., v1);
+ // M12.vmult(v1,u2); w1.add(-1., v1);
+ // M21.vmult(v2,u1); w2.add(-1., v2);
+ // M22.vmult(v2,u2); w2.add(-1., v2);
+ // deallog << " e" << w1.l2_norm() + w2.l2_norm();
+ // }
+ // }
+ // deallog << std::endl;
+}
+
+
+template <int dim>
+void
+test_fe(Triangulation<dim>& tr, FiniteElement<dim>& fv, FiniteElement<dim>& fs)
+{
+ deallog << fv.get_name() << " x " << fs.get_name() << std::endl << "cell matrix" << std::endl;
+ QGauss<dim> quadrature(fv.tensor_degree()+1);
+ FEValues<dim> fev(fv, quadrature, update_values | update_gradients);
+ FEValues<dim> fes(fs, quadrature, update_values | update_gradients);
+
+ typename Triangulation<dim>::cell_iterator cell1 = tr.begin(1);
+ fev.reinit(cell1);
+ fes.reinit(cell1);
+ test_cell(fev, fes);
+
+ QGauss<dim-1> face_quadrature(fv.tensor_degree()+1);
+ FEFaceValues<dim> fev1(fv, face_quadrature, update_values | update_gradients | update_normal_vectors);
+ FEFaceValues<dim> fes1(fs, face_quadrature, update_values | update_gradients | update_normal_vectors);
+ for (unsigned int i=0;i<GeometryInfo<dim>::faces_per_cell;++i)
+ {
+ deallog << "boundary_matrix " << i << std::endl;
+ fev1.reinit(cell1, i);
+ fes1.reinit(cell1, i);
+ test_boundary(fev1, fes1);
+ }
+
+ FEFaceValues<dim> fev2(fv, face_quadrature, update_values | update_gradients);
+ FEFaceValues<dim> fes2(fs, face_quadrature, update_values | update_gradients);
+ typename Triangulation<dim>::cell_iterator cell2 = cell1->neighbor(1);
+
+ deallog << "face_matrix " << 0 << std::endl;
+ cell1 = tr.begin(1);
+ fev1.reinit(cell1, 1);
+ fev2.reinit(cell2, 0);
+ fes1.reinit(cell1, 1);
+ fes2.reinit(cell2, 0);
+ test_face(fev1, fev2, fes1, fes2);
+}
+
+
+template <int dim>
+void
+test(Triangulation<dim>& tr)
+{
+ FE_DGQ<dim> q1(1);
+ FE_Nedelec<dim> n1(1);
+ FE_RaviartThomas<dim> r1(1);
+ FESystem<dim> s1(q1,dim);
+
+ test_fe(tr, r1, q1);
+ test_fe(tr, n1, q1);
+ test_fe(tr, s1, q1);
+
+}
+
+
+int main()
+{
+ const std::string logname = JobIdentifier::base_name(__FILE__) + std::string("/output");
+ std::ofstream logfile(logname.c_str());
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ Triangulation<2> tr2;
+ TestGrids::hypercube(tr2, 1);
+ test(tr2);
+
+// Triangulation<3> tr3;
+// TestGrids::hypercube(tr3, 1);
+// test(tr3);
+
+}
--- /dev/null
+
+DEAL::Triangulation hypercube 2D refinement 1 steps 4 active cells 5 total cells
+DEAL::FE_RaviartThomas<2>(1) x FE_DGQ<2>(1)
+DEAL::cell matrix
+DEAL::-0.50 0.29 0 0 -0.50 0.29 0 0 0.50 0.50 -0.29 -0.29
+DEAL::0 0 0.50 -0.29 -0.50 -0.29 0 0 -0.50 0.50 0.29 0.29
+DEAL::-0.50 -0.29 0 0 0 0 0.50 -0.29 0.50 -0.50 0.29 0.29
+DEAL::0 0 0.50 0.29 0 0 0.50 0.29 -0.50 -0.50 -0.29 -0.29
+DEAL::gradient_matrix
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::0 0 0 0
+DEAL::-0.50 0.50 -0.50 0.50
+DEAL::-0.50 -0.50 0.50 0.50
+DEAL::0.29 -0.29 -0.29 0.29
+DEAL::0.29 -0.29 -0.29 0.29
+DEAL::Divergence-Residuals 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Gradient-Residuals 0 0 0 0
+DEAL::boundary_matrix 0
+DEAL::-0.50 0.29 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.50 -0.29 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 1
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0.50 -0.29 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0.50 0.29 0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 2
+DEAL::0 0 0 0 -0.50 0.29 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.50 -0.29 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 3
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0.50 -0.29 0 0 0 0
+DEAL::0 0 0 0 0 0 0.50 0.29 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0.25 -0.14 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0.25 0.14 0 0 0 0 0 0 0 0
+DEAL::M22
+DEAL::-0.25 0.14 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.25 -0.14 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::M12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.25 0.14 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.25 -0.14 0 0 0 0 0 0 0 0 0 0
+DEAL::M21
+DEAL::0 0 0.25 -0.14 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0.25 0.14 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::FE_Nedelec<2>(1) x FE_DGQ<2>(1)
+DEAL::cell matrix
+DEAL::0 0.58 0 0.29 0 0.58 0 0.29 0 -0.25 0 -0.25
+DEAL::0 0.29 0 0.58 0 0.58 0 0.29 0 -0.25 0 -0.25
+DEAL::0 0.58 0 0.29 0 0.29 0 0.58 0 -0.25 0 -0.25
+DEAL::0 0.29 0 0.58 0 0.29 0 0.58 0 -0.25 0 -0.25
+DEAL::gradient_matrix
+DEAL::-0.33 -0.17 0.33 0.17
+DEAL::0 0 0 0
+DEAL::-0.17 -0.33 0.17 0.33
+DEAL::0 0 0 0
+DEAL::-0.33 0.33 -0.17 0.17
+DEAL::0 0 0 0
+DEAL::-0.17 0.17 -0.33 0.33
+DEAL::0 0 0 0
+DEAL::0.14 -0.14 0.14 -0.14
+DEAL::0 0 0 0
+DEAL::0.14 0.14 -0.14 -0.14
+DEAL::0 0 0 0
+DEAL::Divergence-Residuals 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Gradient-Residuals 0 0 0 0
+DEAL::boundary_matrix 0
+DEAL::0 0 0 0 -0.33 0.58 -0.17 0.29 0.14 -0.25 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.17 0.29 -0.33 0.58 0.14 -0.25 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 1
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.33 0.58 0.17 0.29 -0.14 -0.25 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.17 0.29 0.33 0.58 -0.14 -0.25 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 2
+DEAL::-0.33 0.58 -0.17 0.29 0 0 0 0 0 0 0.14 -0.25
+DEAL::-0.17 0.29 -0.33 0.58 0 0 0 0 0 0 0.14 -0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 3
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.33 0.58 0.17 0.29 0 0 0 0 0 0 -0.14 -0.25
+DEAL::0.17 0.29 0.33 0.58 0 0 0 0 0 0 -0.14 -0.25
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.17 0.29 0.083 0.14 -0.072 -0.12 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.083 0.14 0.17 0.29 -0.072 -0.12 0 0
+DEAL::M22
+DEAL::0 0 0 0 -0.17 0.29 -0.083 0.14 0.072 -0.12 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.083 0.14 -0.17 0.29 0.072 -0.12 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::M12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.17 0.29 -0.083 0.14 0.072 -0.12 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.083 0.14 -0.17 0.29 0.072 -0.12 0 0
+DEAL::M21
+DEAL::0 0 0 0 0.17 0.29 0.083 0.14 -0.072 -0.12 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.083 0.14 0.17 0.29 -0.072 -0.12 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::FESystem<2>[FE_DGQ<2>(1)^2] x FE_DGQ<2>(1)
+DEAL::cell matrix
+DEAL::-0.17 0.17 -0.083 0.083 -0.17 -0.083 0.17 0.083
+DEAL::-0.17 0.17 -0.083 0.083 -0.083 -0.17 0.083 0.17
+DEAL::-0.083 0.083 -0.17 0.17 -0.17 -0.083 0.17 0.083
+DEAL::-0.083 0.083 -0.17 0.17 -0.083 -0.17 0.083 0.17
+DEAL::gradient_matrix
+DEAL::-0.17 0.17 -0.083 0.083
+DEAL::-0.17 0.17 -0.083 0.083
+DEAL::-0.083 0.083 -0.17 0.17
+DEAL::-0.083 0.083 -0.17 0.17
+DEAL::-0.17 -0.083 0.17 0.083
+DEAL::-0.083 -0.17 0.083 0.17
+DEAL::-0.17 -0.083 0.17 0.083
+DEAL::-0.083 -0.17 0.083 0.17
+DEAL::Divergence-Residuals 0 0 0 0 0 0 0 0
+DEAL::Gradient-Residuals 0 0 0 0
+DEAL::boundary_matrix 0
+DEAL::-0.33 0 -0.17 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::-0.17 0 -0.33 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 1
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0.33 0 0.17 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0.17 0 0.33 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 2
+DEAL::0 0 0 0 -0.33 -0.17 0 0
+DEAL::0 0 0 0 -0.17 -0.33 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 3
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0.33 0.17
+DEAL::0 0 0 0 0 0 0.17 0.33
+DEAL::Residuals u dot n 0 0 0 0 0 0 0 0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0.17 0 0.083 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0.083 0 0.17 0 0 0 0
+DEAL::M22
+DEAL::-0.17 0 -0.083 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::-0.083 0 -0.17 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::M12
+DEAL::0 0 0 0 0 0 0 0
+DEAL::-0.17 0 -0.083 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::-0.083 0 -0.17 0 0 0 0 0
+DEAL::M21
+DEAL::0 0.17 0 0.083 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
+DEAL::0 0.083 0 0.17 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0
//--------------------------------------------------------------------
-// $Id: cochain_01.cc 25686 2012-07-04 14:18:43Z bangerth $
+// $Id$
//
// Copyright (C) 2012 by the deal.II authors
//
{
FE_DGQ<dim> q1(1);
test_fe(tr, q1);
+<<<<<<< HEAD
// FE_DGQ<dim> q2(2);
// test_fe(tr, q2);
FE_Nedelec<dim> n1(1);
test_fe(tr, n1);
+=======
+
+ FE_DGQ<dim> q2(2);
+ test_fe(tr, q2);
+
+ FE_Nedelec<dim> n1(1);
+ test_fe(tr, n1);
+>>>>>>> trunk
}
TestGrids::hypercube(tr2, 1);
test(tr2);
+<<<<<<< HEAD
// Triangulation<3> tr3;
// TestGrids::hypercube(tr3, 1);
// test(tr3);
+=======
+ Triangulation<3> tr3;
+ TestGrids::hypercube(tr3, 1);
+ test(tr3);
+>>>>>>> trunk
}
DEAL::-0.083 -2.7 -0.17 -5.3
DEAL::0 -0.083 0 -0.17
DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::FE_DGQ<2>(2)
+DEAL::cell matrix
+DEAL::0.62 -0.20 -0.033 -0.20 -0.36 0.11 -0.033 0.11 -0.022
+DEAL::-0.20 2.0 -0.20 -0.36 -1.1 -0.36 0.11 0 0.11
+DEAL::-0.033 -0.20 0.62 0.11 -0.36 -0.20 -0.022 0.11 -0.033
+DEAL::-0.20 -0.36 0.11 2.0 -1.1 0 -0.20 -0.36 0.11
+DEAL::-0.36 -1.1 -0.36 -1.1 5.7 -1.1 -0.36 -1.1 -0.36
+DEAL::0.11 -0.36 -0.20 0 -1.1 2.0 0.11 -0.36 -0.20
+DEAL::-0.033 0.11 -0.022 -0.20 -0.36 0.11 0.62 -0.20 -0.033
+DEAL::0.11 0 0.11 -0.36 -1.1 -0.36 -0.20 2.0 -0.20
+DEAL::-0.022 0.11 -0.033 0.11 -0.36 -0.20 -0.033 -0.20 0.62
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 0
+DEAL::3.7 0.53 -0.13 1.9 0.27 -0.067 -0.93 -0.13 0.033
+DEAL::0.53 0 0 0.27 0 0 -0.13 0 0
+DEAL::-0.13 0 0 -0.067 0 0 0.033 0 0
+DEAL::1.9 0.27 -0.067 15. 2.1 -0.53 1.9 0.27 -0.067
+DEAL::0.27 0 0 2.1 0 0 0.27 0 0
+DEAL::-0.067 0 0 -0.53 0 0 -0.067 0 0
+DEAL::-0.93 -0.13 0.033 1.9 0.27 -0.067 3.7 0.53 -0.13
+DEAL::-0.13 0 0 0.27 0 0 0.53 0 0
+DEAL::0.033 0 0 -0.067 0 0 -0.13 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 1
+DEAL::0 0 -0.13 0 0 -0.067 0 0 0.033
+DEAL::0 0 0.53 0 0 0.27 0 0 -0.13
+DEAL::-0.13 0.53 3.7 -0.067 0.27 1.9 0.033 -0.13 -0.93
+DEAL::0 0 -0.067 0 0 -0.53 0 0 -0.067
+DEAL::0 0 0.27 0 0 2.1 0 0 0.27
+DEAL::-0.067 0.27 1.9 -0.53 2.1 15. -0.067 0.27 1.9
+DEAL::0 0 0.033 0 0 -0.067 0 0 -0.13
+DEAL::0 0 -0.13 0 0 0.27 0 0 0.53
+DEAL::0.033 -0.13 -0.93 -0.067 0.27 1.9 -0.13 0.53 3.7
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 2
+DEAL::3.7 1.9 -0.93 0.53 0.27 -0.13 -0.13 -0.067 0.033
+DEAL::1.9 15. 1.9 0.27 2.1 0.27 -0.067 -0.53 -0.067
+DEAL::-0.93 1.9 3.7 -0.13 0.27 0.53 0.033 -0.067 -0.13
+DEAL::0.53 0.27 -0.13 0 0 0 0 0 0
+DEAL::0.27 2.1 0.27 0 0 0 0 0 0
+DEAL::-0.13 0.27 0.53 0 0 0 0 0 0
+DEAL::-0.13 -0.067 0.033 0 0 0 0 0 0
+DEAL::-0.067 -0.53 -0.067 0 0 0 0 0 0
+DEAL::0.033 -0.067 -0.13 0 0 0 0 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 3
+DEAL::0 0 0 0 0 0 -0.13 -0.067 0.033
+DEAL::0 0 0 0 0 0 -0.067 -0.53 -0.067
+DEAL::0 0 0 0 0 0 0.033 -0.067 -0.13
+DEAL::0 0 0 0 0 0 0.53 0.27 -0.13
+DEAL::0 0 0 0 0 0 0.27 2.1 0.27
+DEAL::0 0 0 0 0 0 -0.13 0.27 0.53
+DEAL::-0.13 -0.067 0.033 0.53 0.27 -0.13 3.7 1.9 -0.93
+DEAL::-0.067 -0.53 -0.067 0.27 2.1 0.27 1.9 15. 1.9
+DEAL::0.033 -0.067 -0.13 -0.13 0.27 0.53 -0.93 1.9 3.7
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0 -0.067 0 0 -0.033 0 0 0.017
+DEAL::0 0 0.27 0 0 0.13 0 0 -0.067
+DEAL::-0.067 0.27 1.9 -0.033 0.13 0.93 0.017 -0.067 -0.47
+DEAL::0 0 -0.033 0 0 -0.27 0 0 -0.033
+DEAL::0 0 0.13 0 0 1.1 0 0 0.13
+DEAL::-0.033 0.13 0.93 -0.27 1.1 7.5 -0.033 0.13 0.93
+DEAL::0 0 0.017 0 0 -0.033 0 0 -0.067
+DEAL::0 0 -0.067 0 0 0.13 0 0 0.27
+DEAL::0.017 -0.067 -0.47 -0.033 0.13 0.93 -0.067 0.27 1.9
+DEAL::M22
+DEAL::1.9 0.27 -0.067 0.93 0.13 -0.033 -0.47 -0.067 0.017
+DEAL::0.27 0 0 0.13 0 0 -0.067 0 0
+DEAL::-0.067 0 0 -0.033 0 0 0.017 0 0
+DEAL::0.93 0.13 -0.033 7.5 1.1 -0.27 0.93 0.13 -0.033
+DEAL::0.13 0 0 1.1 0 0 0.13 0 0
+DEAL::-0.033 0 0 -0.27 0 0 -0.033 0 0
+DEAL::-0.47 -0.067 0.017 0.93 0.13 -0.033 1.9 0.27 -0.067
+DEAL::-0.067 0 0 0.13 0 0 0.27 0 0
+DEAL::0.017 0 0 -0.033 0 0 -0.067 0 0
+DEAL::M12
+DEAL::0.067 0 0 0.033 0 0 -0.017 0 0
+DEAL::-0.27 0 0 -0.13 0 0 0.067 0 0
+DEAL::-1.9 -0.27 0.067 -0.93 -0.13 0.033 0.47 0.067 -0.017
+DEAL::0.033 0 0 0.27 0 0 0.033 0 0
+DEAL::-0.13 0 0 -1.1 0 0 -0.13 0 0
+DEAL::-0.93 -0.13 0.033 -7.5 -1.1 0.27 -0.93 -0.13 0.033
+DEAL::-0.017 0 0 0.033 0 0 0.067 0 0
+DEAL::0.067 0 0 -0.13 0 0 -0.27 0 0
+DEAL::0.47 0.067 -0.017 -0.93 -0.13 0.033 -1.9 -0.27 0.067
+DEAL::M21
+DEAL::0.067 -0.27 -1.9 0.033 -0.13 -0.93 -0.017 0.067 0.47
+DEAL::0 0 -0.27 0 0 -0.13 0 0 0.067
+DEAL::0 0 0.067 0 0 0.033 0 0 -0.017
+DEAL::0.033 -0.13 -0.93 0.27 -1.1 -7.5 0.033 -0.13 -0.93
+DEAL::0 0 -0.13 0 0 -1.1 0 0 -0.13
+DEAL::0 0 0.033 0 0 0.27 0 0 0.033
+DEAL::-0.017 0.067 0.47 0.033 -0.13 -0.93 0.067 -0.27 -1.9
+DEAL::0 0 0.067 0 0 -0.13 0 0 -0.27
+DEAL::0 0 -0.017 0 0 0.033 0 0 0.067
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
DEAL::FE_Nedelec<2>(1)
DEAL::cell matrix
DEAL::1.0 0 -1.0 0 0 0 0 0 0 0 0 0
DEAL::0 0 0.87 0 0 0 0 0 0 0 0 0
DEAL::0 0 0 0.87 0 0 0 0 0 0 0 0
DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Triangulation hypercube 3D refinement 1 steps 8 active cells 9 total cells
+DEAL::FE_DGQ<3>(1)
+DEAL::cell matrix
+DEAL::0.33 0 0 -0.083 0 -0.083 -0.083 -0.083
+DEAL::0 0.33 -0.083 0 -0.083 0 -0.083 -0.083
+DEAL::0 -0.083 0.33 0 -0.083 -0.083 0 -0.083
+DEAL::-0.083 0 0 0.33 -0.083 -0.083 -0.083 0
+DEAL::0 -0.083 -0.083 -0.083 0.33 0 0 -0.083
+DEAL::-0.083 0 -0.083 -0.083 0 0.33 -0.083 0
+DEAL::-0.083 -0.083 0 -0.083 0 -0.083 0.33 0
+DEAL::-0.083 -0.083 -0.083 0 -0.083 0 0 0.33
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 0
+DEAL::3.6 0.11 1.8 0.056 1.8 0.056 0.89 0.028
+DEAL::0.11 0 0.056 0 0.056 0 0.028 0
+DEAL::1.8 0.056 3.6 0.11 0.89 0.028 1.8 0.056
+DEAL::0.056 0 0.11 0 0.028 0 0.056 0
+DEAL::1.8 0.056 0.89 0.028 3.6 0.11 1.8 0.056
+DEAL::0.056 0 0.028 0 0.11 0 0.056 0
+DEAL::0.89 0.028 1.8 0.056 1.8 0.056 3.6 0.11
+DEAL::0.028 0 0.056 0 0.056 0 0.11 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 1
+DEAL::0 0.11 0 0.056 0 0.056 0 0.028
+DEAL::0.11 3.6 0.056 1.8 0.056 1.8 0.028 0.89
+DEAL::0 0.056 0 0.11 0 0.028 0 0.056
+DEAL::0.056 1.8 0.11 3.6 0.028 0.89 0.056 1.8
+DEAL::0 0.056 0 0.028 0 0.11 0 0.056
+DEAL::0.056 1.8 0.028 0.89 0.11 3.6 0.056 1.8
+DEAL::0 0.028 0 0.056 0 0.056 0 0.11
+DEAL::0.028 0.89 0.056 1.8 0.056 1.8 0.11 3.6
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 2
+DEAL::3.6 1.8 0.11 0.056 1.8 0.89 0.056 0.028
+DEAL::1.8 3.6 0.056 0.11 0.89 1.8 0.028 0.056
+DEAL::0.11 0.056 0 0 0.056 0.028 0 0
+DEAL::0.056 0.11 0 0 0.028 0.056 0 0
+DEAL::1.8 0.89 0.056 0.028 3.6 1.8 0.11 0.056
+DEAL::0.89 1.8 0.028 0.056 1.8 3.6 0.056 0.11
+DEAL::0.056 0.028 0 0 0.11 0.056 0 0
+DEAL::0.028 0.056 0 0 0.056 0.11 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 3
+DEAL::0 0 0.11 0.056 0 0 0.056 0.028
+DEAL::0 0 0.056 0.11 0 0 0.028 0.056
+DEAL::0.11 0.056 3.6 1.8 0.056 0.028 1.8 0.89
+DEAL::0.056 0.11 1.8 3.6 0.028 0.056 0.89 1.8
+DEAL::0 0 0.056 0.028 0 0 0.11 0.056
+DEAL::0 0 0.028 0.056 0 0 0.056 0.11
+DEAL::0.056 0.028 1.8 0.89 0.11 0.056 3.6 1.8
+DEAL::0.028 0.056 0.89 1.8 0.056 0.11 1.8 3.6
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 4
+DEAL::3.6 1.8 1.8 0.89 0.11 0.056 0.056 0.028
+DEAL::1.8 3.6 0.89 1.8 0.056 0.11 0.028 0.056
+DEAL::1.8 0.89 3.6 1.8 0.056 0.028 0.11 0.056
+DEAL::0.89 1.8 1.8 3.6 0.028 0.056 0.056 0.11
+DEAL::0.11 0.056 0.056 0.028 0 0 0 0
+DEAL::0.056 0.11 0.028 0.056 0 0 0 0
+DEAL::0.056 0.028 0.11 0.056 0 0 0 0
+DEAL::0.028 0.056 0.056 0.11 0 0 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 5
+DEAL::0 0 0 0 0.11 0.056 0.056 0.028
+DEAL::0 0 0 0 0.056 0.11 0.028 0.056
+DEAL::0 0 0 0 0.056 0.028 0.11 0.056
+DEAL::0 0 0 0 0.028 0.056 0.056 0.11
+DEAL::0.11 0.056 0.056 0.028 3.6 1.8 1.8 0.89
+DEAL::0.056 0.11 0.028 0.056 1.8 3.6 0.89 1.8
+DEAL::0.056 0.028 0.11 0.056 1.8 0.89 3.6 1.8
+DEAL::0.028 0.056 0.056 0.11 0.89 1.8 1.8 3.6
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0.056 0 0.028 0 0.028 0 0.014
+DEAL::0.056 1.8 0.028 0.89 0.028 0.89 0.014 0.44
+DEAL::0 0.028 0 0.056 0 0.014 0 0.028
+DEAL::0.028 0.89 0.056 1.8 0.014 0.44 0.028 0.89
+DEAL::0 0.028 0 0.014 0 0.056 0 0.028
+DEAL::0.028 0.89 0.014 0.44 0.056 1.8 0.028 0.89
+DEAL::0 0.014 0 0.028 0 0.028 0 0.056
+DEAL::0.014 0.44 0.028 0.89 0.028 0.89 0.056 1.8
+DEAL::M22
+DEAL::1.8 0.056 0.89 0.028 0.89 0.028 0.44 0.014
+DEAL::0.056 0 0.028 0 0.028 0 0.014 0
+DEAL::0.89 0.028 1.8 0.056 0.44 0.014 0.89 0.028
+DEAL::0.028 0 0.056 0 0.014 0 0.028 0
+DEAL::0.89 0.028 0.44 0.014 1.8 0.056 0.89 0.028
+DEAL::0.028 0 0.014 0 0.056 0 0.028 0
+DEAL::0.44 0.014 0.89 0.028 0.89 0.028 1.8 0.056
+DEAL::0.014 0 0.028 0 0.028 0 0.056 0
+DEAL::M12
+DEAL::-0.056 0 -0.028 0 -0.028 0 -0.014 0
+DEAL::-1.8 -0.056 -0.89 -0.028 -0.89 -0.028 -0.44 -0.014
+DEAL::-0.028 0 -0.056 0 -0.014 0 -0.028 0
+DEAL::-0.89 -0.028 -1.8 -0.056 -0.44 -0.014 -0.89 -0.028
+DEAL::-0.028 0 -0.014 0 -0.056 0 -0.028 0
+DEAL::-0.89 -0.028 -0.44 -0.014 -1.8 -0.056 -0.89 -0.028
+DEAL::-0.014 0 -0.028 0 -0.028 0 -0.056 0
+DEAL::-0.44 -0.014 -0.89 -0.028 -0.89 -0.028 -1.8 -0.056
+DEAL::M21
+DEAL::-0.056 -1.8 -0.028 -0.89 -0.028 -0.89 -0.014 -0.44
+DEAL::0 -0.056 0 -0.028 0 -0.028 0 -0.014
+DEAL::-0.028 -0.89 -0.056 -1.8 -0.014 -0.44 -0.028 -0.89
+DEAL::0 -0.028 0 -0.056 0 -0.014 0 -0.028
+DEAL::-0.028 -0.89 -0.014 -0.44 -0.056 -1.8 -0.028 -0.89
+DEAL::0 -0.028 0 -0.014 0 -0.056 0 -0.028
+DEAL::-0.014 -0.44 -0.028 -0.89 -0.028 -0.89 -0.056 -1.8
+DEAL::0 -0.014 0 -0.028 0 -0.028 0 -0.056
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::FE_DGQ<3>(2)
+DEAL::cell matrix
+DEAL::0.12 -0.0059 -0.015 -0.0059 -0.037 0.0096 -0.015 0.0096 -0.00037-0.0059 -0.037 0.0096 -0.037 -0.036 0.013 0.0096 0.013 -0.0044 -0.015 0.0096 -0.000370.0096 0.013 -0.0044 -0.00037-0.0044 0.0011
+DEAL::-0.0059 0.43 -0.0059 -0.037 -0.059 -0.037 0.0096 -0.041 0.0096 -0.037 -0.059 -0.037 -0.036 -0.17 -0.036 0.013 0.047 0.013 0.0096 -0.041 0.0096 0.013 0.047 0.013 -0.0044 -0.0059 -0.0044
+DEAL::-0.015 -0.0059 0.12 0.0096 -0.037 -0.0059 -0.000370.0096 -0.015 0.0096 -0.037 -0.0059 0.013 -0.036 -0.037 -0.0044 0.013 0.0096 -0.000370.0096 -0.015 -0.0044 0.013 0.0096 0.0011 -0.0044 -0.00037
+DEAL::-0.0059 -0.037 0.0096 0.43 -0.059 -0.041 -0.0059 -0.037 0.0096 -0.037 -0.036 0.013 -0.059 -0.17 0.047 -0.037 -0.036 0.013 0.0096 0.013 -0.0044 -0.041 0.047 -0.0059 0.0096 0.013 -0.0044
+DEAL::-0.037 -0.059 -0.037 -0.059 1.4 -0.059 -0.037 -0.059 -0.037 -0.036 -0.17 -0.036 -0.17 -0.38 -0.17 -0.036 -0.17 -0.036 0.013 0.047 0.013 0.047 -0.095 0.047 0.013 0.047 0.013
+DEAL::0.0096 -0.037 -0.0059 -0.041 -0.059 0.43 0.0096 -0.037 -0.0059 0.013 -0.036 -0.037 0.047 -0.17 -0.059 0.013 -0.036 -0.037 -0.0044 0.013 0.0096 -0.0059 0.047 -0.041 -0.0044 0.013 0.0096
+DEAL::-0.015 0.0096 -0.00037-0.0059 -0.037 0.0096 0.12 -0.0059 -0.015 0.0096 0.013 -0.0044 -0.037 -0.036 0.013 -0.0059 -0.037 0.0096 -0.00037-0.0044 0.0011 0.0096 0.013 -0.0044 -0.015 0.0096 -0.00037
+DEAL::0.0096 -0.041 0.0096 -0.037 -0.059 -0.037 -0.0059 0.43 -0.0059 0.013 0.047 0.013 -0.036 -0.17 -0.036 -0.037 -0.059 -0.037 -0.0044 -0.0059 -0.0044 0.013 0.047 0.013 0.0096 -0.041 0.0096
+DEAL::-0.000370.0096 -0.015 0.0096 -0.037 -0.0059 -0.015 -0.0059 0.12 -0.0044 0.013 0.0096 0.013 -0.036 -0.037 0.0096 -0.037 -0.0059 0.0011 -0.0044 -0.00037-0.0044 0.013 0.0096 -0.000370.0096 -0.015
+DEAL::-0.0059 -0.037 0.0096 -0.037 -0.036 0.013 0.0096 0.013 -0.0044 0.43 -0.059 -0.041 -0.059 -0.17 0.047 -0.041 0.047 -0.0059 -0.0059 -0.037 0.0096 -0.037 -0.036 0.013 0.0096 0.013 -0.0044
+DEAL::-0.037 -0.059 -0.037 -0.036 -0.17 -0.036 0.013 0.047 0.013 -0.059 1.4 -0.059 -0.17 -0.38 -0.17 0.047 -0.095 0.047 -0.037 -0.059 -0.037 -0.036 -0.17 -0.036 0.013 0.047 0.013
+DEAL::0.0096 -0.037 -0.0059 0.013 -0.036 -0.037 -0.0044 0.013 0.0096 -0.041 -0.059 0.43 0.047 -0.17 -0.059 -0.0059 0.047 -0.041 0.0096 -0.037 -0.0059 0.013 -0.036 -0.037 -0.0044 0.013 0.0096
+DEAL::-0.037 -0.036 0.013 -0.059 -0.17 0.047 -0.037 -0.036 0.013 -0.059 -0.17 0.047 1.4 -0.38 -0.095 -0.059 -0.17 0.047 -0.037 -0.036 0.013 -0.059 -0.17 0.047 -0.037 -0.036 0.013
+DEAL::-0.036 -0.17 -0.036 -0.17 -0.38 -0.17 -0.036 -0.17 -0.036 -0.17 -0.38 -0.17 -0.38 4.6 -0.38 -0.17 -0.38 -0.17 -0.036 -0.17 -0.036 -0.17 -0.38 -0.17 -0.036 -0.17 -0.036
+DEAL::0.013 -0.036 -0.037 0.047 -0.17 -0.059 0.013 -0.036 -0.037 0.047 -0.17 -0.059 -0.095 -0.38 1.4 0.047 -0.17 -0.059 0.013 -0.036 -0.037 0.047 -0.17 -0.059 0.013 -0.036 -0.037
+DEAL::0.0096 0.013 -0.0044 -0.037 -0.036 0.013 -0.0059 -0.037 0.0096 -0.041 0.047 -0.0059 -0.059 -0.17 0.047 0.43 -0.059 -0.041 0.0096 0.013 -0.0044 -0.037 -0.036 0.013 -0.0059 -0.037 0.0096
+DEAL::0.013 0.047 0.013 -0.036 -0.17 -0.036 -0.037 -0.059 -0.037 0.047 -0.095 0.047 -0.17 -0.38 -0.17 -0.059 1.4 -0.059 0.013 0.047 0.013 -0.036 -0.17 -0.036 -0.037 -0.059 -0.037
+DEAL::-0.0044 0.013 0.0096 0.013 -0.036 -0.037 0.0096 -0.037 -0.0059 -0.0059 0.047 -0.041 0.047 -0.17 -0.059 -0.041 -0.059 0.43 -0.0044 0.013 0.0096 0.013 -0.036 -0.037 0.0096 -0.037 -0.0059
+DEAL::-0.015 0.0096 -0.000370.0096 0.013 -0.0044 -0.00037-0.0044 0.0011 -0.0059 -0.037 0.0096 -0.037 -0.036 0.013 0.0096 0.013 -0.0044 0.12 -0.0059 -0.015 -0.0059 -0.037 0.0096 -0.015 0.0096 -0.00037
+DEAL::0.0096 -0.041 0.0096 0.013 0.047 0.013 -0.0044 -0.0059 -0.0044 -0.037 -0.059 -0.037 -0.036 -0.17 -0.036 0.013 0.047 0.013 -0.0059 0.43 -0.0059 -0.037 -0.059 -0.037 0.0096 -0.041 0.0096
+DEAL::-0.000370.0096 -0.015 -0.0044 0.013 0.0096 0.0011 -0.0044 -0.000370.0096 -0.037 -0.0059 0.013 -0.036 -0.037 -0.0044 0.013 0.0096 -0.015 -0.0059 0.12 0.0096 -0.037 -0.0059 -0.000370.0096 -0.015
+DEAL::0.0096 0.013 -0.0044 -0.041 0.047 -0.0059 0.0096 0.013 -0.0044 -0.037 -0.036 0.013 -0.059 -0.17 0.047 -0.037 -0.036 0.013 -0.0059 -0.037 0.0096 0.43 -0.059 -0.041 -0.0059 -0.037 0.0096
+DEAL::0.013 0.047 0.013 0.047 -0.095 0.047 0.013 0.047 0.013 -0.036 -0.17 -0.036 -0.17 -0.38 -0.17 -0.036 -0.17 -0.036 -0.037 -0.059 -0.037 -0.059 1.4 -0.059 -0.037 -0.059 -0.037
+DEAL::-0.0044 0.013 0.0096 -0.0059 0.047 -0.041 -0.0044 0.013 0.0096 0.013 -0.036 -0.037 0.047 -0.17 -0.059 0.013 -0.036 -0.037 0.0096 -0.037 -0.0059 -0.041 -0.059 0.43 0.0096 -0.037 -0.0059
+DEAL::-0.00037-0.0044 0.0011 0.0096 0.013 -0.0044 -0.015 0.0096 -0.000370.0096 0.013 -0.0044 -0.037 -0.036 0.013 -0.0059 -0.037 0.0096 -0.015 0.0096 -0.00037-0.0059 -0.037 0.0096 0.12 -0.0059 -0.015
+DEAL::-0.0044 -0.0059 -0.0044 0.013 0.047 0.013 0.0096 -0.041 0.0096 0.013 0.047 0.013 -0.036 -0.17 -0.036 -0.037 -0.059 -0.037 0.0096 -0.041 0.0096 -0.037 -0.059 -0.037 -0.0059 0.43 -0.0059
+DEAL::0.0011 -0.0044 -0.00037-0.0044 0.013 0.0096 -0.000370.0096 -0.015 -0.0044 0.013 0.0096 0.013 -0.036 -0.037 0.0096 -0.037 -0.0059 -0.000370.0096 -0.015 0.0096 -0.037 -0.0059 -0.015 -0.0059 0.12
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 0
+DEAL::0.50 0.071 -0.018 0.25 0.036 -0.0089 -0.12 -0.018 0.0044 0.25 0.036 -0.0089 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011
+DEAL::0.071 0 0 0.036 0 0 -0.018 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0
+DEAL::-0.018 0 0 -0.0089 0 0 0.0044 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0
+DEAL::0.25 0.036 -0.0089 2.0 0.28 -0.071 0.25 0.036 -0.0089 0.12 0.018 -0.0044 1.0 0.14 -0.036 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022
+DEAL::0.036 0 0 0.28 0 0 0.036 0 0 0.018 0 0 0.14 0 0 0.018 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0
+DEAL::-0.0089 0 0 -0.071 0 0 -0.0089 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 0.0022 0 0 0.018 0 0 0.0022 0 0
+DEAL::-0.12 -0.018 0.0044 0.25 0.036 -0.0089 0.50 0.071 -0.018 -0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.25 0.036 -0.0089 0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044
+DEAL::-0.018 0 0 0.036 0 0 0.071 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0
+DEAL::0.0044 0 0 -0.0089 0 0 -0.018 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0
+DEAL::0.25 0.036 -0.0089 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022 2.0 0.28 -0.071 1.0 0.14 -0.036 -0.50 -0.071 0.018 0.25 0.036 -0.0089 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022
+DEAL::0.036 0 0 0.018 0 0 -0.0089 0 0 0.28 0 0 0.14 0 0 -0.071 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0
+DEAL::-0.0089 0 0 -0.0044 0 0 0.0022 0 0 -0.071 0 0 -0.036 0 0 0.018 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0
+DEAL::0.12 0.018 -0.0044 1.0 0.14 -0.036 0.12 0.018 -0.0044 1.0 0.14 -0.036 8.0 1.1 -0.28 1.0 0.14 -0.036 0.12 0.018 -0.0044 1.0 0.14 -0.036 0.12 0.018 -0.0044
+DEAL::0.018 0 0 0.14 0 0 0.018 0 0 0.14 0 0 1.1 0 0 0.14 0 0 0.018 0 0 0.14 0 0 0.018 0 0
+DEAL::-0.0044 0 0 -0.036 0 0 -0.0044 0 0 -0.036 0 0 -0.28 0 0 -0.036 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0
+DEAL::-0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.25 0.036 -0.0089 -0.50 -0.071 0.018 1.0 0.14 -0.036 2.0 0.28 -0.071 -0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.25 0.036 -0.0089
+DEAL::-0.0089 0 0 0.018 0 0 0.036 0 0 -0.071 0 0 0.14 0 0 0.28 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0
+DEAL::0.0022 0 0 -0.0044 0 0 -0.0089 0 0 0.018 0 0 -0.036 0 0 -0.071 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0
+DEAL::-0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011 0.25 0.036 -0.0089 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022 0.50 0.071 -0.018 0.25 0.036 -0.0089 -0.12 -0.018 0.0044
+DEAL::-0.018 0 0 -0.0089 0 0 0.0044 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 0.071 0 0 0.036 0 0 -0.018 0 0
+DEAL::0.0044 0 0 0.0022 0 0 -0.0011 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0
+DEAL::-0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022 0.12 0.018 -0.0044 1.0 0.14 -0.036 0.12 0.018 -0.0044 0.25 0.036 -0.0089 2.0 0.28 -0.071 0.25 0.036 -0.0089
+DEAL::-0.0089 0 0 -0.071 0 0 -0.0089 0 0 0.018 0 0 0.14 0 0 0.018 0 0 0.036 0 0 0.28 0 0 0.036 0 0
+DEAL::0.0022 0 0 0.018 0 0 0.0022 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0
+DEAL::0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.25 0.036 -0.0089 -0.12 -0.018 0.0044 0.25 0.036 -0.0089 0.50 0.071 -0.018
+DEAL::0.0044 0 0 -0.0089 0 0 -0.018 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 -0.018 0 0 0.036 0 0 0.071 0 0
+DEAL::-0.0011 0 0 0.0022 0 0 0.0044 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 1
+DEAL::0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 0.0044 0 0 0.0022 0 0 -0.0011
+DEAL::0 0 0.071 0 0 0.036 0 0 -0.018 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 -0.018 0 0 -0.0089 0 0 0.0044
+DEAL::-0.018 0.071 0.50 -0.0089 0.036 0.25 0.0044 -0.018 -0.12 -0.0089 0.036 0.25 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031
+DEAL::0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 0.0022 0 0 0.018 0 0 0.0022
+DEAL::0 0 0.036 0 0 0.28 0 0 0.036 0 0 0.018 0 0 0.14 0 0 0.018 0 0 -0.0089 0 0 -0.071 0 0 -0.0089
+DEAL::-0.0089 0.036 0.25 -0.071 0.28 2.0 -0.0089 0.036 0.25 -0.0044 0.018 0.12 -0.036 0.14 1.0 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062
+DEAL::0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 -0.0011 0 0 0.0022 0 0 0.0044
+DEAL::0 0 -0.018 0 0 0.036 0 0 0.071 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 0.0044 0 0 -0.0089 0 0 -0.018
+DEAL::0.0044 -0.018 -0.12 -0.0089 0.036 0.25 -0.018 0.071 0.50 0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0089 0.036 0.25 -0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12
+DEAL::0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 -0.071 0 0 -0.036 0 0 0.018 0 0 -0.0089 0 0 -0.0044 0 0 0.0022
+DEAL::0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 0.28 0 0 0.14 0 0 -0.071 0 0 0.036 0 0 0.018 0 0 -0.0089
+DEAL::-0.0089 0.036 0.25 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062 -0.071 0.28 2.0 -0.036 0.14 1.0 0.018 -0.071 -0.50 -0.0089 0.036 0.25 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062
+DEAL::0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 -0.036 0 0 -0.28 0 0 -0.036 0 0 -0.0044 0 0 -0.036 0 0 -0.0044
+DEAL::0 0 0.018 0 0 0.14 0 0 0.018 0 0 0.14 0 0 1.1 0 0 0.14 0 0 0.018 0 0 0.14 0 0 0.018
+DEAL::-0.0044 0.018 0.12 -0.036 0.14 1.0 -0.0044 0.018 0.12 -0.036 0.14 1.0 -0.28 1.1 8.0 -0.036 0.14 1.0 -0.0044 0.018 0.12 -0.036 0.14 1.0 -0.0044 0.018 0.12
+DEAL::0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 0.018 0 0 -0.036 0 0 -0.071 0 0 0.0022 0 0 -0.0044 0 0 -0.0089
+DEAL::0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 -0.071 0 0 0.14 0 0 0.28 0 0 -0.0089 0 0 0.018 0 0 0.036
+DEAL::0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0089 0.036 0.25 0.018 -0.071 -0.50 -0.036 0.14 1.0 -0.071 0.28 2.0 0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0089 0.036 0.25
+DEAL::0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 -0.018 0 0 -0.0089 0 0 0.0044
+DEAL::0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 0.071 0 0 0.036 0 0 -0.018
+DEAL::0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031 -0.0089 0.036 0.25 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062 -0.018 0.071 0.50 -0.0089 0.036 0.25 0.0044 -0.018 -0.12
+DEAL::0 0 0.0022 0 0 0.018 0 0 0.0022 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 -0.0089 0 0 -0.071 0 0 -0.0089
+DEAL::0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 0.018 0 0 0.14 0 0 0.018 0 0 0.036 0 0 0.28 0 0 0.036
+DEAL::0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.036 0.14 1.0 -0.0044 0.018 0.12 -0.0089 0.036 0.25 -0.071 0.28 2.0 -0.0089 0.036 0.25
+DEAL::0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 0.0044 0 0 -0.0089 0 0 -0.018
+DEAL::0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 -0.018 0 0 0.036 0 0 0.071
+DEAL::-0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0089 0.036 0.25 0.0044 -0.018 -0.12 -0.0089 0.036 0.25 -0.018 0.071 0.50
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 2
+DEAL::0.50 0.25 -0.12 0.071 0.036 -0.018 -0.018 -0.0089 0.0044 0.25 0.12 -0.062 0.036 0.018 -0.0089 -0.0089 -0.0044 0.0022 -0.12 -0.062 0.031 -0.018 -0.0089 0.0044 0.0044 0.0022 -0.0011
+DEAL::0.25 2.0 0.25 0.036 0.28 0.036 -0.0089 -0.071 -0.0089 0.12 1.0 0.12 0.018 0.14 0.018 -0.0044 -0.036 -0.0044 -0.062 -0.50 -0.062 -0.0089 -0.071 -0.0089 0.0022 0.018 0.0022
+DEAL::-0.12 0.25 0.50 -0.018 0.036 0.071 0.0044 -0.0089 -0.018 -0.062 0.12 0.25 -0.0089 0.018 0.036 0.0022 -0.0044 -0.0089 0.031 -0.062 -0.12 0.0044 -0.0089 -0.018 -0.0011 0.0022 0.0044
+DEAL::0.071 0.036 -0.018 0 0 0 0 0 0 0.036 0.018 -0.0089 0 0 0 0 0 0 -0.018 -0.0089 0.0044 0 0 0 0 0 0
+DEAL::0.036 0.28 0.036 0 0 0 0 0 0 0.018 0.14 0.018 0 0 0 0 0 0 -0.0089 -0.071 -0.0089 0 0 0 0 0 0
+DEAL::-0.018 0.036 0.071 0 0 0 0 0 0 -0.0089 0.018 0.036 0 0 0 0 0 0 0.0044 -0.0089 -0.018 0 0 0 0 0 0
+DEAL::-0.018 -0.0089 0.0044 0 0 0 0 0 0 -0.0089 -0.0044 0.0022 0 0 0 0 0 0 0.0044 0.0022 -0.0011 0 0 0 0 0 0
+DEAL::-0.0089 -0.071 -0.0089 0 0 0 0 0 0 -0.0044 -0.036 -0.0044 0 0 0 0 0 0 0.0022 0.018 0.0022 0 0 0 0 0 0
+DEAL::0.0044 -0.0089 -0.018 0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0 0 0 0 0 0 -0.0011 0.0022 0.0044 0 0 0 0 0 0
+DEAL::0.25 0.12 -0.062 0.036 0.018 -0.0089 -0.0089 -0.0044 0.0022 2.0 1.0 -0.50 0.28 0.14 -0.071 -0.071 -0.036 0.018 0.25 0.12 -0.062 0.036 0.018 -0.0089 -0.0089 -0.0044 0.0022
+DEAL::0.12 1.0 0.12 0.018 0.14 0.018 -0.0044 -0.036 -0.0044 1.0 8.0 1.0 0.14 1.1 0.14 -0.036 -0.28 -0.036 0.12 1.0 0.12 0.018 0.14 0.018 -0.0044 -0.036 -0.0044
+DEAL::-0.062 0.12 0.25 -0.0089 0.018 0.036 0.0022 -0.0044 -0.0089 -0.50 1.0 2.0 -0.071 0.14 0.28 0.018 -0.036 -0.071 -0.062 0.12 0.25 -0.0089 0.018 0.036 0.0022 -0.0044 -0.0089
+DEAL::0.036 0.018 -0.0089 0 0 0 0 0 0 0.28 0.14 -0.071 0 0 0 0 0 0 0.036 0.018 -0.0089 0 0 0 0 0 0
+DEAL::0.018 0.14 0.018 0 0 0 0 0 0 0.14 1.1 0.14 0 0 0 0 0 0 0.018 0.14 0.018 0 0 0 0 0 0
+DEAL::-0.0089 0.018 0.036 0 0 0 0 0 0 -0.071 0.14 0.28 0 0 0 0 0 0 -0.0089 0.018 0.036 0 0 0 0 0 0
+DEAL::-0.0089 -0.0044 0.0022 0 0 0 0 0 0 -0.071 -0.036 0.018 0 0 0 0 0 0 -0.0089 -0.0044 0.0022 0 0 0 0 0 0
+DEAL::-0.0044 -0.036 -0.0044 0 0 0 0 0 0 -0.036 -0.28 -0.036 0 0 0 0 0 0 -0.0044 -0.036 -0.0044 0 0 0 0 0 0
+DEAL::0.0022 -0.0044 -0.0089 0 0 0 0 0 0 0.018 -0.036 -0.071 0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0 0 0 0 0 0
+DEAL::-0.12 -0.062 0.031 -0.018 -0.0089 0.0044 0.0044 0.0022 -0.0011 0.25 0.12 -0.062 0.036 0.018 -0.0089 -0.0089 -0.0044 0.0022 0.50 0.25 -0.12 0.071 0.036 -0.018 -0.018 -0.0089 0.0044
+DEAL::-0.062 -0.50 -0.062 -0.0089 -0.071 -0.0089 0.0022 0.018 0.0022 0.12 1.0 0.12 0.018 0.14 0.018 -0.0044 -0.036 -0.0044 0.25 2.0 0.25 0.036 0.28 0.036 -0.0089 -0.071 -0.0089
+DEAL::0.031 -0.062 -0.12 0.0044 -0.0089 -0.018 -0.0011 0.0022 0.0044 -0.062 0.12 0.25 -0.0089 0.018 0.036 0.0022 -0.0044 -0.0089 -0.12 0.25 0.50 -0.018 0.036 0.071 0.0044 -0.0089 -0.018
+DEAL::-0.018 -0.0089 0.0044 0 0 0 0 0 0 0.036 0.018 -0.0089 0 0 0 0 0 0 0.071 0.036 -0.018 0 0 0 0 0 0
+DEAL::-0.0089 -0.071 -0.0089 0 0 0 0 0 0 0.018 0.14 0.018 0 0 0 0 0 0 0.036 0.28 0.036 0 0 0 0 0 0
+DEAL::0.0044 -0.0089 -0.018 0 0 0 0 0 0 -0.0089 0.018 0.036 0 0 0 0 0 0 -0.018 0.036 0.071 0 0 0 0 0 0
+DEAL::0.0044 0.0022 -0.0011 0 0 0 0 0 0 -0.0089 -0.0044 0.0022 0 0 0 0 0 0 -0.018 -0.0089 0.0044 0 0 0 0 0 0
+DEAL::0.0022 0.018 0.0022 0 0 0 0 0 0 -0.0044 -0.036 -0.0044 0 0 0 0 0 0 -0.0089 -0.071 -0.0089 0 0 0 0 0 0
+DEAL::-0.0011 0.0022 0.0044 0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0 0 0 0 0 0 0.0044 -0.0089 -0.018 0 0 0 0 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 3
+DEAL::0 0 0 0 0 0 -0.018 -0.0089 0.0044 0 0 0 0 0 0 -0.0089 -0.0044 0.0022 0 0 0 0 0 0 0.0044 0.0022 -0.0011
+DEAL::0 0 0 0 0 0 -0.0089 -0.071 -0.0089 0 0 0 0 0 0 -0.0044 -0.036 -0.0044 0 0 0 0 0 0 0.0022 0.018 0.0022
+DEAL::0 0 0 0 0 0 0.0044 -0.0089 -0.018 0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0 0 0 0 0 0 -0.0011 0.0022 0.0044
+DEAL::0 0 0 0 0 0 0.071 0.036 -0.018 0 0 0 0 0 0 0.036 0.018 -0.0089 0 0 0 0 0 0 -0.018 -0.0089 0.0044
+DEAL::0 0 0 0 0 0 0.036 0.28 0.036 0 0 0 0 0 0 0.018 0.14 0.018 0 0 0 0 0 0 -0.0089 -0.071 -0.0089
+DEAL::0 0 0 0 0 0 -0.018 0.036 0.071 0 0 0 0 0 0 -0.0089 0.018 0.036 0 0 0 0 0 0 0.0044 -0.0089 -0.018
+DEAL::-0.018 -0.0089 0.0044 0.071 0.036 -0.018 0.50 0.25 -0.12 -0.0089 -0.0044 0.0022 0.036 0.018 -0.0089 0.25 0.12 -0.062 0.0044 0.0022 -0.0011 -0.018 -0.0089 0.0044 -0.12 -0.062 0.031
+DEAL::-0.0089 -0.071 -0.0089 0.036 0.28 0.036 0.25 2.0 0.25 -0.0044 -0.036 -0.0044 0.018 0.14 0.018 0.12 1.0 0.12 0.0022 0.018 0.0022 -0.0089 -0.071 -0.0089 -0.062 -0.50 -0.062
+DEAL::0.0044 -0.0089 -0.018 -0.018 0.036 0.071 -0.12 0.25 0.50 0.0022 -0.0044 -0.0089 -0.0089 0.018 0.036 -0.062 0.12 0.25 -0.0011 0.0022 0.0044 0.0044 -0.0089 -0.018 0.031 -0.062 -0.12
+DEAL::0 0 0 0 0 0 -0.0089 -0.0044 0.0022 0 0 0 0 0 0 -0.071 -0.036 0.018 0 0 0 0 0 0 -0.0089 -0.0044 0.0022
+DEAL::0 0 0 0 0 0 -0.0044 -0.036 -0.0044 0 0 0 0 0 0 -0.036 -0.28 -0.036 0 0 0 0 0 0 -0.0044 -0.036 -0.0044
+DEAL::0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0 0 0 0 0 0 0.018 -0.036 -0.071 0 0 0 0 0 0 0.0022 -0.0044 -0.0089
+DEAL::0 0 0 0 0 0 0.036 0.018 -0.0089 0 0 0 0 0 0 0.28 0.14 -0.071 0 0 0 0 0 0 0.036 0.018 -0.0089
+DEAL::0 0 0 0 0 0 0.018 0.14 0.018 0 0 0 0 0 0 0.14 1.1 0.14 0 0 0 0 0 0 0.018 0.14 0.018
+DEAL::0 0 0 0 0 0 -0.0089 0.018 0.036 0 0 0 0 0 0 -0.071 0.14 0.28 0 0 0 0 0 0 -0.0089 0.018 0.036
+DEAL::-0.0089 -0.0044 0.0022 0.036 0.018 -0.0089 0.25 0.12 -0.062 -0.071 -0.036 0.018 0.28 0.14 -0.071 2.0 1.0 -0.50 -0.0089 -0.0044 0.0022 0.036 0.018 -0.0089 0.25 0.12 -0.062
+DEAL::-0.0044 -0.036 -0.0044 0.018 0.14 0.018 0.12 1.0 0.12 -0.036 -0.28 -0.036 0.14 1.1 0.14 1.0 8.0 1.0 -0.0044 -0.036 -0.0044 0.018 0.14 0.018 0.12 1.0 0.12
+DEAL::0.0022 -0.0044 -0.0089 -0.0089 0.018 0.036 -0.062 0.12 0.25 0.018 -0.036 -0.071 -0.071 0.14 0.28 -0.50 1.0 2.0 0.0022 -0.0044 -0.0089 -0.0089 0.018 0.036 -0.062 0.12 0.25
+DEAL::0 0 0 0 0 0 0.0044 0.0022 -0.0011 0 0 0 0 0 0 -0.0089 -0.0044 0.0022 0 0 0 0 0 0 -0.018 -0.0089 0.0044
+DEAL::0 0 0 0 0 0 0.0022 0.018 0.0022 0 0 0 0 0 0 -0.0044 -0.036 -0.0044 0 0 0 0 0 0 -0.0089 -0.071 -0.0089
+DEAL::0 0 0 0 0 0 -0.0011 0.0022 0.0044 0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0 0 0 0 0 0 0.0044 -0.0089 -0.018
+DEAL::0 0 0 0 0 0 -0.018 -0.0089 0.0044 0 0 0 0 0 0 0.036 0.018 -0.0089 0 0 0 0 0 0 0.071 0.036 -0.018
+DEAL::0 0 0 0 0 0 -0.0089 -0.071 -0.0089 0 0 0 0 0 0 0.018 0.14 0.018 0 0 0 0 0 0 0.036 0.28 0.036
+DEAL::0 0 0 0 0 0 0.0044 -0.0089 -0.018 0 0 0 0 0 0 -0.0089 0.018 0.036 0 0 0 0 0 0 -0.018 0.036 0.071
+DEAL::0.0044 0.0022 -0.0011 -0.018 -0.0089 0.0044 -0.12 -0.062 0.031 -0.0089 -0.0044 0.0022 0.036 0.018 -0.0089 0.25 0.12 -0.062 -0.018 -0.0089 0.0044 0.071 0.036 -0.018 0.50 0.25 -0.12
+DEAL::0.0022 0.018 0.0022 -0.0089 -0.071 -0.0089 -0.062 -0.50 -0.062 -0.0044 -0.036 -0.0044 0.018 0.14 0.018 0.12 1.0 0.12 -0.0089 -0.071 -0.0089 0.036 0.28 0.036 0.25 2.0 0.25
+DEAL::-0.0011 0.0022 0.0044 0.0044 -0.0089 -0.018 0.031 -0.062 -0.12 0.0022 -0.0044 -0.0089 -0.0089 0.018 0.036 -0.062 0.12 0.25 0.0044 -0.0089 -0.018 -0.018 0.036 0.071 -0.12 0.25 0.50
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 4
+DEAL::0.50 0.25 -0.12 0.25 0.12 -0.062 -0.12 -0.062 0.031 0.071 0.036 -0.018 0.036 0.018 -0.0089 -0.018 -0.0089 0.0044 -0.018 -0.0089 0.0044 -0.0089 -0.0044 0.0022 0.0044 0.0022 -0.0011
+DEAL::0.25 2.0 0.25 0.12 1.0 0.12 -0.062 -0.50 -0.062 0.036 0.28 0.036 0.018 0.14 0.018 -0.0089 -0.071 -0.0089 -0.0089 -0.071 -0.0089 -0.0044 -0.036 -0.0044 0.0022 0.018 0.0022
+DEAL::-0.12 0.25 0.50 -0.062 0.12 0.25 0.031 -0.062 -0.12 -0.018 0.036 0.071 -0.0089 0.018 0.036 0.0044 -0.0089 -0.018 0.0044 -0.0089 -0.018 0.0022 -0.0044 -0.0089 -0.0011 0.0022 0.0044
+DEAL::0.25 0.12 -0.062 2.0 1.0 -0.50 0.25 0.12 -0.062 0.036 0.018 -0.0089 0.28 0.14 -0.071 0.036 0.018 -0.0089 -0.0089 -0.0044 0.0022 -0.071 -0.036 0.018 -0.0089 -0.0044 0.0022
+DEAL::0.12 1.0 0.12 1.0 8.0 1.0 0.12 1.0 0.12 0.018 0.14 0.018 0.14 1.1 0.14 0.018 0.14 0.018 -0.0044 -0.036 -0.0044 -0.036 -0.28 -0.036 -0.0044 -0.036 -0.0044
+DEAL::-0.062 0.12 0.25 -0.50 1.0 2.0 -0.062 0.12 0.25 -0.0089 0.018 0.036 -0.071 0.14 0.28 -0.0089 0.018 0.036 0.0022 -0.0044 -0.0089 0.018 -0.036 -0.071 0.0022 -0.0044 -0.0089
+DEAL::-0.12 -0.062 0.031 0.25 0.12 -0.062 0.50 0.25 -0.12 -0.018 -0.0089 0.0044 0.036 0.018 -0.0089 0.071 0.036 -0.018 0.0044 0.0022 -0.0011 -0.0089 -0.0044 0.0022 -0.018 -0.0089 0.0044
+DEAL::-0.062 -0.50 -0.062 0.12 1.0 0.12 0.25 2.0 0.25 -0.0089 -0.071 -0.0089 0.018 0.14 0.018 0.036 0.28 0.036 0.0022 0.018 0.0022 -0.0044 -0.036 -0.0044 -0.0089 -0.071 -0.0089
+DEAL::0.031 -0.062 -0.12 -0.062 0.12 0.25 -0.12 0.25 0.50 0.0044 -0.0089 -0.018 -0.0089 0.018 0.036 -0.018 0.036 0.071 -0.0011 0.0022 0.0044 0.0022 -0.0044 -0.0089 0.0044 -0.0089 -0.018
+DEAL::0.071 0.036 -0.018 0.036 0.018 -0.0089 -0.018 -0.0089 0.0044 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.036 0.28 0.036 0.018 0.14 0.018 -0.0089 -0.071 -0.0089 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.018 0.036 0.071 -0.0089 0.018 0.036 0.0044 -0.0089 -0.018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.036 0.018 -0.0089 0.28 0.14 -0.071 0.036 0.018 -0.0089 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.018 0.14 0.018 0.14 1.1 0.14 0.018 0.14 0.018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.0089 0.018 0.036 -0.071 0.14 0.28 -0.0089 0.018 0.036 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.018 -0.0089 0.0044 0.036 0.018 -0.0089 0.071 0.036 -0.018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.0089 -0.071 -0.0089 0.018 0.14 0.018 0.036 0.28 0.036 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.0044 -0.0089 -0.018 -0.0089 0.018 0.036 -0.018 0.036 0.071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.018 -0.0089 0.0044 -0.0089 -0.0044 0.0022 0.0044 0.0022 -0.0011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.0089 -0.071 -0.0089 -0.0044 -0.036 -0.0044 0.0022 0.018 0.0022 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.0044 -0.0089 -0.018 0.0022 -0.0044 -0.0089 -0.0011 0.0022 0.0044 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.0089 -0.0044 0.0022 -0.071 -0.036 0.018 -0.0089 -0.0044 0.0022 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.0044 -0.036 -0.0044 -0.036 -0.28 -0.036 -0.0044 -0.036 -0.0044 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.0022 -0.0044 -0.0089 0.018 -0.036 -0.071 0.0022 -0.0044 -0.0089 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.0044 0.0022 -0.0011 -0.0089 -0.0044 0.0022 -0.018 -0.0089 0.0044 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.0022 0.018 0.0022 -0.0044 -0.036 -0.0044 -0.0089 -0.071 -0.0089 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.0011 0.0022 0.0044 0.0022 -0.0044 -0.0089 0.0044 -0.0089 -0.018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::boundary_matrix 5
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.018 -0.0089 0.0044 -0.0089 -0.0044 0.0022 0.0044 0.0022 -0.0011
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0089 -0.071 -0.0089 -0.0044 -0.036 -0.0044 0.0022 0.018 0.0022
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0044 -0.0089 -0.018 0.0022 -0.0044 -0.0089 -0.0011 0.0022 0.0044
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0089 -0.0044 0.0022 -0.071 -0.036 0.018 -0.0089 -0.0044 0.0022
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0044 -0.036 -0.0044 -0.036 -0.28 -0.036 -0.0044 -0.036 -0.0044
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0022 -0.0044 -0.0089 0.018 -0.036 -0.071 0.0022 -0.0044 -0.0089
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0044 0.0022 -0.0011 -0.0089 -0.0044 0.0022 -0.018 -0.0089 0.0044
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0022 0.018 0.0022 -0.0044 -0.036 -0.0044 -0.0089 -0.071 -0.0089
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0011 0.0022 0.0044 0.0022 -0.0044 -0.0089 0.0044 -0.0089 -0.018
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.071 0.036 -0.018 0.036 0.018 -0.0089 -0.018 -0.0089 0.0044
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.036 0.28 0.036 0.018 0.14 0.018 -0.0089 -0.071 -0.0089
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.018 0.036 0.071 -0.0089 0.018 0.036 0.0044 -0.0089 -0.018
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.036 0.018 -0.0089 0.28 0.14 -0.071 0.036 0.018 -0.0089
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.018 0.14 0.018 0.14 1.1 0.14 0.018 0.14 0.018
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0089 0.018 0.036 -0.071 0.14 0.28 -0.0089 0.018 0.036
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.018 -0.0089 0.0044 0.036 0.018 -0.0089 0.071 0.036 -0.018
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0089 -0.071 -0.0089 0.018 0.14 0.018 0.036 0.28 0.036
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0044 -0.0089 -0.018 -0.0089 0.018 0.036 -0.018 0.036 0.071
+DEAL::-0.018 -0.0089 0.0044 -0.0089 -0.0044 0.0022 0.0044 0.0022 -0.0011 0.071 0.036 -0.018 0.036 0.018 -0.0089 -0.018 -0.0089 0.0044 0.50 0.25 -0.12 0.25 0.12 -0.062 -0.12 -0.062 0.031
+DEAL::-0.0089 -0.071 -0.0089 -0.0044 -0.036 -0.0044 0.0022 0.018 0.0022 0.036 0.28 0.036 0.018 0.14 0.018 -0.0089 -0.071 -0.0089 0.25 2.0 0.25 0.12 1.0 0.12 -0.062 -0.50 -0.062
+DEAL::0.0044 -0.0089 -0.018 0.0022 -0.0044 -0.0089 -0.0011 0.0022 0.0044 -0.018 0.036 0.071 -0.0089 0.018 0.036 0.0044 -0.0089 -0.018 -0.12 0.25 0.50 -0.062 0.12 0.25 0.031 -0.062 -0.12
+DEAL::-0.0089 -0.0044 0.0022 -0.071 -0.036 0.018 -0.0089 -0.0044 0.0022 0.036 0.018 -0.0089 0.28 0.14 -0.071 0.036 0.018 -0.0089 0.25 0.12 -0.062 2.0 1.0 -0.50 0.25 0.12 -0.062
+DEAL::-0.0044 -0.036 -0.0044 -0.036 -0.28 -0.036 -0.0044 -0.036 -0.0044 0.018 0.14 0.018 0.14 1.1 0.14 0.018 0.14 0.018 0.12 1.0 0.12 1.0 8.0 1.0 0.12 1.0 0.12
+DEAL::0.0022 -0.0044 -0.0089 0.018 -0.036 -0.071 0.0022 -0.0044 -0.0089 -0.0089 0.018 0.036 -0.071 0.14 0.28 -0.0089 0.018 0.036 -0.062 0.12 0.25 -0.50 1.0 2.0 -0.062 0.12 0.25
+DEAL::0.0044 0.0022 -0.0011 -0.0089 -0.0044 0.0022 -0.018 -0.0089 0.0044 -0.018 -0.0089 0.0044 0.036 0.018 -0.0089 0.071 0.036 -0.018 -0.12 -0.062 0.031 0.25 0.12 -0.062 0.50 0.25 -0.12
+DEAL::0.0022 0.018 0.0022 -0.0044 -0.036 -0.0044 -0.0089 -0.071 -0.0089 -0.0089 -0.071 -0.0089 0.018 0.14 0.018 0.036 0.28 0.036 -0.062 -0.50 -0.062 0.12 1.0 0.12 0.25 2.0 0.25
+DEAL::-0.0011 0.0022 0.0044 0.0022 -0.0044 -0.0089 0.0044 -0.0089 -0.018 0.0044 -0.0089 -0.018 -0.0089 0.018 0.036 -0.018 0.036 0.071 0.031 -0.062 -0.12 -0.062 0.12 0.25 -0.12 0.25 0.50
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 -0.0044 0 0 -0.0022 0 0 0.0011 0 0 0.0022 0 0 0.0011 0 0 -0.00056
+DEAL::0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 0.018 0 0 0.0089 0 0 -0.0044 0 0 -0.0089 0 0 -0.0044 0 0 0.0022
+DEAL::-0.0089 0.036 0.25 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0022 0.0089 0.062 0.0011 -0.0044 -0.031 0.0022 -0.0089 -0.062 0.0011 -0.0044 -0.031 -0.000560.0022 0.016
+DEAL::0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 -0.0022 0 0 -0.018 0 0 -0.0022 0 0 0.0011 0 0 0.0089 0 0 0.0011
+DEAL::0 0 0.018 0 0 0.14 0 0 0.018 0 0 0.0089 0 0 0.071 0 0 0.0089 0 0 -0.0044 0 0 -0.036 0 0 -0.0044
+DEAL::-0.0044 0.018 0.12 -0.036 0.14 1.0 -0.0044 0.018 0.12 -0.0022 0.0089 0.062 -0.018 0.071 0.50 -0.0022 0.0089 0.062 0.0011 -0.0044 -0.031 0.0089 -0.036 -0.25 0.0011 -0.0044 -0.031
+DEAL::0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 0.0011 0 0 -0.0022 0 0 -0.0044 0 0 -0.000560 0 0.0011 0 0 0.0022
+DEAL::0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 -0.0044 0 0 0.0089 0 0 0.018 0 0 0.0022 0 0 -0.0044 0 0 -0.0089
+DEAL::0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0089 0.036 0.25 0.0011 -0.0044 -0.031 -0.0022 0.0089 0.062 -0.0044 0.018 0.12 -0.000560.0022 0.016 0.0011 -0.0044 -0.031 0.0022 -0.0089 -0.062
+DEAL::0 0 -0.0044 0 0 -0.0022 0 0 0.0011 0 0 -0.036 0 0 -0.018 0 0 0.0089 0 0 -0.0044 0 0 -0.0022 0 0 0.0011
+DEAL::0 0 0.018 0 0 0.0089 0 0 -0.0044 0 0 0.14 0 0 0.071 0 0 -0.036 0 0 0.018 0 0 0.0089 0 0 -0.0044
+DEAL::-0.0044 0.018 0.12 -0.0022 0.0089 0.062 0.0011 -0.0044 -0.031 -0.036 0.14 1.0 -0.018 0.071 0.50 0.0089 -0.036 -0.25 -0.0044 0.018 0.12 -0.0022 0.0089 0.062 0.0011 -0.0044 -0.031
+DEAL::0 0 -0.0022 0 0 -0.018 0 0 -0.0022 0 0 -0.018 0 0 -0.14 0 0 -0.018 0 0 -0.0022 0 0 -0.018 0 0 -0.0022
+DEAL::0 0 0.0089 0 0 0.071 0 0 0.0089 0 0 0.071 0 0 0.57 0 0 0.071 0 0 0.0089 0 0 0.071 0 0 0.0089
+DEAL::-0.0022 0.0089 0.062 -0.018 0.071 0.50 -0.0022 0.0089 0.062 -0.018 0.071 0.50 -0.14 0.57 4.0 -0.018 0.071 0.50 -0.0022 0.0089 0.062 -0.018 0.071 0.50 -0.0022 0.0089 0.062
+DEAL::0 0 0.0011 0 0 -0.0022 0 0 -0.0044 0 0 0.0089 0 0 -0.018 0 0 -0.036 0 0 0.0011 0 0 -0.0022 0 0 -0.0044
+DEAL::0 0 -0.0044 0 0 0.0089 0 0 0.018 0 0 -0.036 0 0 0.071 0 0 0.14 0 0 -0.0044 0 0 0.0089 0 0 0.018
+DEAL::0.0011 -0.0044 -0.031 -0.0022 0.0089 0.062 -0.0044 0.018 0.12 0.0089 -0.036 -0.25 -0.018 0.071 0.50 -0.036 0.14 1.0 0.0011 -0.0044 -0.031 -0.0022 0.0089 0.062 -0.0044 0.018 0.12
+DEAL::0 0 0.0022 0 0 0.0011 0 0 -0.000560 0 -0.0044 0 0 -0.0022 0 0 0.0011 0 0 -0.0089 0 0 -0.0044 0 0 0.0022
+DEAL::0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0 0.018 0 0 0.0089 0 0 -0.0044 0 0 0.036 0 0 0.018 0 0 -0.0089
+DEAL::0.0022 -0.0089 -0.062 0.0011 -0.0044 -0.031 -0.000560.0022 0.016 -0.0044 0.018 0.12 -0.0022 0.0089 0.062 0.0011 -0.0044 -0.031 -0.0089 0.036 0.25 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062
+DEAL::0 0 0.0011 0 0 0.0089 0 0 0.0011 0 0 -0.0022 0 0 -0.018 0 0 -0.0022 0 0 -0.0044 0 0 -0.036 0 0 -0.0044
+DEAL::0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0 0.0089 0 0 0.071 0 0 0.0089 0 0 0.018 0 0 0.14 0 0 0.018
+DEAL::0.0011 -0.0044 -0.031 0.0089 -0.036 -0.25 0.0011 -0.0044 -0.031 -0.0022 0.0089 0.062 -0.018 0.071 0.50 -0.0022 0.0089 0.062 -0.0044 0.018 0.12 -0.036 0.14 1.0 -0.0044 0.018 0.12
+DEAL::0 0 -0.000560 0 0.0011 0 0 0.0022 0 0 0.0011 0 0 -0.0022 0 0 -0.0044 0 0 0.0022 0 0 -0.0044 0 0 -0.0089
+DEAL::0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0 -0.0044 0 0 0.0089 0 0 0.018 0 0 -0.0089 0 0 0.018 0 0 0.036
+DEAL::-0.000560.0022 0.016 0.0011 -0.0044 -0.031 0.0022 -0.0089 -0.062 0.0011 -0.0044 -0.031 -0.0022 0.0089 0.062 -0.0044 0.018 0.12 0.0022 -0.0089 -0.062 -0.0044 0.018 0.12 -0.0089 0.036 0.25
+DEAL::M22
+DEAL::0.25 0.036 -0.0089 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.062 0.0089 -0.0022 -0.031 -0.0044 0.0011 -0.062 -0.0089 0.0022 -0.031 -0.0044 0.0011 0.016 0.0022 -0.00056
+DEAL::0.036 0 0 0.018 0 0 -0.0089 0 0 0.018 0 0 0.0089 0 0 -0.0044 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0
+DEAL::-0.0089 0 0 -0.0044 0 0 0.0022 0 0 -0.0044 0 0 -0.0022 0 0 0.0011 0 0 0.0022 0 0 0.0011 0 0 -0.000560 0
+DEAL::0.12 0.018 -0.0044 1.0 0.14 -0.036 0.12 0.018 -0.0044 0.062 0.0089 -0.0022 0.50 0.071 -0.018 0.062 0.0089 -0.0022 -0.031 -0.0044 0.0011 -0.25 -0.036 0.0089 -0.031 -0.0044 0.0011
+DEAL::0.018 0 0 0.14 0 0 0.018 0 0 0.0089 0 0 0.071 0 0 0.0089 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0
+DEAL::-0.0044 0 0 -0.036 0 0 -0.0044 0 0 -0.0022 0 0 -0.018 0 0 -0.0022 0 0 0.0011 0 0 0.0089 0 0 0.0011 0 0
+DEAL::-0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.25 0.036 -0.0089 -0.031 -0.0044 0.0011 0.062 0.0089 -0.0022 0.12 0.018 -0.0044 0.016 0.0022 -0.00056-0.031 -0.0044 0.0011 -0.062 -0.0089 0.0022
+DEAL::-0.0089 0 0 0.018 0 0 0.036 0 0 -0.0044 0 0 0.0089 0 0 0.018 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0
+DEAL::0.0022 0 0 -0.0044 0 0 -0.0089 0 0 0.0011 0 0 -0.0022 0 0 -0.0044 0 0 -0.000560 0 0.0011 0 0 0.0022 0 0
+DEAL::0.12 0.018 -0.0044 0.062 0.0089 -0.0022 -0.031 -0.0044 0.0011 1.0 0.14 -0.036 0.50 0.071 -0.018 -0.25 -0.036 0.0089 0.12 0.018 -0.0044 0.062 0.0089 -0.0022 -0.031 -0.0044 0.0011
+DEAL::0.018 0 0 0.0089 0 0 -0.0044 0 0 0.14 0 0 0.071 0 0 -0.036 0 0 0.018 0 0 0.0089 0 0 -0.0044 0 0
+DEAL::-0.0044 0 0 -0.0022 0 0 0.0011 0 0 -0.036 0 0 -0.018 0 0 0.0089 0 0 -0.0044 0 0 -0.0022 0 0 0.0011 0 0
+DEAL::0.062 0.0089 -0.0022 0.50 0.071 -0.018 0.062 0.0089 -0.0022 0.50 0.071 -0.018 4.0 0.57 -0.14 0.50 0.071 -0.018 0.062 0.0089 -0.0022 0.50 0.071 -0.018 0.062 0.0089 -0.0022
+DEAL::0.0089 0 0 0.071 0 0 0.0089 0 0 0.071 0 0 0.57 0 0 0.071 0 0 0.0089 0 0 0.071 0 0 0.0089 0 0
+DEAL::-0.0022 0 0 -0.018 0 0 -0.0022 0 0 -0.018 0 0 -0.14 0 0 -0.018 0 0 -0.0022 0 0 -0.018 0 0 -0.0022 0 0
+DEAL::-0.031 -0.0044 0.0011 0.062 0.0089 -0.0022 0.12 0.018 -0.0044 -0.25 -0.036 0.0089 0.50 0.071 -0.018 1.0 0.14 -0.036 -0.031 -0.0044 0.0011 0.062 0.0089 -0.0022 0.12 0.018 -0.0044
+DEAL::-0.0044 0 0 0.0089 0 0 0.018 0 0 -0.036 0 0 0.071 0 0 0.14 0 0 -0.0044 0 0 0.0089 0 0 0.018 0 0
+DEAL::0.0011 0 0 -0.0022 0 0 -0.0044 0 0 0.0089 0 0 -0.018 0 0 -0.036 0 0 0.0011 0 0 -0.0022 0 0 -0.0044 0 0
+DEAL::-0.062 -0.0089 0.0022 -0.031 -0.0044 0.0011 0.016 0.0022 -0.000560.12 0.018 -0.0044 0.062 0.0089 -0.0022 -0.031 -0.0044 0.0011 0.25 0.036 -0.0089 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022
+DEAL::-0.0089 0 0 -0.0044 0 0 0.0022 0 0 0.018 0 0 0.0089 0 0 -0.0044 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0
+DEAL::0.0022 0 0 0.0011 0 0 -0.000560 0 -0.0044 0 0 -0.0022 0 0 0.0011 0 0 -0.0089 0 0 -0.0044 0 0 0.0022 0 0
+DEAL::-0.031 -0.0044 0.0011 -0.25 -0.036 0.0089 -0.031 -0.0044 0.0011 0.062 0.0089 -0.0022 0.50 0.071 -0.018 0.062 0.0089 -0.0022 0.12 0.018 -0.0044 1.0 0.14 -0.036 0.12 0.018 -0.0044
+DEAL::-0.0044 0 0 -0.036 0 0 -0.0044 0 0 0.0089 0 0 0.071 0 0 0.0089 0 0 0.018 0 0 0.14 0 0 0.018 0 0
+DEAL::0.0011 0 0 0.0089 0 0 0.0011 0 0 -0.0022 0 0 -0.018 0 0 -0.0022 0 0 -0.0044 0 0 -0.036 0 0 -0.0044 0 0
+DEAL::0.016 0.0022 -0.00056-0.031 -0.0044 0.0011 -0.062 -0.0089 0.0022 -0.031 -0.0044 0.0011 0.062 0.0089 -0.0022 0.12 0.018 -0.0044 -0.062 -0.0089 0.0022 0.12 0.018 -0.0044 0.25 0.036 -0.0089
+DEAL::0.0022 0 0 -0.0044 0 0 -0.0089 0 0 -0.0044 0 0 0.0089 0 0 0.018 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0
+DEAL::-0.000560 0 0.0011 0 0 0.0022 0 0 0.0011 0 0 -0.0022 0 0 -0.0044 0 0 0.0022 0 0 -0.0044 0 0 -0.0089 0 0
+DEAL::M12
+DEAL::0.0089 0 0 0.0044 0 0 -0.0022 0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0 -0.0022 0 0 -0.0011 0 0 0.00056 0 0
+DEAL::-0.036 0 0 -0.018 0 0 0.0089 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 0.0089 0 0 0.0044 0 0 -0.0022 0 0
+DEAL::-0.25 -0.036 0.0089 -0.12 -0.018 0.0044 0.062 0.0089 -0.0022 -0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011 0.062 0.0089 -0.0022 0.031 0.0044 -0.0011 -0.016 -0.0022 0.00056
+DEAL::0.0044 0 0 0.036 0 0 0.0044 0 0 0.0022 0 0 0.018 0 0 0.0022 0 0 -0.0011 0 0 -0.0089 0 0 -0.0011 0 0
+DEAL::-0.018 0 0 -0.14 0 0 -0.018 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 0.0044 0 0 0.036 0 0 0.0044 0 0
+DEAL::-0.12 -0.018 0.0044 -1.0 -0.14 0.036 -0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011 0.25 0.036 -0.0089 0.031 0.0044 -0.0011
+DEAL::-0.0022 0 0 0.0044 0 0 0.0089 0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0 0.00056 0 0 -0.0011 0 0 -0.0022 0 0
+DEAL::0.0089 0 0 -0.018 0 0 -0.036 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 -0.0022 0 0 0.0044 0 0 0.0089 0 0
+DEAL::0.062 0.0089 -0.0022 -0.12 -0.018 0.0044 -0.25 -0.036 0.0089 0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044 -0.016 -0.0022 0.00056 0.031 0.0044 -0.0011 0.062 0.0089 -0.0022
+DEAL::0.0044 0 0 0.0022 0 0 -0.0011 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0
+DEAL::-0.018 0 0 -0.0089 0 0 0.0044 0 0 -0.14 0 0 -0.071 0 0 0.036 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0
+DEAL::-0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011 -1.0 -0.14 0.036 -0.50 -0.071 0.018 0.25 0.036 -0.0089 -0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011
+DEAL::0.0022 0 0 0.018 0 0 0.0022 0 0 0.018 0 0 0.14 0 0 0.018 0 0 0.0022 0 0 0.018 0 0 0.0022 0 0
+DEAL::-0.0089 0 0 -0.071 0 0 -0.0089 0 0 -0.071 0 0 -0.57 0 0 -0.071 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0
+DEAL::-0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -4.0 -0.57 0.14 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022
+DEAL::-0.0011 0 0 0.0022 0 0 0.0044 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0
+DEAL::0.0044 0 0 -0.0089 0 0 -0.018 0 0 0.036 0 0 -0.071 0 0 -0.14 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0
+DEAL::0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044 0.25 0.036 -0.0089 -0.50 -0.071 0.018 -1.0 -0.14 0.036 0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044
+DEAL::-0.0022 0 0 -0.0011 0 0 0.00056 0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0 0.0089 0 0 0.0044 0 0 -0.0022 0 0
+DEAL::0.0089 0 0 0.0044 0 0 -0.0022 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 -0.036 0 0 -0.018 0 0 0.0089 0 0
+DEAL::0.062 0.0089 -0.0022 0.031 0.0044 -0.0011 -0.016 -0.0022 0.00056 -0.12 -0.018 0.0044 -0.062 -0.0089 0.0022 0.031 0.0044 -0.0011 -0.25 -0.036 0.0089 -0.12 -0.018 0.0044 0.062 0.0089 -0.0022
+DEAL::-0.0011 0 0 -0.0089 0 0 -0.0011 0 0 0.0022 0 0 0.018 0 0 0.0022 0 0 0.0044 0 0 0.036 0 0 0.0044 0 0
+DEAL::0.0044 0 0 0.036 0 0 0.0044 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 -0.018 0 0 -0.14 0 0 -0.018 0 0
+DEAL::0.031 0.0044 -0.0011 0.25 0.036 -0.0089 0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.50 -0.071 0.018 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044 -1.0 -0.14 0.036 -0.12 -0.018 0.0044
+DEAL::0.00056 0 0 -0.0011 0 0 -0.0022 0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0 -0.0022 0 0 0.0044 0 0 0.0089 0 0
+DEAL::-0.0022 0 0 0.0044 0 0 0.0089 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 0.0089 0 0 -0.018 0 0 -0.036 0 0
+DEAL::-0.016 -0.0022 0.00056 0.031 0.0044 -0.0011 0.062 0.0089 -0.0022 0.031 0.0044 -0.0011 -0.062 -0.0089 0.0022 -0.12 -0.018 0.0044 0.062 0.0089 -0.0022 -0.12 -0.018 0.0044 -0.25 -0.036 0.0089
+DEAL::M21
+DEAL::0.0089 -0.036 -0.25 0.0044 -0.018 -0.12 -0.0022 0.0089 0.062 0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031 -0.0022 0.0089 0.062 -0.0011 0.0044 0.031 0.00056 -0.0022 -0.016
+DEAL::0 0 -0.036 0 0 -0.018 0 0 0.0089 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 0.0089 0 0 0.0044 0 0 -0.0022
+DEAL::0 0 0.0089 0 0 0.0044 0 0 -0.0022 0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0 -0.0022 0 0 -0.0011 0 0 0.00056
+DEAL::0.0044 -0.018 -0.12 0.036 -0.14 -1.0 0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031 -0.0089 0.036 0.25 -0.0011 0.0044 0.031
+DEAL::0 0 -0.018 0 0 -0.14 0 0 -0.018 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 0.0044 0 0 0.036 0 0 0.0044
+DEAL::0 0 0.0044 0 0 0.036 0 0 0.0044 0 0 0.0022 0 0 0.018 0 0 0.0022 0 0 -0.0011 0 0 -0.0089 0 0 -0.0011
+DEAL::-0.0022 0.0089 0.062 0.0044 -0.018 -0.12 0.0089 -0.036 -0.25 -0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12 0.00056 -0.0022 -0.016 -0.0011 0.0044 0.031 -0.0022 0.0089 0.062
+DEAL::0 0 0.0089 0 0 -0.018 0 0 -0.036 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 -0.0022 0 0 0.0044 0 0 0.0089
+DEAL::0 0 -0.0022 0 0 0.0044 0 0 0.0089 0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0 0.00056 0 0 -0.0011 0 0 -0.0022
+DEAL::0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031 0.036 -0.14 -1.0 0.018 -0.071 -0.50 -0.0089 0.036 0.25 0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031
+DEAL::0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 -0.14 0 0 -0.071 0 0 0.036 0 0 -0.018 0 0 -0.0089 0 0 0.0044
+DEAL::0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0 0.036 0 0 0.018 0 0 -0.0089 0 0 0.0044 0 0 0.0022 0 0 -0.0011
+DEAL::0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.14 -0.57 -4.0 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062
+DEAL::0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 -0.071 0 0 -0.57 0 0 -0.071 0 0 -0.0089 0 0 -0.071 0 0 -0.0089
+DEAL::0 0 0.0022 0 0 0.018 0 0 0.0022 0 0 0.018 0 0 0.14 0 0 0.018 0 0 0.0022 0 0 0.018 0 0 0.0022
+DEAL::-0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12 -0.0089 0.036 0.25 0.018 -0.071 -0.50 0.036 -0.14 -1.0 -0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12
+DEAL::0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 0.036 0 0 -0.071 0 0 -0.14 0 0 0.0044 0 0 -0.0089 0 0 -0.018
+DEAL::0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0 -0.0089 0 0 0.018 0 0 0.036 0 0 -0.0011 0 0 0.0022 0 0 0.0044
+DEAL::-0.0022 0.0089 0.062 -0.0011 0.0044 0.031 0.00056 -0.0022 -0.016 0.0044 -0.018 -0.12 0.0022 -0.0089 -0.062 -0.0011 0.0044 0.031 0.0089 -0.036 -0.25 0.0044 -0.018 -0.12 -0.0022 0.0089 0.062
+DEAL::0 0 0.0089 0 0 0.0044 0 0 -0.0022 0 0 -0.018 0 0 -0.0089 0 0 0.0044 0 0 -0.036 0 0 -0.018 0 0 0.0089
+DEAL::0 0 -0.0022 0 0 -0.0011 0 0 0.00056 0 0 0.0044 0 0 0.0022 0 0 -0.0011 0 0 0.0089 0 0 0.0044 0 0 -0.0022
+DEAL::-0.0011 0.0044 0.031 -0.0089 0.036 0.25 -0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.018 -0.071 -0.50 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12 0.036 -0.14 -1.0 0.0044 -0.018 -0.12
+DEAL::0 0 0.0044 0 0 0.036 0 0 0.0044 0 0 -0.0089 0 0 -0.071 0 0 -0.0089 0 0 -0.018 0 0 -0.14 0 0 -0.018
+DEAL::0 0 -0.0011 0 0 -0.0089 0 0 -0.0011 0 0 0.0022 0 0 0.018 0 0 0.0022 0 0 0.0044 0 0 0.036 0 0 0.0044
+DEAL::0.00056 -0.0022 -0.016 -0.0011 0.0044 0.031 -0.0022 0.0089 0.062 -0.0011 0.0044 0.031 0.0022 -0.0089 -0.062 0.0044 -0.018 -0.12 -0.0022 0.0089 0.062 0.0044 -0.018 -0.12 0.0089 -0.036 -0.25
+DEAL::0 0 -0.0022 0 0 0.0044 0 0 0.0089 0 0 0.0044 0 0 -0.0089 0 0 -0.018 0 0 0.0089 0 0 -0.018 0 0 -0.036
+DEAL::0 0 0.00056 0 0 -0.0011 0 0 -0.0022 0 0 -0.0011 0 0 0.0022 0 0 0.0044 0 0 -0.0022 0 0 0.0044 0 0 0.0089
+DEAL::Residuals 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0 0 e0
+DEAL::FE_Nedelec<3>(1)
+DEAL::cell matrix
+DEAL::0.67 0 -0.17 0 0 0 0 0 -0.17 0 -0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0
+DEAL::0 2.0 0 0.50 0 0 0 0 0 0.50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 0 0 -0.14 0 0 0 0.25 0 0
+DEAL::-0.17 0 0.67 0 0 0 0 0 -0.33 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0
+DEAL::0 0.50 0 2.0 0 0 0 0 0 0 0 0.50 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 0 0 -0.14 0 0 0 0.25 0 0
+DEAL::0 0 0 0 0.67 0 -0.17 0 0 0 0 0 -0.17 0 -0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0.14 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 2.0 0 0.50 0 0 0 0 0 0.50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 0 0 -0.14 0 -0.72 0 0 0 -0.14 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 -0.17 0 0.67 0 0 0 0 0 -0.33 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 -0.14 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.50 0 2.0 0 0 0 0 0 0 0 0.50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.72 0 -0.72 0 0 0 -0.14 0 0 0 0.25 0 0 0 0
+DEAL::-0.17 0 -0.33 0 0 0 0 0 0.67 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0
+DEAL::0 0.50 0 0 0 0 0 0 0 2.0 0 0.50 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.72 0 0 0 0.25 0 0
+DEAL::-0.33 0 -0.17 0 0 0 0 0 -0.17 0 0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0
+DEAL::0 0 0 0.50 0 0 0 0 0 0.50 0 2.0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.72 0 0 0 0.25 0 0
+DEAL::0 0 0 0 -0.17 0 -0.33 0 0 0 0 0 0.67 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0.14 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.50 0 0 0 0 0 0 0 2.0 0 0.50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 0 0 -0.14 0 -0.14 0 0 0 -0.72 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 -0.33 0 -0.17 0 0 0 0 0 -0.17 0 0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 -0.14 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0.50 0 0 0 0 0 0.50 0 2.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.72 0 -0.14 0 0 0 -0.72 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.67 0 -0.17 0 -0.17 0 -0.33 0 0 0 -0.14 0 0 0 0.14 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.0 0 0.50 0 0.50 0 0 0 0 0 -0.72 0 0 0 -0.14 0 -0.72 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0.67 0 -0.33 0 -0.17 0 0 0 0.14 0 0 0 -0.14 0 -0.14 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.50 0 2.0 0 0 0 0.50 0 0 0 -0.14 0 0 0 -0.72 0 -0.72 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 -0.33 0 0.67 0 -0.17 0 0 0 -0.14 0 0 0 0.14 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.50 0 0 0 2.0 0 0.50 0 0 0 -0.72 0 0 0 -0.14 0 -0.14 0 0 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.33 0 -0.17 0 -0.17 0 0.67 0 0 0 0.14 0 0 0 -0.14 0 0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.50 0 0.50 0 2.0 0 0 0 -0.14 0 0 0 -0.72 0 -0.14 0 0 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::-0.14 0 0.14 0 0 0 0 0 -0.14 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.43 0 0 0 0.067 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0
+DEAL::0 -0.72 0 -0.14 0 0 0 0 0 -0.72 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.83 0 0 0 0.27 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 -0.32 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0.14 0 -0.14 0 0.14 0 0 0 0.43 0 0 0 0.067 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 -0.14 0 -0.72 0 -0.14 0 0 0 0.83 0 0 0 0.27 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32
+DEAL::0.14 0 -0.14 0 0 0 0 0 0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.067 0 0 0 0.43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0
+DEAL::0 -0.14 0 -0.72 0 0 0 0 0 -0.14 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 0.27 0 0 0 0.83 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 -0.32 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 -0.14 0 0.14 0 -0.14 0 0 0 0.067 0 0 0 0.43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.72 0 -0.14 0 -0.72 0 0 0 0.27 0 0 0 0.83 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0.14 0 0.14 0 0 0 0 0 0 0 0 0 0.43 0 0 0 0.067 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.72 0 -0.72 0 -0.14 0 -0.14 0 0 0 0.25 0 0 0 0.25 0 0.83 0 0 0 0.27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32
+DEAL::0 0 0 0 -0.14 0 0.14 0 0 0 0 0 -0.14 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.43 0 0 0 0.067 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.72 0 -0.14 0 0 0 0 0 -0.72 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.83 0 0 0 0.27 0 0.25 0 0 0 0.25 0 0 0 -0.32 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0.14 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0.067 0 0 0 0.43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 -0.72 0 -0.72 0 0 0 0.25 0 0 0 0.25 0 0.27 0 0 0 0.83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32
+DEAL::0 0 0 0 0.14 0 -0.14 0 0 0 0 0 0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.067 0 0 0 0.43 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.14 0 -0.72 0 0 0 0 0 -0.14 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.27 0 0 0 0.83 0 0.25 0 0 0 0.25 0 0 0 -0.32 0 0 0 0
+DEAL::0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0.14 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.43 0 0 0 0.067 0 0 0 -0.14 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.72 0 -0.72 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0.83 0 0 0 0.27 0 0 0 -0.32 0 0 0 0
+DEAL::-0.14 0 -0.14 0 0 0 0 0 0.14 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.43 0 0 0 0.067 0 0 0 -0.14 0 0 0
+DEAL::0 -0.72 0 -0.72 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0.83 0 0 0 0.27 0 0 0 -0.32 0 0
+DEAL::0 0 0 0 0.14 0 0.14 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.067 0 0 0 0.43 0 0 0 -0.14 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 -0.72 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0.27 0 0 0 0.83 0 0 0 -0.32 0 0 0 0
+DEAL::0.14 0 0.14 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.067 0 0 0 0.43 0 0 0 -0.14 0 0 0
+DEAL::0 -0.14 0 -0.14 0 0 0 0 0 -0.72 0 -0.72 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0.27 0 0 0 0.83 0 0 0 -0.32 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 -0.14 0 0 0 -0.14 0 0 0 0.20 0 0 0 0 0
+DEAL::0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32 0 0 0 -0.32 0 -0.32 0 0 0 -0.32 0 0 0 0.32 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 0 0 0.20 0 0 0
+DEAL::0 0.25 0 0.25 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32 0 0 0 -0.32 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.32 0 0 0 -0.32 0 0 0 0.32 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 -0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.20 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0.25 0 0.25 0 0 0 -0.32 0 0 0 -0.32 0 -0.32 0 0 0 -0.32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.32
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 0
+DEAL::11. 0 0.33 0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0 0
+DEAL::0 11. 0 0.33 0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0
+DEAL::0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 3.8 -6.2 1.9 -3.1 0 0 0 0 1.9 -3.1 0.94 -1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 0 0 -0.82 1.3 -1.6 2.7 0 0 -0.82 1.3 0 0 0.71 -1.2 0 0 0 0
+DEAL::0 0 0 0 -6.2 10. -3.1 5.0 0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 0 0 1.3 -2.2 2.7 -4.3 0 0 1.3 -2.2 0 0 -1.2 1.9 0 0 0 0
+DEAL::0 0 0 0 1.9 -3.1 3.8 -6.2 0 0 0 0 0.94 -1.5 1.9 -3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -1.6 2.7 -1.6 2.7 0 0 -0.82 1.3 0 0 0.71 -1.2 0 0 0 0
+DEAL::0 0 0 0 -3.1 5.0 -6.2 10. 0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 2.7 -4.3 2.7 -4.3 0 0 1.3 -2.2 0 0 -1.2 1.9 0 0 0 0
+DEAL::5.3 0 0.17 0 0 0 0 0 11. 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0 0
+DEAL::0 5.3 0 0.17 0 0 0 0 0 11. 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0
+DEAL::0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 1.9 -3.1 0.94 -1.5 0 0 0 0 3.8 -6.2 1.9 -3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 0 0 -0.82 1.3 -0.82 1.3 0 0 -1.6 2.7 0 0 0.71 -1.2 0 0 0 0
+DEAL::0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 -6.2 10. -3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 0 0 1.3 -2.2 1.3 -2.2 0 0 2.7 -4.3 0 0 -1.2 1.9 0 0 0 0
+DEAL::0 0 0 0 0.94 -1.5 1.9 -3.1 0 0 0 0 1.9 -3.1 3.8 -6.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -1.6 2.7 -0.82 1.3 0 0 -1.6 2.7 0 0 0.71 -1.2 0 0 0 0
+DEAL::0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 -3.1 5.0 -6.2 10. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 2.7 -4.3 1.3 -2.2 0 0 2.7 -4.3 0 0 -1.2 1.9 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11. 0 0.33 0 5.3 0 0.17 0 0 0 -4.6 0 0 0 -0.14 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11. 0 0.33 0 5.3 0 0.17 0 0 0 -4.6 0 0 0 -0.14 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0 0 0.17 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0 0 0.17 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.3 0 0.17 0 11. 0 0.33 0 0 0 -4.6 0 0 0 -0.14 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.3 0 0.17 0 11. 0 0.33 0 0 0 -4.6 0 0 0 -0.14 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.33 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.33 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-4.6 0 -0.14 0 0 0 0 0 -4.6 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 3.2 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0 0
+DEAL::0 -4.6 0 -0.14 0 0 0 0 0 -4.6 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 3.2 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 -0.14 0 -4.6 0 -0.14 0 0 0 3.2 0 0 0 0.10 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 -0.14 0 -4.6 0 -0.14 0 0 0 3.2 0 0 0 0.10 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17
+DEAL::-0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -1.6 2.7 -0.82 1.3 0 0 0 0 -1.6 2.7 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.1 -1.8 0 0 0.57 -0.92 0.71 -1.2 0 0 0.71 -1.2 0 0 -0.49 0.80 0 0 0 0
+DEAL::0 0 0 0 2.7 -4.3 1.3 -2.2 0 0 0 0 2.7 -4.3 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.8 3.0 0 0 -0.92 1.5 -1.2 1.9 0 0 -1.2 1.9 0 0 0.80 -1.3 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.82 1.3 -1.6 2.7 0 0 0 0 -0.82 1.3 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.57 -0.92 0 0 1.1 -1.8 0.71 -1.2 0 0 0.71 -1.2 0 0 -0.49 0.80 0 0 0 0
+DEAL::0 0 0 0 1.3 -2.2 2.7 -4.3 0 0 0 0 1.3 -2.2 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.92 1.5 0 0 -1.8 3.0 -1.2 1.9 0 0 -1.2 1.9 0 0 0.80 -1.3 0 0 0 0
+DEAL::0 0 0 0 -1.6 2.7 -1.6 2.7 0 0 0 0 -0.82 1.3 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0 0 0.71 -1.2 1.1 -1.8 0 0 0.57 -0.92 0 0 -0.49 0.80 0 0 0 0
+DEAL::0 0 0 0 2.7 -4.3 2.7 -4.3 0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 0 0 -1.2 1.9 -1.8 3.0 0 0 -0.92 1.5 0 0 0.80 -1.3 0 0 0 0
+DEAL::-0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.82 1.3 -0.82 1.3 0 0 0 0 -1.6 2.7 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0 0 0.71 -1.2 0.57 -0.92 0 0 1.1 -1.8 0 0 -0.49 0.80 0 0 0 0
+DEAL::0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 2.7 -4.3 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 0 0 -1.2 1.9 -0.92 1.5 0 0 -1.8 3.0 0 0 0.80 -1.3 0 0 0 0
+DEAL::-0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.71 -1.2 0.71 -1.2 0 0 0 0 0.71 -1.2 0.71 -1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80 0 0 -0.49 0.80 -0.49 0.80 0 0 -0.49 0.80 0 0 0.34 -0.55 0 0 0 0
+DEAL::0 0 0 0 -1.2 1.9 -1.2 1.9 0 0 0 0 -1.2 1.9 -1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3 0 0 0.80 -1.3 0.80 -1.3 0 0 0.80 -1.3 0 0 -0.55 0.90 0 0 0 0
+DEAL::0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 1
+DEAL::0 0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.33 0 11. 0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0 0
+DEAL::0 0.33 0 11. 0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0
+DEAL::0 0 0 0 3.8 6.2 1.9 3.1 0 0 0 0 1.9 3.1 0.94 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 0 0 -0.82 -1.3 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0.71 1.2 0 0 0 0
+DEAL::0 0 0 0 6.2 10. 3.1 5.0 0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 -2.7 -4.3 0 0 -1.3 -2.2 0 0 1.2 1.9 0 0 0 0
+DEAL::0 0 0 0 1.9 3.1 3.8 6.2 0 0 0 0 0.94 1.5 1.9 3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -1.6 -2.7 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0.71 1.2 0 0 0 0
+DEAL::0 0 0 0 3.1 5.0 6.2 10. 0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 -2.7 -4.3 0 0 -1.3 -2.2 0 0 1.2 1.9 0 0 0 0
+DEAL::0 0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.17 0 5.3 0 0 0 0 0 0.33 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0 0
+DEAL::0 0.17 0 5.3 0 0 0 0 0 0.33 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0
+DEAL::0 0 0 0 1.9 3.1 0.94 1.5 0 0 0 0 3.8 6.2 1.9 3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 0 0 -0.82 -1.3 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0.71 1.2 0 0 0 0
+DEAL::0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 6.2 10. 3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 -1.3 -2.2 0 0 -2.7 -4.3 0 0 1.2 1.9 0 0 0 0
+DEAL::0 0 0 0 0.94 1.5 1.9 3.1 0 0 0 0 1.9 3.1 3.8 6.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -1.6 -2.7 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0.71 1.2 0 0 0 0
+DEAL::0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 3.1 5.0 6.2 10. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 -1.3 -2.2 0 0 -2.7 -4.3 0 0 1.2 1.9 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0 0 0.17 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0 0 0.17 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 11. 0 0.17 0 5.3 0 0 0 -0.14 0 0 0 -4.6 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 11. 0 0.17 0 5.3 0 0 0 -0.14 0 0 0 -4.6 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.33 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.33 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 5.3 0 0.33 0 11. 0 0 0 -0.14 0 0 0 -4.6 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 5.3 0 0.33 0 11. 0 0 0 -0.14 0 0 0 -4.6 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.14 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.14 0 -4.6 0 0 0 0 0 -0.14 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 3.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0 0
+DEAL::0 -0.14 0 -4.6 0 0 0 0 0 -0.14 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 3.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -4.6 0 -0.14 0 -4.6 0 0 0 0.10 0 0 0 3.2 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -4.6 0 -0.14 0 -4.6 0 0 0 0.10 0 0 0 3.2 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -1.6 -2.7 -0.82 -1.3 0 0 0 0 -1.6 -2.7 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.1 1.8 0 0 0.57 0.92 0.71 1.2 0 0 0.71 1.2 0 0 -0.49 -0.80 0 0 0 0
+DEAL::0 0 0 0 -2.7 -4.3 -1.3 -2.2 0 0 0 0 -2.7 -4.3 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.8 3.0 0 0 0.92 1.5 1.2 1.9 0 0 1.2 1.9 0 0 -0.80 -1.3 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.82 -1.3 -1.6 -2.7 0 0 0 0 -0.82 -1.3 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.57 0.92 0 0 1.1 1.8 0.71 1.2 0 0 0.71 1.2 0 0 -0.49 -0.80 0 0 0 0
+DEAL::0 0 0 0 -1.3 -2.2 -2.7 -4.3 0 0 0 0 -1.3 -2.2 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.92 1.5 0 0 1.8 3.0 1.2 1.9 0 0 1.2 1.9 0 0 -0.80 -1.3 0 0 0 0
+DEAL::0 0 0 0 -1.6 -2.7 -1.6 -2.7 0 0 0 0 -0.82 -1.3 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0 0 0.71 1.2 1.1 1.8 0 0 0.57 0.92 0 0 -0.49 -0.80 0 0 0 0
+DEAL::0 0 0 0 -2.7 -4.3 -2.7 -4.3 0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 0 0 1.2 1.9 1.8 3.0 0 0 0.92 1.5 0 0 -0.80 -1.3 0 0 0 0
+DEAL::0 0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.82 -1.3 -0.82 -1.3 0 0 0 0 -1.6 -2.7 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0 0 0.71 1.2 0.57 0.92 0 0 1.1 1.8 0 0 -0.49 -0.80 0 0 0 0
+DEAL::0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 -2.7 -4.3 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 0 0 1.2 1.9 0.92 1.5 0 0 1.8 3.0 0 0 -0.80 -1.3 0 0 0 0
+DEAL::0 0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.71 1.2 0.71 1.2 0 0 0 0 0.71 1.2 0.71 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80 0 0 -0.49 -0.80 -0.49 -0.80 0 0 -0.49 -0.80 0 0 0.34 0.55 0 0 0 0
+DEAL::0 0 0 0 1.2 1.9 1.2 1.9 0 0 0 0 1.2 1.9 1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3 0 0 -0.80 -1.3 -0.80 -1.3 0 0 -0.80 -1.3 0 0 0.55 0.90 0 0 0 0
+DEAL::0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 2
+DEAL::3.8 -6.2 1.9 -3.1 0 0 0 0 1.9 -3.1 0.94 -1.5 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 0 0 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 0 0 -0.82 1.3 0 0 0.71 -1.2 0 0
+DEAL::-6.2 10. -3.1 5.0 0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 0 0 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 0 0 1.3 -2.2 0 0 -1.2 1.9 0 0
+DEAL::1.9 -3.1 3.8 -6.2 0 0 0 0 0.94 -1.5 1.9 -3.1 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 0 0 -0.82 1.3 0 0 0.71 -1.2 0 0
+DEAL::-3.1 5.0 -6.2 10. 0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 0 0 1.3 -2.2 0 0 -1.2 1.9 0 0
+DEAL::0 0 0 0 11. 0 0.33 0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 11. 0 0.33 0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::1.9 -3.1 0.94 -1.5 0 0 0 0 3.8 -6.2 1.9 -3.1 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 0 0 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -1.6 2.7 0 0 0.71 -1.2 0 0
+DEAL::-3.1 5.0 -1.5 2.5 0 0 0 0 -6.2 10. -3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 0 0 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 2.7 -4.3 0 0 -1.2 1.9 0 0
+DEAL::0.94 -1.5 1.9 -3.1 0 0 0 0 1.9 -3.1 3.8 -6.2 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -1.6 2.7 0 0 0.71 -1.2 0 0
+DEAL::-1.5 2.5 -3.1 5.0 0 0 0 0 -3.1 5.0 -6.2 10. 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 2.7 -4.3 0 0 -1.2 1.9 0 0
+DEAL::0 0 0 0 5.3 0 0.17 0 0 0 0 0 11. 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 11. 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11. 0 5.3 0 0.33 0 0.17 0 0 0 -0.58 0 0 0 -0.29 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11. 0 5.3 0 0.33 0 0.17 0 0 0 -0.58 0 0 0 -0.29 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.3 0 11. 0 0.17 0 0.33 0 0 0 -0.29 0 0 0 -0.58 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.3 0 11. 0 0.17 0 0.33 0 0 0 -0.29 0 0 0 -0.58 0 -4.6 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-1.6 2.7 -0.82 1.3 0 0 0 0 -1.6 2.7 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 1.1 -1.8 0 0 0.57 -0.92 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0 0 0.71 -1.2 0 0 -0.49 0.80 0 0
+DEAL::2.7 -4.3 1.3 -2.2 0 0 0 0 2.7 -4.3 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 -1.8 3.0 0 0 -0.92 1.5 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 0 0 -1.2 1.9 0 0 0.80 -1.3 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.82 1.3 -1.6 2.7 0 0 0 0 -0.82 1.3 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0.57 -0.92 0 0 1.1 -1.8 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0 0 0.71 -1.2 0 0 -0.49 0.80 0 0
+DEAL::1.3 -2.2 2.7 -4.3 0 0 0 0 1.3 -2.2 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 -0.92 1.5 0 0 -1.8 3.0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 0 0 -1.2 1.9 0 0 0.80 -1.3 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 -4.6 0 -0.14 0 -0.14 0 0 0 0.25 0 0 0 0.25 0 3.2 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 -4.6 0 -0.14 0 -0.14 0 0 0 0.25 0 0 0 0.25 0 3.2 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17
+DEAL::0 0 0 0 -4.6 0 -0.14 0 0 0 0 0 -4.6 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.2 0 0 0 0.10 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0 0 0 0
+DEAL::0 0 0 0 0 -4.6 0 -0.14 0 0 0 0 0 -4.6 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.2 0 0 0 0.10 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-1.6 2.7 -1.6 2.7 0 0 0 0 -0.82 1.3 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0 0 0.71 -1.2 0 0 0 0 0 0 0 0 0 0 0 0 1.1 -1.8 0 0 0.57 -0.92 0 0 -0.49 0.80 0 0
+DEAL::2.7 -4.3 2.7 -4.3 0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 0 0 -1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 -1.8 3.0 0 0 -0.92 1.5 0 0 0.80 -1.3 0 0
+DEAL::0 0 0 0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.82 1.3 -0.82 1.3 0 0 0 0 -1.6 2.7 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0 0 0.71 -1.2 0 0 0 0 0 0 0 0 0 0 0 0 0.57 -0.92 0 0 1.1 -1.8 0 0 -0.49 0.80 0 0
+DEAL::1.3 -2.2 1.3 -2.2 0 0 0 0 2.7 -4.3 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 0 0 -1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 -0.92 1.5 0 0 -1.8 3.0 0 0 0.80 -1.3 0 0
+DEAL::0 0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.71 -1.2 0.71 -1.2 0 0 0 0 0.71 -1.2 0.71 -1.2 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80 0 0 -0.49 0.80 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80 0 0 -0.49 0.80 0 0 0.34 -0.55 0 0
+DEAL::-1.2 1.9 -1.2 1.9 0 0 0 0 -1.2 1.9 -1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3 0 0 0.80 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3 0 0 0.80 -1.3 0 0 -0.55 0.90 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 3
+DEAL::3.8 6.2 1.9 3.1 0 0 0 0 1.9 3.1 0.94 1.5 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0.71 1.2 0 0
+DEAL::6.2 10. 3.1 5.0 0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 0 0 1.2 1.9 0 0
+DEAL::1.9 3.1 3.8 6.2 0 0 0 0 0.94 1.5 1.9 3.1 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0.71 1.2 0 0
+DEAL::3.1 5.0 6.2 10. 0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 0 0 1.2 1.9 0 0
+DEAL::0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.33 0 11. 0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 0.33 0 11. 0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 -0.58 0 0 0 -0.29 0 0 0 0.25 0 0 0 0
+DEAL::1.9 3.1 0.94 1.5 0 0 0 0 3.8 6.2 1.9 3.1 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0.71 1.2 0 0
+DEAL::3.1 5.0 1.5 2.5 0 0 0 0 6.2 10. 3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 0 0 1.2 1.9 0 0
+DEAL::0.94 1.5 1.9 3.1 0 0 0 0 1.9 3.1 3.8 6.2 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0.71 1.2 0 0
+DEAL::1.5 2.5 3.1 5.0 0 0 0 0 3.1 5.0 6.2 10. 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 0 0 1.2 1.9 0 0
+DEAL::0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.17 0 5.3 0 0 0 0 0 0.33 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0.33 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 -0.29 0 0 0 -0.58 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 11. 0 5.3 0 0 0 -0.58 0 0 0 -0.29 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 11. 0 5.3 0 0 0 -0.58 0 0 0 -0.29 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 5.3 0 11. 0 0 0 -0.29 0 0 0 -0.58 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 5.3 0 11. 0 0 0 -0.29 0 0 0 -0.58 0 -0.14 0 0 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25
+DEAL::-1.6 -2.7 -0.82 -1.3 0 0 0 0 -1.6 -2.7 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 1.1 1.8 0 0 0.57 0.92 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0 0 0.71 1.2 0 0 -0.49 -0.80 0 0
+DEAL::-2.7 -4.3 -1.3 -2.2 0 0 0 0 -2.7 -4.3 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 1.8 3.0 0 0 0.92 1.5 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 0 0 1.2 1.9 0 0 -0.80 -1.3 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.82 -1.3 -1.6 -2.7 0 0 0 0 -0.82 -1.3 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0.57 0.92 0 0 1.1 1.8 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0 0 0.71 1.2 0 0 -0.49 -0.80 0 0
+DEAL::-1.3 -2.2 -2.7 -4.3 0 0 0 0 -1.3 -2.2 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0.92 1.5 0 0 1.8 3.0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 0 0 1.2 1.9 0 0 -0.80 -1.3 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 -4.6 0 -4.6 0 0 0 0.25 0 0 0 0.25 0 0.10 0 0 0 3.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 -4.6 0 -4.6 0 0 0 0.25 0 0 0 0.25 0 0.10 0 0 0 3.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17
+DEAL::0 0 0 0 -0.14 0 -4.6 0 0 0 0 0 -0.14 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 3.2 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.14 0 -4.6 0 0 0 0 0 -0.14 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 3.2 0 0.25 0 0 0 0.25 0 0 0 -0.17 0 0 0 0
+DEAL::0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-1.6 -2.7 -1.6 -2.7 0 0 0 0 -0.82 -1.3 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0 0 0.71 1.2 0 0 0 0 0 0 0 0 0 0 0 0 1.1 1.8 0 0 0.57 0.92 0 0 -0.49 -0.80 0 0
+DEAL::-2.7 -4.3 -2.7 -4.3 0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 0 0 1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 1.8 3.0 0 0 0.92 1.5 0 0 -0.80 -1.3 0 0
+DEAL::0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.82 -1.3 -0.82 -1.3 0 0 0 0 -1.6 -2.7 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0 0 0.71 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0.57 0.92 0 0 1.1 1.8 0 0 -0.49 -0.80 0 0
+DEAL::-1.3 -2.2 -1.3 -2.2 0 0 0 0 -2.7 -4.3 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 0 0 1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0.92 1.5 0 0 1.8 3.0 0 0 -0.80 -1.3 0 0
+DEAL::0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.71 1.2 0.71 1.2 0 0 0 0 0.71 1.2 0.71 1.2 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80 0 0 -0.49 -0.80 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80 0 0 -0.49 -0.80 0 0 0.34 0.55 0 0
+DEAL::1.2 1.9 1.2 1.9 0 0 0 0 1.2 1.9 1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3 0 0 -0.80 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3 0 0 -0.80 -1.3 0 0 0.55 0.90 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 4
+DEAL::11. 0 5.3 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0 0
+DEAL::0 11. 0 5.3 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0
+DEAL::5.3 0 11. 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0 0
+DEAL::0 5.3 0 11. 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0
+DEAL::0 0 0 0 11. 0 5.3 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 11. 0 5.3 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 5.3 0 11. 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 5.3 0 11. 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 -4.6 0 0 0 -0.14 0 0 0 0.25 0 0 0 0
+DEAL::0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0
+DEAL::0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.8 -6.2 1.9 -3.1 1.9 -3.1 0.94 -1.5 0 0 -1.6 2.7 0 0 -0.82 1.3 -1.6 2.7 0 0 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6.2 10. -3.1 5.0 -3.1 5.0 -1.5 2.5 0 0 2.7 -4.3 0 0 1.3 -2.2 2.7 -4.3 0 0 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.9 -3.1 3.8 -6.2 0.94 -1.5 1.9 -3.1 0 0 -0.82 1.3 0 0 -1.6 2.7 -1.6 2.7 0 0 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3.1 5.0 -6.2 10. -1.5 2.5 -3.1 5.0 0 0 1.3 -2.2 0 0 2.7 -4.3 2.7 -4.3 0 0 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.9 -3.1 0.94 -1.5 3.8 -6.2 1.9 -3.1 0 0 -1.6 2.7 0 0 -0.82 1.3 -0.82 1.3 0 0 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3.1 5.0 -1.5 2.5 -6.2 10. -3.1 5.0 0 0 2.7 -4.3 0 0 1.3 -2.2 1.3 -2.2 0 0 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.94 -1.5 1.9 -3.1 1.9 -3.1 3.8 -6.2 0 0 -0.82 1.3 0 0 -1.6 2.7 -0.82 1.3 0 0 -1.6 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.5 2.5 -3.1 5.0 -3.1 5.0 -6.2 10. 0 0 1.3 -2.2 0 0 2.7 -4.3 1.3 -2.2 0 0 2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9
+DEAL::-0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 -0.82 1.3 -1.6 2.7 -0.82 1.3 0 0 1.1 -1.8 0 0 0.57 -0.92 0.71 -1.2 0 0 0.71 -1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 1.3 -2.2 2.7 -4.3 1.3 -2.2 0 0 -1.8 3.0 0 0 -0.92 1.5 -1.2 1.9 0 0 -1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3
+DEAL::-0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 -1.6 2.7 -0.82 1.3 -1.6 2.7 0 0 0.57 -0.92 0 0 1.1 -1.8 0.71 -1.2 0 0 0.71 -1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 2.7 -4.3 1.3 -2.2 2.7 -4.3 0 0 -0.92 1.5 0 0 -1.8 3.0 -1.2 1.9 0 0 -1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 2.7 -1.6 2.7 -0.82 1.3 -0.82 1.3 0 0 0.71 -1.2 0 0 0.71 -1.2 1.1 -1.8 0 0 0.57 -0.92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 -4.3 2.7 -4.3 1.3 -2.2 1.3 -2.2 0 0 -1.2 1.9 0 0 -1.2 1.9 -1.8 3.0 0 0 -0.92 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3
+DEAL::0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 -0.82 1.3 -1.6 2.7 -1.6 2.7 0 0 0.71 -1.2 0 0 0.71 -1.2 0.57 -0.92 0 0 1.1 -1.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 1.3 -2.2 2.7 -4.3 2.7 -4.3 0 0 -1.2 1.9 0 0 -1.2 1.9 -0.92 1.5 0 0 -1.8 3.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.80 -1.3
+DEAL::0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -4.6 0 -4.6 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 3.2 0 0 0 0.10 0 0 0 -0.17 0 0 0 0 0
+DEAL::0 0 0 0 0 -4.6 0 -4.6 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 3.2 0 0 0 0.10 0 0 0 -0.17 0 0 0 0
+DEAL::-4.6 0 -4.6 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 3.2 0 0 0 0.10 0 0 0 -0.17 0 0 0
+DEAL::0 -4.6 0 -4.6 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 3.2 0 0 0 0.10 0 0 0 -0.17 0 0
+DEAL::0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 -1.2 0.71 -1.2 0.71 -1.2 0.71 -1.2 0 0 -0.49 0.80 0 0 -0.49 0.80 -0.49 0.80 0 0 -0.49 0.80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.34 -0.55
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 1.9 -1.2 1.9 -1.2 1.9 -1.2 1.9 0 0 0.80 -1.3 0 0 0.80 -1.3 0.80 -1.3 0 0 0.80 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.55 0.90
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::boundary_matrix 5
+DEAL::0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0
+DEAL::0.33 0 0.17 0 0 0 0 0 11. 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0 0
+DEAL::0 0.33 0 0.17 0 0 0 0 0 11. 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0
+DEAL::0.17 0 0.33 0 0 0 0 0 5.3 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0 0
+DEAL::0 0.17 0 0.33 0 0 0 0 0 5.3 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0
+DEAL::0 0 0 0 0.33 0 0.17 0 0 0 0 0 11. 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 0.33 0 0.17 0 0 0 0 0 11. 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 0 0 -0.29 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 0.17 0 0.33 0 0 0 0 0 5.3 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0 0 0 0
+DEAL::0 0 0 0 0 0.17 0 0.33 0 0 0 0 0 5.3 0 11. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.58 0 -0.14 0 0 0 -4.6 0 0 0 0.25 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.8 6.2 1.9 3.1 1.9 3.1 0.94 1.5 0 0 -1.6 -2.7 0 0 -0.82 -1.3 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.2 10. 3.1 5.0 3.1 5.0 1.5 2.5 0 0 -2.7 -4.3 0 0 -1.3 -2.2 -2.7 -4.3 0 0 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.9 3.1 3.8 6.2 0.94 1.5 1.9 3.1 0 0 -0.82 -1.3 0 0 -1.6 -2.7 -1.6 -2.7 0 0 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.1 5.0 6.2 10. 1.5 2.5 3.1 5.0 0 0 -1.3 -2.2 0 0 -2.7 -4.3 -2.7 -4.3 0 0 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.9 3.1 0.94 1.5 3.8 6.2 1.9 3.1 0 0 -1.6 -2.7 0 0 -0.82 -1.3 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.1 5.0 1.5 2.5 6.2 10. 3.1 5.0 0 0 -2.7 -4.3 0 0 -1.3 -2.2 -1.3 -2.2 0 0 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.94 1.5 1.9 3.1 1.9 3.1 3.8 6.2 0 0 -0.82 -1.3 0 0 -1.6 -2.7 -0.82 -1.3 0 0 -1.6 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 2.5 3.1 5.0 3.1 5.0 6.2 10. 0 0 -1.3 -2.2 0 0 -2.7 -4.3 -1.3 -2.2 0 0 -2.7 -4.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9
+DEAL::0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 -0.82 -1.3 -1.6 -2.7 -0.82 -1.3 0 0 1.1 1.8 0 0 0.57 0.92 0.71 1.2 0 0 0.71 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 -1.3 -2.2 -2.7 -4.3 -1.3 -2.2 0 0 1.8 3.0 0 0 0.92 1.5 1.2 1.9 0 0 1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3
+DEAL::0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 -1.6 -2.7 -0.82 -1.3 -1.6 -2.7 0 0 0.57 0.92 0 0 1.1 1.8 0.71 1.2 0 0 0.71 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 -2.7 -4.3 -1.3 -2.2 -2.7 -4.3 0 0 0.92 1.5 0 0 1.8 3.0 1.2 1.9 0 0 1.2 1.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 -2.7 -1.6 -2.7 -0.82 -1.3 -0.82 -1.3 0 0 0.71 1.2 0 0 0.71 1.2 1.1 1.8 0 0 0.57 0.92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 -4.3 -2.7 -4.3 -1.3 -2.2 -1.3 -2.2 0 0 1.2 1.9 0 0 1.2 1.9 1.8 3.0 0 0 0.92 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 -0.82 -1.3 -1.6 -2.7 -1.6 -2.7 0 0 0.71 1.2 0 0 0.71 1.2 0.57 0.92 0 0 1.1 1.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.49 -0.80
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 -1.3 -2.2 -2.7 -4.3 -2.7 -4.3 0 0 1.2 1.9 0 0 1.2 1.9 0.92 1.5 0 0 1.8 3.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.80 -1.3
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 -4.6 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0.10 0 0 0 3.2 0 0 0 -0.17 0 0 0 0 0
+DEAL::0 0 0 0 0 -0.14 0 -0.14 0 0 0 0 0 -4.6 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0.10 0 0 0 3.2 0 0 0 -0.17 0 0 0 0
+DEAL::-0.14 0 -0.14 0 0 0 0 0 -4.6 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 3.2 0 0 0 -0.17 0 0 0
+DEAL::0 -0.14 0 -0.14 0 0 0 0 0 -4.6 0 -4.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0.10 0 0 0 3.2 0 0 0 -0.17 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.71 1.2 0.71 1.2 0.71 1.2 0.71 1.2 0 0 -0.49 -0.80 0 0 -0.49 -0.80 -0.49 -0.80 0 0 -0.49 -0.80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.34 0.55
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 1.9 1.2 1.9 1.2 1.9 1.2 1.9 0 0 -0.80 -1.3 0 0 -0.80 -1.3 -0.80 -1.3 0 0 -0.80 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0.90
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::face_matrix 0
+DEAL::M11
+DEAL::0 0 0.17 0 0 0 0 0 0 0 0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.17 0 0 0 0 0 0 0 0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.17 0 5.3 0 0 0 0 0 0.083 0 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0.12 0 0 0
+DEAL::0 0.17 0 5.3 0 0 0 0 0 0.083 0 2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0.12 0 0
+DEAL::0 0 0 0 1.9 3.1 0.94 1.5 0 0 0 0 0.94 1.5 0.47 0.77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -0.41 -0.67 -0.82 -1.3 0 0 -0.41 -0.67 0 0 0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 1.5 2.5 0.77 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -0.67 -1.1 -1.3 -2.2 0 0 -0.67 -1.1 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0.94 1.5 1.9 3.1 0 0 0 0 0.47 0.77 0.94 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.41 -0.67 0 0 -0.82 -1.3 -0.82 -1.3 0 0 -0.41 -0.67 0 0 0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 0.77 1.2 1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.67 -1.1 0 0 -1.3 -2.2 -1.3 -2.2 0 0 -0.67 -1.1 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0.083 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.083 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.083 0 2.7 0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0.12 0 0 0
+DEAL::0 0.083 0 2.7 0 0 0 0 0 0.17 0 5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0.12 0 0
+DEAL::0 0 0 0 0.94 1.5 0.47 0.77 0 0 0 0 1.9 3.1 0.94 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 -1.3 0 0 -0.41 -0.67 -0.41 -0.67 0 0 -0.82 -1.3 0 0 0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 1.5 2.5 0.77 1.2 0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -0.67 -1.1 -0.67 -1.1 0 0 -1.3 -2.2 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0.47 0.77 0.94 1.5 0 0 0 0 0.94 1.5 1.9 3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.41 -0.67 0 0 -0.82 -1.3 -0.41 -0.67 0 0 -0.82 -1.3 0 0 0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 0.77 1.2 1.5 2.5 0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.67 -1.1 0 0 -1.3 -2.2 -0.67 -1.1 0 0 -1.3 -2.2 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.083 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.083 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 5.3 0 0.083 0 2.7 0 0 0 -0.072 0 0 0 -2.3 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 5.3 0 0.083 0 2.7 0 0 0 -0.072 0 0 0 -2.3 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.083 0 0 0 0.17 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.083 0 0 0 0.17 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.083 0 2.7 0 0.17 0 5.3 0 0 0 -0.072 0 0 0 -2.3 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.083 0 2.7 0 0.17 0 5.3 0 0 0 -0.072 0 0 0 -2.3 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12
+DEAL::0 0 -0.072 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.072 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -0.072 0 0 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -0.072 0 0 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-0.072 0 -2.3 0 0 0 0 0 -0.072 0 -2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.050 0 0 0 1.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 -0.087 0 0 0
+DEAL::0 -0.072 0 -2.3 0 0 0 0 0 -0.072 0 -2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.050 0 0 0 1.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 -0.087 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 -2.3 0 -0.072 0 -2.3 0 0 0 0.050 0 0 0 1.6 0 0.12 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 -2.3 0 -0.072 0 -2.3 0 0 0 0.050 0 0 0 1.6 0 0.12 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.82 -1.3 -0.41 -0.67 0 0 0 0 -0.82 -1.3 -0.41 -0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.57 0.92 0 0 0.28 0.46 0.35 0.58 0 0 0.35 0.58 0 0 -0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 -1.3 -2.2 -0.67 -1.1 0 0 0 0 -1.3 -2.2 -0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.92 1.5 0 0 0.46 0.75 0.58 0.94 0 0 0.58 0.94 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.41 -0.67 -0.82 -1.3 0 0 0 0 -0.41 -0.67 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.28 0.46 0 0 0.57 0.92 0.35 0.58 0 0 0.35 0.58 0 0 -0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 -0.67 -1.1 -1.3 -2.2 0 0 0 0 -0.67 -1.1 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.46 0.75 0 0 0.92 1.5 0.58 0.94 0 0 0.58 0.94 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 -0.82 -1.3 -0.82 -1.3 0 0 0 0 -0.41 -0.67 -0.41 -0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.58 0 0 0.35 0.58 0.57 0.92 0 0 0.28 0.46 0 0 -0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 -0.67 -1.1 -0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.58 0.94 0 0 0.58 0.94 0.92 1.5 0 0 0.46 0.75 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 -0.29 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.29 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.41 -0.67 -0.41 -0.67 0 0 0 0 -0.82 -1.3 -0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.58 0 0 0.35 0.58 0.28 0.46 0 0 0.57 0.92 0 0 -0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 -0.67 -1.1 -0.67 -1.1 0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.58 0.94 0 0 0.58 0.94 0.46 0.75 0 0 0.92 1.5 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 -0.14 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.14 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.35 0.58 0.35 0.58 0 0 0 0 0.35 0.58 0.35 0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.25 -0.40 0 0 -0.25 -0.40 -0.25 -0.40 0 0 -0.25 -0.40 0 0 0.17 0.28 0 0 0 0
+DEAL::0 0 0 0 0.58 0.94 0.58 0.94 0 0 0 0 0.58 0.94 0.58 0.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.40 -0.65 0 0 -0.40 -0.65 -0.40 -0.65 0 0 -0.40 -0.65 0 0 0.28 0.45 0 0 0 0
+DEAL::0 0 0.12 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.12 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::M22
+DEAL::5.3 0 0.17 0 0 0 0 0 2.7 0 0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.3 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0.12 0 0 0
+DEAL::0 5.3 0 0.17 0 0 0 0 0 2.7 0 0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.3 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0.12 0 0
+DEAL::0.17 0 0 0 0 0 0 0 0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.17 0 0 0 0 0 0 0 0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 1.9 -3.1 0.94 -1.5 0 0 0 0 0.94 -1.5 0.47 -0.77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -0.41 0.67 -0.82 1.3 0 0 -0.41 0.67 0 0 0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 -1.5 2.5 -0.77 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 0.67 -1.1 1.3 -2.2 0 0 0.67 -1.1 0 0 -0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0.94 -1.5 1.9 -3.1 0 0 0 0 0.47 -0.77 0.94 -1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.41 0.67 0 0 -0.82 1.3 -0.82 1.3 0 0 -0.41 0.67 0 0 0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 -0.77 1.2 -1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.67 -1.1 0 0 1.3 -2.2 1.3 -2.2 0 0 0.67 -1.1 0 0 -0.58 0.94 0 0 0 0
+DEAL::2.7 0 0.083 0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.3 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0.12 0 0 0
+DEAL::0 2.7 0 0.083 0 0 0 0 0 5.3 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.3 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0.12 0 0
+DEAL::0.083 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.083 0 0 0 0 0 0 0 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.94 -1.5 0.47 -0.77 0 0 0 0 1.9 -3.1 0.94 -1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.82 1.3 0 0 -0.41 0.67 -0.41 0.67 0 0 -0.82 1.3 0 0 0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 -1.5 2.5 -0.77 1.2 0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 0.67 -1.1 0.67 -1.1 0 0 1.3 -2.2 0 0 -0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0.47 -0.77 0.94 -1.5 0 0 0 0 0.94 -1.5 1.9 -3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.41 0.67 0 0 -0.82 1.3 -0.41 0.67 0 0 -0.82 1.3 0 0 0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 -0.77 1.2 -1.5 2.5 0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.67 -1.1 0 0 1.3 -2.2 0.67 -1.1 0 0 1.3 -2.2 0 0 -0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.3 0 0.17 0 2.7 0 0.083 0 0 0 -2.3 0 0 0 -0.072 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.3 0 0.17 0 2.7 0 0.083 0 0 0 -2.3 0 0 0 -0.072 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.083 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.17 0 0 0 0.083 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 0 0.083 0 5.3 0 0.17 0 0 0 -2.3 0 0 0 -0.072 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 0 0.083 0 5.3 0 0.17 0 0 0 -2.3 0 0 0 -0.072 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.083 0 0 0 0.17 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.083 0 0 0 0.17 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-2.3 0 -0.072 0 0 0 0 0 -2.3 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 1.6 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 -0.087 0 0 0
+DEAL::0 -2.3 0 -0.072 0 0 0 0 0 -2.3 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 1.6 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 -0.087 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.3 0 -0.072 0 -2.3 0 -0.072 0 0 0 1.6 0 0 0 0.050 0 0.12 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.3 0 -0.072 0 -2.3 0 -0.072 0 0 0 1.6 0 0 0 0.050 0 0.12 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087
+DEAL::-0.072 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.072 0 0 0 0 0 0 0 -0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -0.072 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.072 0 0 0 -0.072 0 0 0 0 0 0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.29 0 0 0 -0.14 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.82 1.3 -0.41 0.67 0 0 0 0 -0.82 1.3 -0.41 0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.57 -0.92 0 0 0.28 -0.46 0.35 -0.58 0 0 0.35 -0.58 0 0 -0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 1.3 -2.2 0.67 -1.1 0 0 0 0 1.3 -2.2 0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.92 1.5 0 0 -0.46 0.75 -0.58 0.94 0 0 -0.58 0.94 0 0 0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.14 0 0 0 -0.29 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.41 0.67 -0.82 1.3 0 0 0 0 -0.41 0.67 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.28 -0.46 0 0 0.57 -0.92 0.35 -0.58 0 0 0.35 -0.58 0 0 -0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 0.67 -1.1 1.3 -2.2 0 0 0 0 0.67 -1.1 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.46 0.75 0 0 -0.92 1.5 -0.58 0.94 0 0 -0.58 0.94 0 0 0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 -0.82 1.3 -0.82 1.3 0 0 0 0 -0.41 0.67 -0.41 0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 -0.58 0 0 0.35 -0.58 0.57 -0.92 0 0 0.28 -0.46 0 0 -0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 0.67 -1.1 0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0.94 0 0 -0.58 0.94 -0.92 1.5 0 0 -0.46 0.75 0 0 0.40 -0.65 0 0 0 0
+DEAL::-0.29 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.29 0 0 0 0 0 0 0 -0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.41 0.67 -0.41 0.67 0 0 0 0 -0.82 1.3 -0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 -0.58 0 0 0.35 -0.58 0.28 -0.46 0 0 0.57 -0.92 0 0 -0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 0.67 -1.1 0.67 -1.1 0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0.94 0 0 -0.58 0.94 -0.46 0.75 0 0 -0.92 1.5 0 0 0.40 -0.65 0 0 0 0
+DEAL::-0.14 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.14 0 0 0 0 0 0 0 -0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.35 -0.58 0.35 -0.58 0 0 0 0 0.35 -0.58 0.35 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.25 0.40 0 0 -0.25 0.40 -0.25 0.40 0 0 -0.25 0.40 0 0 0.17 -0.28 0 0 0 0
+DEAL::0 0 0 0 -0.58 0.94 -0.58 0.94 0 0 0 0 -0.58 0.94 -0.58 0.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.40 -0.65 0 0 0.40 -0.65 0.40 -0.65 0 0 0.40 -0.65 0 0 -0.28 0.45 0 0 0 0
+DEAL::0.12 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.12 0 0 0 0 0 0 0 0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0 0 0 0.12 0 0 0 0 0 -0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::M12
+DEAL::-0.17 0 0 0 0 0 0 0 -0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.17 0 0 0 0 0 0 0 -0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-5.3 0 -0.17 0 0 0 0 0 -2.7 0 -0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 2.3 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 -0.12 0 0 0
+DEAL::0 -5.3 0 -0.17 0 0 0 0 0 -2.7 0 -0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 2.3 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 -0.12 0 0
+DEAL::0 0 0 0 -1.9 3.1 -0.94 1.5 0 0 0 0 -0.94 1.5 -0.47 0.77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.82 -1.3 0 0 0.41 -0.67 0.82 -1.3 0 0 0.41 -0.67 0 0 -0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 -1.5 2.5 -0.77 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 0.67 -1.1 1.3 -2.2 0 0 0.67 -1.1 0 0 -0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 -0.94 1.5 -1.9 3.1 0 0 0 0 -0.47 0.77 -0.94 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.41 -0.67 0 0 0.82 -1.3 0.82 -1.3 0 0 0.41 -0.67 0 0 -0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 -0.77 1.2 -1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.67 -1.1 0 0 1.3 -2.2 1.3 -2.2 0 0 0.67 -1.1 0 0 -0.58 0.94 0 0 0 0
+DEAL::-0.083 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.083 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::-2.7 0 -0.083 0 0 0 0 0 -5.3 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 2.3 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 -0.12 0 0 0
+DEAL::0 -2.7 0 -0.083 0 0 0 0 0 -5.3 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 2.3 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 -0.12 0 0
+DEAL::0 0 0 0 -0.94 1.5 -0.47 0.77 0 0 0 0 -1.9 3.1 -0.94 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.82 -1.3 0 0 0.41 -0.67 0.41 -0.67 0 0 0.82 -1.3 0 0 -0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 -1.5 2.5 -0.77 1.2 0 0 0 0 -3.1 5.0 -1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 -2.2 0 0 0.67 -1.1 0.67 -1.1 0 0 1.3 -2.2 0 0 -0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 -0.47 0.77 -0.94 1.5 0 0 0 0 -0.94 1.5 -1.9 3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.41 -0.67 0 0 0.82 -1.3 0.41 -0.67 0 0 0.82 -1.3 0 0 -0.35 0.58 0 0 0 0
+DEAL::0 0 0 0 -0.77 1.2 -1.5 2.5 0 0 0 0 -1.5 2.5 -3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.67 -1.1 0 0 1.3 -2.2 0.67 -1.1 0 0 1.3 -2.2 0 0 -0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 -0.083 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 -0.083 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5.3 0 -0.17 0 -2.7 0 -0.083 0 0 0 2.3 0 0 0 0.072 0 0.29 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5.3 0 -0.17 0 -2.7 0 -0.083 0 0 0 2.3 0 0 0 0.072 0 0.29 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.083 0 0 0 -0.17 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.083 0 0 0 -0.17 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 0 -0.083 0 -5.3 0 -0.17 0 0 0 2.3 0 0 0 0.072 0 0.14 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.7 0 -0.083 0 -5.3 0 -0.17 0 0 0 2.3 0 0 0 0.072 0 0.14 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12
+DEAL::0.072 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.072 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0.072 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0.072 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::2.3 0 0.072 0 0 0 0 0 2.3 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0.087 0 0 0
+DEAL::0 2.3 0 0.072 0 0 0 0 0 2.3 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0.087 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.3 0 0.072 0 2.3 0 0.072 0 0 0 -1.6 0 0 0 -0.050 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.3 0 0.072 0 2.3 0 0.072 0 0 0 -1.6 0 0 0 -0.050 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.82 -1.3 0.41 -0.67 0 0 0 0 0.82 -1.3 0.41 -0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.57 0.92 0 0 -0.28 0.46 -0.35 0.58 0 0 -0.35 0.58 0 0 0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 1.3 -2.2 0.67 -1.1 0 0 0 0 1.3 -2.2 0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.92 1.5 0 0 -0.46 0.75 -0.58 0.94 0 0 -0.58 0.94 0 0 0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.41 -0.67 0.82 -1.3 0 0 0 0 0.41 -0.67 0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.28 0.46 0 0 -0.57 0.92 -0.35 0.58 0 0 -0.35 0.58 0 0 0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 0.67 -1.1 1.3 -2.2 0 0 0 0 0.67 -1.1 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.46 0.75 0 0 -0.92 1.5 -0.58 0.94 0 0 -0.58 0.94 0 0 0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 0.82 -1.3 0.82 -1.3 0 0 0 0 0.41 -0.67 0.41 -0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.35 0.58 0 0 -0.35 0.58 -0.57 0.92 0 0 -0.28 0.46 0 0 0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 0.67 -1.1 0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0.94 0 0 -0.58 0.94 -0.92 1.5 0 0 -0.46 0.75 0 0 0.40 -0.65 0 0 0 0
+DEAL::0.29 0 0 0 0 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.29 0 0 0 0 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.41 -0.67 0.41 -0.67 0 0 0 0 0.82 -1.3 0.82 -1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.35 0.58 0 0 -0.35 0.58 -0.28 0.46 0 0 -0.57 0.92 0 0 0.25 -0.40 0 0 0 0
+DEAL::0 0 0 0 0.67 -1.1 0.67 -1.1 0 0 0 0 1.3 -2.2 1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.58 0.94 0 0 -0.58 0.94 -0.46 0.75 0 0 -0.92 1.5 0 0 0.40 -0.65 0 0 0 0
+DEAL::0.14 0 0 0 0 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0.14 0 0 0 0 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.35 0.58 -0.35 0.58 0 0 0 0 -0.35 0.58 -0.35 0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 -0.40 0 0 0.25 -0.40 0.25 -0.40 0 0 0.25 -0.40 0 0 -0.17 0.28 0 0 0 0
+DEAL::0 0 0 0 -0.58 0.94 -0.58 0.94 0 0 0 0 -0.58 0.94 -0.58 0.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.40 -0.65 0 0 0.40 -0.65 0.40 -0.65 0 0 0.40 -0.65 0 0 -0.28 0.45 0 0 0 0
+DEAL::-0.12 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 -0.12 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::M21
+DEAL::-0.17 0 -5.3 0 0 0 0 0 -0.083 0 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 -0.12 0 0 0
+DEAL::0 -0.17 0 -5.3 0 0 0 0 0 -0.083 0 -2.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 -0.12 0 0
+DEAL::0 0 -0.17 0 0 0 0 0 0 0 -0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.17 0 0 0 0 0 0 0 -0.083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -1.9 -3.1 -0.94 -1.5 0 0 0 0 -0.94 -1.5 -0.47 -0.77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.82 1.3 0 0 0.41 0.67 0.82 1.3 0 0 0.41 0.67 0 0 -0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 1.5 2.5 0.77 1.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -0.67 -1.1 -1.3 -2.2 0 0 -0.67 -1.1 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 -0.94 -1.5 -1.9 -3.1 0 0 0 0 -0.47 -0.77 -0.94 -1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.41 0.67 0 0 0.82 1.3 0.82 1.3 0 0 0.41 0.67 0 0 -0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 0.77 1.2 1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.67 -1.1 0 0 -1.3 -2.2 -1.3 -2.2 0 0 -0.67 -1.1 0 0 0.58 0.94 0 0 0 0
+DEAL::-0.083 0 -2.7 0 0 0 0 0 -0.17 0 -5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 -0.12 0 0 0
+DEAL::0 -0.083 0 -2.7 0 0 0 0 0 -0.17 0 -5.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 -0.12 0 0
+DEAL::0 0 -0.083 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.083 0 0 0 0 0 0 0 -0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.94 -1.5 -0.47 -0.77 0 0 0 0 -1.9 -3.1 -0.94 -1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.82 1.3 0 0 0.41 0.67 0.41 0.67 0 0 0.82 1.3 0 0 -0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 1.5 2.5 0.77 1.2 0 0 0 0 3.1 5.0 1.5 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3 -2.2 0 0 -0.67 -1.1 -0.67 -1.1 0 0 -1.3 -2.2 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 -0.47 -0.77 -0.94 -1.5 0 0 0 0 -0.94 -1.5 -1.9 -3.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.41 0.67 0 0 0.82 1.3 0.41 0.67 0 0 0.82 1.3 0 0 -0.35 -0.58 0 0 0 0
+DEAL::0 0 0 0 0.77 1.2 1.5 2.5 0 0 0 0 1.5 2.5 3.1 5.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.67 -1.1 0 0 -1.3 -2.2 -0.67 -1.1 0 0 -1.3 -2.2 0 0 0.58 0.94 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 -5.3 0 -0.083 0 -2.7 0 0 0 0.072 0 0 0 2.3 0 0.29 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 -5.3 0 -0.083 0 -2.7 0 0 0 0.072 0 0 0 2.3 0 0.29 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 -0.083 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.17 0 0 0 -0.083 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.083 0 -2.7 0 -0.17 0 -5.3 0 0 0 0.072 0 0 0 2.3 0 0.14 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.083 0 -2.7 0 -0.17 0 -5.3 0 0 0 0.072 0 0 0 2.3 0 0.14 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.083 0 0 0 -0.17 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.083 0 0 0 -0.17 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0.072 0 2.3 0 0 0 0 0 0.072 0 2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.050 0 0 0 -1.6 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0.087 0 0 0
+DEAL::0 0.072 0 2.3 0 0 0 0 0 0.072 0 2.3 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.050 0 0 0 -1.6 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0.087 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 2.3 0 0.072 0 2.3 0 0 0 -0.050 0 0 0 -1.6 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 2.3 0 0.072 0 2.3 0 0 0 -0.050 0 0 0 -1.6 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087
+DEAL::0 0 0.072 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.072 0 0 0 0 0 0 0 0.072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0.072 0 0 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.072 0 0 0 0.072 0 0 0 0 0 0 0 -0.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.29 0 0 0 0.14 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.82 1.3 0.41 0.67 0 0 0 0 0.82 1.3 0.41 0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.57 -0.92 0 0 -0.28 -0.46 -0.35 -0.58 0 0 -0.35 -0.58 0 0 0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 -1.3 -2.2 -0.67 -1.1 0 0 0 0 -1.3 -2.2 -0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.92 1.5 0 0 0.46 0.75 0.58 0.94 0 0 0.58 0.94 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0 0 0 0.29 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.41 0.67 0.82 1.3 0 0 0 0 0.41 0.67 0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.28 -0.46 0 0 -0.57 -0.92 -0.35 -0.58 0 0 -0.35 -0.58 0 0 0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 -0.67 -1.1 -1.3 -2.2 0 0 0 0 -0.67 -1.1 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.46 0.75 0 0 0.92 1.5 0.58 0.94 0 0 0.58 0.94 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 0 0 0.82 1.3 0.82 1.3 0 0 0 0 0.41 0.67 0.41 0.67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.35 -0.58 0 0 -0.35 -0.58 -0.57 -0.92 0 0 -0.28 -0.46 0 0 0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 -0.67 -1.1 -0.67 -1.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.58 0.94 0 0 0.58 0.94 0.92 1.5 0 0 0.46 0.75 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 0.29 0 0 0 0 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.29 0 0 0 0 0 0 0 0.14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0.41 0.67 0.41 0.67 0 0 0 0 0.82 1.3 0.82 1.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.35 -0.58 0 0 -0.35 -0.58 -0.28 -0.46 0 0 -0.57 -0.92 0 0 0.25 0.40 0 0 0 0
+DEAL::0 0 0 0 -0.67 -1.1 -0.67 -1.1 0 0 0 0 -1.3 -2.2 -1.3 -2.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.58 0.94 0 0 0.58 0.94 0.46 0.75 0 0 0.92 1.5 0 0 -0.40 -0.65 0 0 0 0
+DEAL::0 0 0.14 0 0 0 0 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0.14 0 0 0 0 0 0 0 0.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 -0.35 -0.58 -0.35 -0.58 0 0 0 0 -0.35 -0.58 -0.35 -0.58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0.40 0 0 0.25 0.40 0.25 0.40 0 0 0.25 0.40 0 0 -0.17 -0.28 0 0 0 0
+DEAL::0 0 0 0 0.58 0.94 0.58 0.94 0 0 0 0 0.58 0.94 0.58 0.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.40 -0.65 0 0 -0.40 -0.65 -0.40 -0.65 0 0 -0.40 -0.65 0 0 0.28 0.45 0 0 0 0
+DEAL::0 0 -0.12 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 -0.12 0 0 0 0 0 0 0 -0.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.12 0 0 0 -0.12 0 0 0 0 0 0 0 0.087 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+DEAL::Residuals 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--- /dev/null
+/**********************************************************************
+ * $Id: constraint_test.cc -1 $
+ *
+ * Copyright Guido Kanschat, 2010, 2012
+ *
+ **********************************************************************/
+
+// H2-elements implemented through constraints on the degrees of
+// freedom. After adding all constrained lines, the program hangs in
+// constraints.close().
+// This is because it contains a cycle. The test now checks that this
+// is detected.
+
+
+#include <deal.II/base/job_identifier.h>
+#include <deal.II/grid/grid_generator.h>
+
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/dofs/dof_tools.h>
+
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+
+using namespace dealii;
+
+template <int dim>
+void
+setup_constraints(const DoFHandler<dim>& dof_handler)
+{
+ ConstraintMatrix constraints;
+ constraints.clear();
+ const FiniteElement<dim>& fe = dof_handler.get_fe();
+
+ // Set up derivative constraints to
+ // make element C1
+ std::vector<std::vector<std::vector<double> > > vertex_constraints(
+ GeometryInfo<dim>::vertices_per_cell, std::vector<std::vector<double> >(
+ dim+1, std::vector<double>(fe.dofs_per_cell, 0.)));
+
+ for (unsigned int vertex=0;vertex<GeometryInfo<dim>::vertices_per_cell;++vertex)
+ {
+ Point<dim> v;
+ for (unsigned int d=0;d<dim;++d)
+ {
+ const unsigned int ds = 1<<d;
+ const unsigned int id = vertex/ds;
+ v[d] = (id%2 != 0) ? 1. : 0.;
+ }
+
+ for (unsigned int j=0;j<fe.dofs_per_cell;++j)
+ {
+ for (unsigned int d=0;d<dim;++d)
+ {
+ const double f = fe.shape_grad(j,v)[d];
+ if (std::fabs(f) > 1.e-12)
+ vertex_constraints[vertex][d][j] = f;
+ }
+ const double f = fe.shape_grad_grad(j,v)[0][1];
+ if (std::fabs(f) > 1.e-12)
+ vertex_constraints[vertex][dim][j] = f;
+ }
+ }
+
+ std::vector<unsigned int> cell_indices(fe.dofs_per_cell);
+ std::vector<unsigned int> neighbor_indices(fe.dofs_per_cell);
+
+ for (typename DoFHandler<dim>::active_cell_iterator cell = dof_handler.begin_active();
+ cell != dof_handler.end();++cell)
+ {
+ deallog << "New cell" << std::endl;
+
+ cell->get_dof_indices(cell_indices);
+
+ // Do lower left and upper
+ // right vertex
+ for (unsigned int face=0;face<GeometryInfo<dim>::faces_per_cell;face+=2)
+ {
+ if (cell->at_boundary(face)) continue;
+ for (unsigned int fvertex=0;fvertex<GeometryInfo<dim>::vertices_per_face;++fvertex)
+ {
+ const unsigned int other_face = (face==0) ? (2+fvertex) : fvertex;
+ if (cell->at_boundary(other_face)) continue;
+
+ const unsigned int vertex = GeometryInfo<dim>::face_to_cell_vertices(face, fvertex);
+ typename DoFHandler<dim>::active_cell_iterator neighbor = cell->neighbor(other_face);
+ const unsigned int neighbor_face = cell->neighbor_of_neighbor(other_face);
+ neighbor->get_dof_indices(neighbor_indices);
+ unsigned int neighbor_vertex = GeometryInfo<dim>::face_to_cell_vertices(neighbor_face, fvertex);
+
+ const unsigned int d = GeometryInfo<dim>::unit_normal_direction[other_face];
+
+ std::vector<std::pair<unsigned int, double> > rhs;
+ const unsigned int constrained = fe.face_to_cell_index(
+ (fvertex == 0) ? 2 : fe.dofs_per_face-1, face);
+ double constrained_weight = 0.;
+
+ for (unsigned int i=0;i<fe.dofs_per_cell;++i)
+ {
+ if (i == constrained)
+ constrained_weight = vertex_constraints[vertex][d][i];
+ else
+ if (vertex_constraints[vertex][d][i] != 0.)
+ rhs.push_back(std::make_pair(cell_indices[i], -vertex_constraints[vertex][d][i]));
+ if (vertex_constraints[neighbor_vertex][d][i] != 0.)
+ rhs.push_back(std::make_pair(neighbor_indices[i], vertex_constraints[neighbor_vertex][d][i]));
+ }
+ deallog << " v" << vertex
+ << " f" << face
+ << " o" << other_face
+ << " d" << d
+ << " l" << constrained
+ << " g" << cell_indices[constrained]
+// << " w " << constrained_weight
+ << " rhs ";
+ for (unsigned int i=0;i<rhs.size();++i)
+ deallog << ' ' << rhs[i].first;
+ deallog << std::endl;
+ for (unsigned int i=0;i<rhs.size();++i)
+ rhs[i].second /= constrained_weight;
+ constraints.add_line(cell_indices[constrained]);
+ constraints.add_entries(cell_indices[constrained], rhs);
+ }
+ }
+ }
+
+ deallog << "Closing" << std::endl;
+ deal_II_exceptions::disable_abort_on_exception();
+ constraints.close();
+ deallog << "Closed" << std::endl;
+}
+
+
+template <int dim>
+void
+run(const FiniteElement<dim>& fe)
+{
+ deallog << "Element: " << fe.get_name() << std::endl;
+
+ Triangulation<dim> triangulation;
+ GridGenerator::hyper_cube (triangulation, -1, 1);
+ triangulation.refine_global(2);
+ deallog << "Triangulation "
+ << triangulation.n_active_cells() << " cells, "
+ << triangulation.n_levels() << " levels" << std::endl;
+ DoFHandler<dim> dof_handler(triangulation);
+ dof_handler.distribute_dofs(fe);
+ setup_constraints (dof_handler);
+}
+
+
+int main()
+{
+ const std::string logname = JobIdentifier::base_name(__FILE__) + std::string("/output");
+ std::ofstream logfile(logname.c_str());
+ deallog.attach(logfile);
+
+ FE_Q<2> fe(3);
+ run(fe);
+}
--- /dev/null
+
+DEAL::Element: FE_Q<2>(3)
+DEAL::Triangulation 16 cells, 3 levels
+DEAL::New cell
+DEAL::New cell
+DEAL:: v2 f0 o3 d1 l5 g7 rhs 1 17 3 40 6 41 42
+DEAL::New cell
+DEAL:: v1 f2 o1 d0 l9 g11 rhs 2 3 29 40 10 43 44
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g32 rhs 3 1 29 3 6 33 7
+DEAL:: v2 f0 o3 d1 l5 g33 rhs 3 40 29 103 32 104 105
+DEAL:: v0 f2 o0 d0 l8 g22 rhs 3 2 17 3 10 23 11
+DEAL:: v1 f2 o1 d0 l9 g23 rhs 3 17 40 73 22 76 77
+DEAL::New cell
+DEAL:: v2 f0 o3 d1 l5 g19 rhs 16 50 17 73 18 74 75
+DEAL::New cell
+DEAL:: v2 f0 o3 d1 l5 g52 rhs 49 62 50 82 51 83 84
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g41 rhs 17 16 40 17 18 42 19
+DEAL:: v2 f0 o3 d1 l5 g42 rhs 17 73 40 133 41 134 135
+DEAL:: v0 f2 o0 d0 l8 g55 rhs 17 3 50 17 22 56 23
+DEAL:: v1 f2 o1 d0 l9 g56 rhs 17 50 73 82 55 85 86
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g74 rhs 50 49 73 50 51 75 52
+DEAL:: v2 f0 o3 d1 l5 g75 rhs 50 82 73 142 74 143 144
+DEAL:: v0 f2 o0 d0 l8 g67 rhs 50 17 62 50 55 68 56
+DEAL::New cell
+DEAL:: v1 f2 o1 d0 l9 g35 rhs 28 29 92 103 34 106 107
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g95 rhs 29 3 92 29 32 96 33
+DEAL:: v2 f0 o3 d1 l5 g96 rhs 29 103 92 124 95 125 126
+DEAL:: v0 f2 o0 d0 l8 g43 rhs 29 28 40 29 34 44 35
+DEAL:: v1 f2 o1 d0 l9 g44 rhs 29 40 103 133 43 136 137
+DEAL::New cell
+DEAL:: v1 f2 o1 d0 l9 g98 rhs 91 92 113 124 97 127 128
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g116 rhs 92 29 113 92 95 117 96
+DEAL:: v0 f2 o0 d0 l8 g106 rhs 92 91 103 92 97 107 98
+DEAL:: v1 f2 o1 d0 l9 g107 rhs 92 103 124 151 106 154 155
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g104 rhs 40 17 103 40 41 105 42
+DEAL:: v2 f0 o3 d1 l5 g105 rhs 40 133 103 151 104 152 153
+DEAL:: v0 f2 o0 d0 l8 g76 rhs 40 29 73 40 43 77 44
+DEAL:: v1 f2 o1 d0 l9 g77 rhs 40 73 133 142 76 145 146
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g134 rhs 73 50 133 73 74 135 75
+DEAL:: v2 f0 o3 d1 l5 g135 rhs 73 142 133 160 134 161 162
+DEAL:: v0 f2 o0 d0 l8 g85 rhs 73 40 82 73 76 86 77
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g125 rhs 103 40 124 103 104 126 105
+DEAL:: v0 f2 o0 d0 l8 g136 rhs 103 92 133 103 106 137 107
+DEAL:: v1 f2 o1 d0 l9 g137 rhs 103 133 151 160 136 163 164
+DEAL::New cell
+DEAL:: v0 f0 o2 d1 l4 g152 rhs 133 73 151 133 134 153 135
+DEAL:: v0 f2 o0 d0 l8 g145 rhs 133 103 142 133 136 146 137
+DEAL::Closing
+DEAL::ExcMessage("Cycle in constraints detected!")
+DEAL::Closed
--- /dev/null
+/**********************************************************************
+ * $Id: constraint_test.cc -1 $
+ *
+ * Copyright Guido Kanschat, 2010, 2012
+ *
+ **********************************************************************/
+
+// reduced test case from constraint_c1.cc, causes a hang in close()
+
+
+#include <deal.II/base/job_identifier.h>
+#include <deal.II/lac/constraint_matrix.h>
+
+#include <vector>
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+
+using namespace dealii;
+
+
+
+void
+run()
+{
+ ConstraintMatrix constraints;
+
+ {
+ constraints.add_line(7);
+ std::vector<std::pair<unsigned int, double> > rhs;
+ rhs.push_back(std::pair<unsigned int, double>(41,1.0));
+ rhs.push_back(std::pair<unsigned int, double>(42,1.0));
+ constraints.add_entries(7, rhs);
+ }
+
+ {
+ constraints.add_line(41);
+ std::vector<std::pair<unsigned int, double> > rhs;
+ rhs.push_back(std::pair<unsigned int, double>(42,1.0));
+ constraints.add_entries(41, rhs);
+ }
+
+ {
+ constraints.add_line(42);
+ std::vector<std::pair<unsigned int, double> > rhs;
+ rhs.push_back(std::pair<unsigned int, double>(41,1.0));
+ constraints.add_entries(42, rhs);
+ }
+
+ deallog << "Closing" << std::endl;
+ deal_II_exceptions::disable_abort_on_exception();
+ constraints.close();
+
+ deallog << "Closed" << std::endl;
+
+}
+
+
+int main()
+{
+ const std::string logname = JobIdentifier::base_name(__FILE__) + std::string("/output");
+ std::ofstream logfile(logname.c_str());
+ deallog.attach(logfile);
+
+ run();
+}
--- /dev/null
+
+DEAL::Closing
+DEAL::ExcMessage("Cycle in constraints detected!")
+DEAL::Closed
--- /dev/null
+//---------------------------------------------------------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2005, 2006, 2012 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------------------------------------------------------
+
+// check assignment from IdentityMatrix to FullMatrix using the syntax
+// FullMatrix<number> M = IdentityMatrix(4);
+// this didn't work initially because the copy constructor in FullMatrix
+// was explicit; however, in hindsight, I can't see a good reason for
+// it to be explicit.
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/lac/identity_matrix.h>
+#include <deal.II/lac/full_matrix.h>
+#include <deal.II/lac/vector.h>
+
+#include <fstream>
+#include <iomanip>
+#include <cmath>
+
+template<typename number>
+void
+check_vmult()
+{
+ FullMatrix<number> M = IdentityMatrix(4);
+ Vector<number> u(4);
+ Vector<number> v(4);
+
+ for (unsigned int i=0;i<4;++i)
+ u(i) = i+1;
+
+ M.vmult(v,u);
+ Assert (v == u, ExcInternalError());
+ for (unsigned int i=0;i<v.size();++i)
+ deallog << ' ' << v(i);
+ deallog << std::endl;
+
+ M.vmult_add(v,u);
+ v /= 2;
+ Assert (v == u, ExcInternalError());
+ for (unsigned int i=0;i<v.size();++i)
+ deallog << ' ' << v(i);
+ deallog << std::endl;
+
+ M.Tvmult(v,u);
+ Assert (v == u, ExcInternalError());
+ for (unsigned int i=0;i<v.size();++i)
+ deallog << ' ' << v(i);
+ deallog << std::endl;
+
+ M.Tvmult_add(v,u);
+ v /= 2;
+ Assert (v == u, ExcInternalError());
+ for (unsigned int i=0;i<v.size();++i)
+ deallog << ' ' << v(i);
+ deallog << std::endl;
+}
+
+
+int main()
+{
+ std::ofstream logfile("identity_matrix_06/output");
+ logfile.setf(std::ios::fixed);
+ deallog << std::setprecision(0);
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ check_vmult<double>();
+ check_vmult<float>();
+}
--- /dev/null
+
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
+DEAL:: 1. 2. 3. 4.
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include "../tests.h"
#include <deal.II/fe/fe_q_hierarchical.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/base/function.h>
std::ofstream logfile("get_functions_q_hierarchical/output");
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_dgq.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include "create_mesh.h"
#include <deal.II/lac/compressed_simple_sparsity_pattern.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include "create_mesh.h"
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <iostream>
-rm -f Makefile.dep *.$(OBJEXT) \
*.g.$(OBJEXT) *.output *~ *.OK *.cc *.ucd *.log
+summary:
+ @printf "not implemented\n"
-.PHONY: report clean distclean all default report report+mail
+.PHONY: report clean distclean all default report report+mail summary
DEAL::RECURSIVE
-DEAL::4.0 3
-DEAL::4.1 3
-DEAL::4.2 3
-DEAL::4.3 4
-DEAL::4.4 4
-DEAL::4.5 4
-DEAL::4.6 4
+DEAL::4.0 0
+DEAL::4.1 0
+DEAL::4.2 0
+DEAL::4.3 0
+DEAL::4.4 1
+DEAL::4.5 1
+DEAL::4.6 1
DEAL::4.7 2
DEAL::4.8 2
DEAL::4.9 2
-DEAL::4.10 1
-DEAL::4.11 1
-DEAL::4.12 1
-DEAL::4.13 0
-DEAL::4.14 0
-DEAL::4.15 0
+DEAL::4.10 4
+DEAL::4.11 4
+DEAL::4.12 4
+DEAL::4.13 3
+DEAL::4.14 3
+DEAL::4.15 3
DEAL::K-WAY
DEAL::4.0 7
-DEAL::4.1 7
-DEAL::4.2 8
+DEAL::4.1 8
+DEAL::4.2 6
DEAL::4.3 6
-DEAL::4.4 6
-DEAL::4.5 1
-DEAL::4.6 1
-DEAL::4.7 0
+DEAL::4.4 4
+DEAL::4.5 4
+DEAL::4.6 5
+DEAL::4.7 5
DEAL::4.8 2
DEAL::4.9 2
DEAL::4.10 3
DEAL::4.11 3
-DEAL::4.12 4
-DEAL::4.13 4
-DEAL::4.14 5
-DEAL::4.15 5
+DEAL::4.12 1
+DEAL::4.13 1
+DEAL::4.14 0
+DEAL::4.15 0
DEAL::RECURSIVE
-DEAL::3.0 3
-DEAL::3.1 3
-DEAL::3.2 0
-DEAL::3.3 3
-DEAL::3.4 3
-DEAL::3.5 3
-DEAL::3.6 3
-DEAL::3.7 3
-DEAL::3.8 0
-DEAL::3.9 0
-DEAL::3.10 0
-DEAL::3.11 0
-DEAL::3.12 3
-DEAL::3.13 3
-DEAL::3.14 0
-DEAL::3.15 3
-DEAL::3.16 3
-DEAL::3.17 3
-DEAL::3.18 3
-DEAL::3.19 4
-DEAL::3.20 4
-DEAL::3.21 4
-DEAL::3.22 4
-DEAL::3.23 4
-DEAL::3.24 4
-DEAL::3.25 4
-DEAL::3.26 4
-DEAL::3.27 4
-DEAL::3.28 4
-DEAL::3.29 4
-DEAL::3.30 4
-DEAL::3.31 4
-DEAL::3.32 0
-DEAL::3.33 0
-DEAL::3.34 0
-DEAL::3.35 0
-DEAL::3.36 0
-DEAL::3.37 1
-DEAL::3.38 1
-DEAL::3.39 1
-DEAL::3.40 0
-DEAL::3.41 1
-DEAL::3.42 1
-DEAL::3.43 1
-DEAL::3.44 1
-DEAL::3.45 1
-DEAL::3.46 1
-DEAL::3.47 1
-DEAL::3.48 2
-DEAL::3.49 2
-DEAL::3.50 1
-DEAL::3.51 2
-DEAL::3.52 2
-DEAL::3.53 2
-DEAL::3.54 2
-DEAL::3.55 2
-DEAL::3.56 1
-DEAL::3.57 2
-DEAL::3.58 1
-DEAL::3.59 2
-DEAL::3.60 2
-DEAL::3.61 2
-DEAL::3.62 2
-DEAL::3.63 2
-DEAL::K-WAY
-DEAL::3.0 0
-DEAL::3.1 0
-DEAL::3.2 5
-DEAL::3.3 5
-DEAL::3.4 0
-DEAL::3.5 4
-DEAL::3.6 5
-DEAL::3.7 4
-DEAL::3.8 0
-DEAL::3.9 0
-DEAL::3.10 0
-DEAL::3.11 0
-DEAL::3.12 5
-DEAL::3.13 5
-DEAL::3.14 1
-DEAL::3.15 3
-DEAL::3.16 4
-DEAL::3.17 4
-DEAL::3.18 4
-DEAL::3.19 4
-DEAL::3.20 4
-DEAL::3.21 6
-DEAL::3.22 6
-DEAL::3.23 6
-DEAL::3.24 4
-DEAL::3.25 4
-DEAL::3.26 7
-DEAL::3.27 7
-DEAL::3.28 6
-DEAL::3.29 6
-DEAL::3.30 6
-DEAL::3.31 6
-DEAL::3.32 1
-DEAL::3.33 1
-DEAL::3.34 2
-DEAL::3.35 1
-DEAL::3.36 1
+DEAL::3.0 4
+DEAL::3.1 4
+DEAL::3.2 4
+DEAL::3.3 4
+DEAL::3.4 2
+DEAL::3.5 2
+DEAL::3.6 2
+DEAL::3.7 2
+DEAL::3.8 4
+DEAL::3.9 4
+DEAL::3.10 4
+DEAL::3.11 4
+DEAL::3.12 2
+DEAL::3.13 2
+DEAL::3.14 4
+DEAL::3.15 2
+DEAL::3.16 2
+DEAL::3.17 2
+DEAL::3.18 2
+DEAL::3.19 2
+DEAL::3.20 2
+DEAL::3.21 0
+DEAL::3.22 0
+DEAL::3.23 0
+DEAL::3.24 2
+DEAL::3.25 0
+DEAL::3.26 0
+DEAL::3.27 0
+DEAL::3.28 0
+DEAL::3.29 0
+DEAL::3.30 0
+DEAL::3.31 0
+DEAL::3.32 4
+DEAL::3.33 4
+DEAL::3.34 4
+DEAL::3.35 3
+DEAL::3.36 3
DEAL::3.37 3
-DEAL::3.38 1
+DEAL::3.38 3
DEAL::3.39 3
-DEAL::3.40 2
-DEAL::3.41 1
-DEAL::3.42 2
-DEAL::3.43 2
-DEAL::3.44 2
+DEAL::3.40 3
+DEAL::3.41 3
+DEAL::3.42 3
+DEAL::3.43 3
+DEAL::3.44 3
DEAL::3.45 3
-DEAL::3.46 2
+DEAL::3.46 3
DEAL::3.47 3
+DEAL::3.48 1
+DEAL::3.49 0
+DEAL::3.50 1
+DEAL::3.51 1
+DEAL::3.52 0
+DEAL::3.53 0
+DEAL::3.54 1
+DEAL::3.55 1
+DEAL::3.56 1
+DEAL::3.57 1
+DEAL::3.58 3
+DEAL::3.59 1
+DEAL::3.60 1
+DEAL::3.61 1
+DEAL::3.62 1
+DEAL::3.63 1
+DEAL::K-WAY
+DEAL::3.0 6
+DEAL::3.1 6
+DEAL::3.2 6
+DEAL::3.3 6
+DEAL::3.4 6
+DEAL::3.5 8
+DEAL::3.6 7
+DEAL::3.7 8
+DEAL::3.8 6
+DEAL::3.9 6
+DEAL::3.10 4
+DEAL::3.11 4
+DEAL::3.12 7
+DEAL::3.13 8
+DEAL::3.14 7
+DEAL::3.15 5
+DEAL::3.16 8
+DEAL::3.17 8
+DEAL::3.18 8
+DEAL::3.19 8
+DEAL::3.20 0
+DEAL::3.21 0
+DEAL::3.22 0
+DEAL::3.23 0
+DEAL::3.24 5
+DEAL::3.25 0
+DEAL::3.26 7
+DEAL::3.27 0
+DEAL::3.28 1
+DEAL::3.29 0
+DEAL::3.30 1
+DEAL::3.31 1
+DEAL::3.32 4
+DEAL::3.33 4
+DEAL::3.34 5
+DEAL::3.35 2
+DEAL::3.36 4
+DEAL::3.37 7
+DEAL::3.38 2
+DEAL::3.39 2
+DEAL::3.40 4
+DEAL::3.41 4
+DEAL::3.42 5
+DEAL::3.43 5
+DEAL::3.44 5
+DEAL::3.45 2
+DEAL::3.46 5
+DEAL::3.47 2
DEAL::3.48 7
DEAL::3.49 7
-DEAL::3.50 3
-DEAL::3.51 7
-DEAL::3.52 7
-DEAL::3.53 6
-DEAL::3.54 8
-DEAL::3.55 6
-DEAL::3.56 8
-DEAL::3.57 8
+DEAL::3.50 7
+DEAL::3.51 3
+DEAL::3.52 1
+DEAL::3.53 1
+DEAL::3.54 1
+DEAL::3.55 1
+DEAL::3.56 2
+DEAL::3.57 2
DEAL::3.58 3
-DEAL::3.59 8
-DEAL::3.60 8
-DEAL::3.61 8
-DEAL::3.62 8
-DEAL::3.63 8
+DEAL::3.59 3
+DEAL::3.60 3
+DEAL::3.61 3
+DEAL::3.62 3
+DEAL::3.63 3
DEAL::RECURSIVE
-DEAL::2.0 3
-DEAL::2.1 0
-DEAL::2.2 0
-DEAL::2.3 0
-DEAL::2.4 3
-DEAL::2.5 3
-DEAL::2.6 3
-DEAL::2.7 0
-DEAL::2.8 1
-DEAL::2.9 1
-DEAL::2.10 0
-DEAL::2.11 1
-DEAL::2.12 1
-DEAL::2.13 1
-DEAL::2.14 1
-DEAL::2.15 1
-DEAL::2.16 0
-DEAL::2.17 0
-DEAL::2.18 0
-DEAL::2.19 0
-DEAL::2.20 4
-DEAL::2.21 0
-DEAL::2.22 4
-DEAL::2.23 4
-DEAL::2.24 0
-DEAL::2.25 1
-DEAL::2.26 0
-DEAL::2.27 1
-DEAL::2.28 1
-DEAL::2.29 1
-DEAL::2.30 1
-DEAL::2.31 1
-DEAL::2.32 3
-DEAL::2.33 3
-DEAL::2.34 3
-DEAL::2.35 3
-DEAL::2.36 3
-DEAL::2.37 3
-DEAL::2.38 3
-DEAL::2.39 3
-DEAL::2.40 2
-DEAL::2.41 2
-DEAL::2.42 2
-DEAL::2.43 2
-DEAL::2.44 2
-DEAL::2.45 2
-DEAL::2.46 2
-DEAL::2.47 2
-DEAL::2.48 4
-DEAL::2.49 4
-DEAL::2.50 4
-DEAL::2.51 4
-DEAL::2.52 3
-DEAL::2.53 4
-DEAL::2.54 4
-DEAL::2.55 4
-DEAL::2.56 2
-DEAL::2.57 2
-DEAL::2.58 4
-DEAL::2.59 4
-DEAL::2.60 2
-DEAL::2.61 2
-DEAL::2.62 4
-DEAL::2.63 2
-DEAL::K-WAY
DEAL::2.0 2
DEAL::2.1 2
-DEAL::2.2 5
+DEAL::2.2 2
DEAL::2.3 2
-DEAL::2.4 1
+DEAL::2.4 2
DEAL::2.5 2
-DEAL::2.6 5
-DEAL::2.7 0
+DEAL::2.6 2
+DEAL::2.7 2
DEAL::2.8 2
DEAL::2.9 2
DEAL::2.10 2
-DEAL::2.11 2
-DEAL::2.12 0
-DEAL::2.13 3
+DEAL::2.11 0
+DEAL::2.12 2
+DEAL::2.13 0
DEAL::2.14 0
-DEAL::2.15 3
-DEAL::2.16 4
-DEAL::2.17 4
-DEAL::2.18 4
-DEAL::2.19 4
+DEAL::2.15 0
+DEAL::2.16 3
+DEAL::2.17 3
+DEAL::2.18 3
+DEAL::2.19 3
+DEAL::2.20 3
+DEAL::2.21 3
+DEAL::2.22 3
+DEAL::2.23 3
+DEAL::2.24 0
+DEAL::2.25 0
+DEAL::2.26 0
+DEAL::2.27 0
+DEAL::2.28 0
+DEAL::2.29 0
+DEAL::2.30 0
+DEAL::2.31 0
+DEAL::2.32 4
+DEAL::2.33 4
+DEAL::2.34 4
+DEAL::2.35 4
+DEAL::2.36 4
+DEAL::2.37 4
+DEAL::2.38 4
+DEAL::2.39 4
+DEAL::2.40 2
+DEAL::2.41 1
+DEAL::2.42 1
+DEAL::2.43 1
+DEAL::2.44 4
+DEAL::2.45 1
+DEAL::2.46 4
+DEAL::2.47 1
+DEAL::2.48 3
+DEAL::2.49 3
+DEAL::2.50 3
+DEAL::2.51 3
+DEAL::2.52 4
+DEAL::2.53 4
+DEAL::2.54 4
+DEAL::2.55 3
+DEAL::2.56 1
+DEAL::2.57 1
+DEAL::2.58 1
+DEAL::2.59 1
+DEAL::2.60 1
+DEAL::2.61 1
+DEAL::2.62 1
+DEAL::2.63 1
+DEAL::K-WAY
+DEAL::2.0 5
+DEAL::2.1 4
+DEAL::2.2 4
+DEAL::2.3 2
+DEAL::2.4 1
+DEAL::2.5 4
+DEAL::2.6 1
+DEAL::2.7 4
+DEAL::2.8 7
+DEAL::2.9 7
+DEAL::2.10 7
+DEAL::2.11 7
+DEAL::2.12 4
+DEAL::2.13 7
+DEAL::2.14 5
+DEAL::2.15 7
+DEAL::2.16 5
+DEAL::2.17 2
+DEAL::2.18 0
+DEAL::2.19 2
DEAL::2.20 5
-DEAL::2.21 4
-DEAL::2.22 5
-DEAL::2.23 5
-DEAL::2.24 4
-DEAL::2.25 4
-DEAL::2.26 4
-DEAL::2.27 7
-DEAL::2.28 7
-DEAL::2.29 8
-DEAL::2.30 7
-DEAL::2.31 7
-DEAL::2.32 1
-DEAL::2.33 0
-DEAL::2.34 5
+DEAL::2.21 5
+DEAL::2.22 0
+DEAL::2.23 0
+DEAL::2.24 7
+DEAL::2.25 2
+DEAL::2.26 2
+DEAL::2.27 2
+DEAL::2.28 4
+DEAL::2.29 2
+DEAL::2.30 3
+DEAL::2.31 2
+DEAL::2.32 6
+DEAL::2.33 3
+DEAL::2.34 0
DEAL::2.35 0
-DEAL::2.36 1
-DEAL::2.37 1
-DEAL::2.38 1
-DEAL::2.39 0
-DEAL::2.40 0
-DEAL::2.41 3
-DEAL::2.42 0
-DEAL::2.43 3
-DEAL::2.44 3
-DEAL::2.45 3
-DEAL::2.46 0
-DEAL::2.47 3
-DEAL::2.48 5
-DEAL::2.49 6
-DEAL::2.50 6
-DEAL::2.51 6
+DEAL::2.36 6
+DEAL::2.37 6
+DEAL::2.38 6
+DEAL::2.39 6
+DEAL::2.40 5
+DEAL::2.41 4
+DEAL::2.42 5
+DEAL::2.43 8
+DEAL::2.44 8
+DEAL::2.45 8
+DEAL::2.46 6
+DEAL::2.47 6
+DEAL::2.48 0
+DEAL::2.49 0
+DEAL::2.50 1
+DEAL::2.51 3
DEAL::2.52 1
-DEAL::2.53 6
-DEAL::2.54 6
-DEAL::2.55 6
-DEAL::2.56 6
-DEAL::2.57 8
-DEAL::2.58 8
-DEAL::2.59 7
+DEAL::2.53 1
+DEAL::2.54 1
+DEAL::2.55 1
+DEAL::2.56 3
+DEAL::2.57 3
+DEAL::2.58 3
+DEAL::2.59 3
DEAL::2.60 8
DEAL::2.61 8
DEAL::2.62 8
DEAL::1D
DEAL::Cell association:
-DEAL::0 3.00000
+DEAL::0 4.00000
DEAL::1 2.00000
-DEAL::2 3.00000
+DEAL::2 4.00000
DEAL::3 2.00000
-DEAL::4 4.00000
-DEAL::5 1.00000
+DEAL::4 3.00000
+DEAL::5 0
DEAL::6 2.00000
DEAL::7 2.00000
-DEAL::8 3.00000
-DEAL::9 3.00000
-DEAL::10 3.00000
+DEAL::8 4.00000
+DEAL::9 4.00000
+DEAL::10 4.00000
DEAL::11 2.00000
DEAL::12 2.00000
DEAL::13 2.00000
-DEAL::14 1.00000
+DEAL::14 0
DEAL::15 2.00000
DEAL::16 2.00000
-DEAL::17 0
+DEAL::17 1.00000
DEAL::18 2.00000
DEAL::19 2.00000
DEAL::20 2.00000
-DEAL::21 1.00000
-DEAL::22 4.00000
-DEAL::23 4.00000
-DEAL::24 3.00000
-DEAL::25 3.00000
-DEAL::26 4.00000
-DEAL::27 4.00000
-DEAL::28 4.00000
-DEAL::29 4.00000
-DEAL::30 4.00000
-DEAL::31 4.00000
-DEAL::32 3.00000
+DEAL::21 0
+DEAL::22 3.00000
+DEAL::23 3.00000
+DEAL::24 4.00000
+DEAL::25 4.00000
+DEAL::26 3.00000
+DEAL::27 3.00000
+DEAL::28 3.00000
+DEAL::29 3.00000
+DEAL::30 3.00000
+DEAL::31 3.00000
+DEAL::32 4.00000
DEAL::33 2.00000
-DEAL::34 4.00000
-DEAL::35 4.00000
-DEAL::36 3.00000
-DEAL::37 3.00000
-DEAL::38 3.00000
-DEAL::39 3.00000
-DEAL::40 3.00000
-DEAL::41 1.00000
+DEAL::34 3.00000
+DEAL::35 3.00000
+DEAL::36 4.00000
+DEAL::37 4.00000
+DEAL::38 4.00000
+DEAL::39 4.00000
+DEAL::40 4.00000
+DEAL::41 0
DEAL::42 2.00000
DEAL::43 2.00000
-DEAL::44 0
-DEAL::45 0
-DEAL::46 4.00000
-DEAL::47 4.00000
-DEAL::48 3.00000
-DEAL::49 3.00000
+DEAL::44 1.00000
+DEAL::45 1.00000
+DEAL::46 3.00000
+DEAL::47 3.00000
+DEAL::48 4.00000
+DEAL::49 4.00000
DEAL::50 2.00000
DEAL::51 2.00000
-DEAL::52 0
-DEAL::53 0
+DEAL::52 1.00000
+DEAL::53 1.00000
DEAL::54 2.00000
DEAL::55 2.00000
-DEAL::56 1.00000
-DEAL::57 1.00000
-DEAL::58 0
-DEAL::59 1.00000
-DEAL::60 0
-DEAL::61 0
-DEAL::62 4.00000
+DEAL::56 0
+DEAL::57 0
+DEAL::58 1.00000
+DEAL::59 0
+DEAL::60 1.00000
+DEAL::61 1.00000
+DEAL::62 3.00000
DEAL::63 2.00000
-DEAL::64 1.00000
-DEAL::65 0
-DEAL::66 3.00000
-DEAL::67 3.00000
-DEAL::68 1.00000
-DEAL::69 4.00000
-DEAL::70 3.00000
-DEAL::71 3.00000
-DEAL::72 1.00000
-DEAL::73 1.00000
-DEAL::74 4.00000
-DEAL::75 4.00000
-DEAL::76 0
-DEAL::77 0
-DEAL::78 4.00000
-DEAL::79 4.00000
-DEAL::80 3.00000
-DEAL::81 3.00000
-DEAL::82 3.00000
-DEAL::83 3.00000
-DEAL::84 1.00000
+DEAL::64 0
+DEAL::65 1.00000
+DEAL::66 4.00000
+DEAL::67 4.00000
+DEAL::68 0
+DEAL::69 3.00000
+DEAL::70 4.00000
+DEAL::71 4.00000
+DEAL::72 0
+DEAL::73 0
+DEAL::74 3.00000
+DEAL::75 3.00000
+DEAL::76 1.00000
+DEAL::77 1.00000
+DEAL::78 3.00000
+DEAL::79 3.00000
+DEAL::80 4.00000
+DEAL::81 4.00000
+DEAL::82 4.00000
+DEAL::83 4.00000
+DEAL::84 0
DEAL::85 2.00000
-DEAL::86 0
-DEAL::87 0
-DEAL::88 0
-DEAL::89 0
+DEAL::86 1.00000
+DEAL::87 1.00000
+DEAL::88 1.00000
+DEAL::89 1.00000
DEAL::90 2.00000
DEAL::91 2.00000
-DEAL::92 1.00000
-DEAL::93 1.00000
-DEAL::94 1.00000
-DEAL::95 1.00000
-DEAL::96 4.00000
-DEAL::97 4.00000
-DEAL::98 1.00000
-DEAL::99 1.00000
-DEAL::100 0
-DEAL::101 0
-DEAL::102 0
-DEAL::103 0
-DEAL::104 4.00000
-DEAL::105 4.00000
-DEAL::106 1.00000
-DEAL::107 1.00000
-DEAL::108 1.00000
-DEAL::109 0
-DEAL::110 0
-DEAL::111 0
-DEAL::112 0
-DEAL::113 1.00000
-DEAL::114 1.00000
+DEAL::92 0
+DEAL::93 0
+DEAL::94 0
+DEAL::95 0
+DEAL::96 3.00000
+DEAL::97 3.00000
+DEAL::98 0
+DEAL::99 0
+DEAL::100 1.00000
+DEAL::101 1.00000
+DEAL::102 1.00000
+DEAL::103 1.00000
+DEAL::104 3.00000
+DEAL::105 3.00000
+DEAL::106 0
+DEAL::107 0
+DEAL::108 0
+DEAL::109 1.00000
+DEAL::110 1.00000
+DEAL::111 1.00000
+DEAL::112 1.00000
+DEAL::113 0
+DEAL::114 0
DEAL::DoF association:
-DEAL::0 3
-DEAL::1 3
-DEAL::2 3
+DEAL::0 4
+DEAL::1 4
+DEAL::2 4
DEAL::3 2
DEAL::4 2
DEAL::5 2
-DEAL::6 3
-DEAL::7 3
-DEAL::8 3
+DEAL::6 4
+DEAL::7 4
+DEAL::8 4
DEAL::9 2
DEAL::10 2
-DEAL::11 4
-DEAL::12 4
-DEAL::13 4
-DEAL::14 1
-DEAL::15 1
-DEAL::16 1
+DEAL::11 3
+DEAL::12 3
+DEAL::13 3
+DEAL::14 0
+DEAL::15 0
+DEAL::16 0
DEAL::17 2
DEAL::18 2
DEAL::19 2
DEAL::20 2
DEAL::21 2
-DEAL::22 3
-DEAL::23 3
-DEAL::24 3
-DEAL::25 3
-DEAL::26 4
-DEAL::27 3
+DEAL::22 4
+DEAL::23 4
+DEAL::24 4
+DEAL::25 4
+DEAL::26 3
+DEAL::27 4
DEAL::28 2
DEAL::29 2
DEAL::30 2
DEAL::31 2
DEAL::32 2
DEAL::33 2
-DEAL::34 1
-DEAL::35 1
+DEAL::34 0
+DEAL::35 0
DEAL::36 2
DEAL::37 2
DEAL::38 2
DEAL::39 2
DEAL::40 2
-DEAL::41 0
-DEAL::42 0
-DEAL::43 0
+DEAL::41 1
+DEAL::42 1
+DEAL::43 1
DEAL::44 2
DEAL::45 2
DEAL::46 2
DEAL::48 2
DEAL::49 2
DEAL::50 2
-DEAL::51 1
-DEAL::52 1
-DEAL::53 1
-DEAL::54 4
-DEAL::55 4
-DEAL::56 4
-DEAL::57 4
-DEAL::58 4
-DEAL::59 3
-DEAL::60 3
-DEAL::61 3
-DEAL::62 3
-DEAL::63 4
-DEAL::64 4
-DEAL::65 4
-DEAL::66 4
-DEAL::67 4
-DEAL::68 4
-DEAL::69 4
-DEAL::70 4
-DEAL::71 4
-DEAL::72 4
-DEAL::73 4
-DEAL::74 3
-DEAL::75 3
+DEAL::51 0
+DEAL::52 0
+DEAL::53 0
+DEAL::54 3
+DEAL::55 3
+DEAL::56 3
+DEAL::57 3
+DEAL::58 3
+DEAL::59 4
+DEAL::60 4
+DEAL::61 4
+DEAL::62 4
+DEAL::63 3
+DEAL::64 3
+DEAL::65 3
+DEAL::66 3
+DEAL::67 3
+DEAL::68 3
+DEAL::69 3
+DEAL::70 3
+DEAL::71 3
+DEAL::72 3
+DEAL::73 3
+DEAL::74 4
+DEAL::75 4
DEAL::76 2
DEAL::77 2
-DEAL::78 4
-DEAL::79 4
-DEAL::80 4
-DEAL::81 4
-DEAL::82 3
-DEAL::83 3
-DEAL::84 3
-DEAL::85 3
-DEAL::86 3
-DEAL::87 3
-DEAL::88 3
-DEAL::89 3
-DEAL::90 3
-DEAL::91 3
-DEAL::92 3
-DEAL::93 3
-DEAL::94 3
-DEAL::95 1
-DEAL::96 1
+DEAL::78 3
+DEAL::79 3
+DEAL::80 3
+DEAL::81 3
+DEAL::82 4
+DEAL::83 4
+DEAL::84 4
+DEAL::85 4
+DEAL::86 4
+DEAL::87 4
+DEAL::88 4
+DEAL::89 4
+DEAL::90 4
+DEAL::91 4
+DEAL::92 4
+DEAL::93 4
+DEAL::94 4
+DEAL::95 0
+DEAL::96 0
DEAL::97 2
DEAL::98 2
DEAL::99 2
-DEAL::100 0
-DEAL::101 0
-DEAL::102 0
-DEAL::103 0
-DEAL::104 4
-DEAL::105 4
-DEAL::106 4
-DEAL::107 4
-DEAL::108 4
-DEAL::109 3
-DEAL::110 3
-DEAL::111 3
+DEAL::100 1
+DEAL::101 1
+DEAL::102 1
+DEAL::103 1
+DEAL::104 3
+DEAL::105 3
+DEAL::106 3
+DEAL::107 3
+DEAL::108 3
+DEAL::109 4
+DEAL::110 4
+DEAL::111 4
DEAL::112 2
DEAL::113 2
DEAL::114 2
-DEAL::115 0
-DEAL::116 0
-DEAL::117 0
-DEAL::118 0
+DEAL::115 1
+DEAL::116 1
+DEAL::117 1
+DEAL::118 1
DEAL::119 2
DEAL::120 2
DEAL::121 2
-DEAL::122 1
-DEAL::123 1
-DEAL::124 1
-DEAL::125 0
-DEAL::126 0
-DEAL::127 0
-DEAL::128 1
-DEAL::129 1
-DEAL::130 1
-DEAL::131 0
-DEAL::132 0
-DEAL::133 0
-DEAL::134 0
-DEAL::135 4
-DEAL::136 4
+DEAL::122 0
+DEAL::123 0
+DEAL::124 0
+DEAL::125 1
+DEAL::126 1
+DEAL::127 1
+DEAL::128 0
+DEAL::129 0
+DEAL::130 0
+DEAL::131 1
+DEAL::132 1
+DEAL::133 1
+DEAL::134 1
+DEAL::135 3
+DEAL::136 3
DEAL::137 2
DEAL::138 2
-DEAL::139 1
-DEAL::140 1
-DEAL::141 0
-DEAL::142 0
-DEAL::143 0
-DEAL::144 3
-DEAL::145 3
-DEAL::146 3
-DEAL::147 1
-DEAL::148 1
-DEAL::149 4
-DEAL::150 4
-DEAL::151 3
-DEAL::152 3
-DEAL::153 3
-DEAL::154 1
-DEAL::155 1
-DEAL::156 1
-DEAL::157 1
-DEAL::158 1
-DEAL::159 4
-DEAL::160 4
-DEAL::161 4
-DEAL::162 4
-DEAL::163 0
-DEAL::164 0
-DEAL::165 0
-DEAL::166 0
-DEAL::167 0
-DEAL::168 4
-DEAL::169 4
-DEAL::170 4
-DEAL::171 4
-DEAL::172 3
-DEAL::173 3
-DEAL::174 3
-DEAL::175 3
-DEAL::176 3
-DEAL::177 3
-DEAL::178 3
+DEAL::139 0
+DEAL::140 0
+DEAL::141 1
+DEAL::142 1
+DEAL::143 1
+DEAL::144 4
+DEAL::145 4
+DEAL::146 4
+DEAL::147 0
+DEAL::148 0
+DEAL::149 3
+DEAL::150 3
+DEAL::151 4
+DEAL::152 4
+DEAL::153 4
+DEAL::154 0
+DEAL::155 0
+DEAL::156 0
+DEAL::157 0
+DEAL::158 0
+DEAL::159 3
+DEAL::160 3
+DEAL::161 3
+DEAL::162 3
+DEAL::163 1
+DEAL::164 1
+DEAL::165 1
+DEAL::166 1
+DEAL::167 1
+DEAL::168 3
+DEAL::169 3
+DEAL::170 3
+DEAL::171 3
+DEAL::172 4
+DEAL::173 4
+DEAL::174 4
+DEAL::175 4
+DEAL::176 4
+DEAL::177 4
+DEAL::178 4
DEAL::179 2
-DEAL::180 1
+DEAL::180 0
DEAL::181 2
-DEAL::182 0
-DEAL::183 0
-DEAL::184 0
-DEAL::185 0
-DEAL::186 0
-DEAL::187 0
-DEAL::188 0
+DEAL::182 1
+DEAL::183 1
+DEAL::184 1
+DEAL::185 1
+DEAL::186 1
+DEAL::187 1
+DEAL::188 1
DEAL::189 2
DEAL::190 2
DEAL::191 2
-DEAL::192 1
-DEAL::193 1
-DEAL::194 1
-DEAL::195 1
-DEAL::196 1
-DEAL::197 1
-DEAL::198 1
-DEAL::199 4
-DEAL::200 4
-DEAL::201 4
-DEAL::202 1
-DEAL::203 1
-DEAL::204 1
-DEAL::205 1
-DEAL::206 0
-DEAL::207 0
-DEAL::208 0
-DEAL::209 0
-DEAL::210 0
-DEAL::211 0
-DEAL::212 4
-DEAL::213 4
-DEAL::214 4
-DEAL::215 1
-DEAL::216 1
-DEAL::217 1
-DEAL::218 1
-DEAL::219 1
-DEAL::220 1
-DEAL::221 0
-DEAL::222 0
-DEAL::223 0
-DEAL::224 0
-DEAL::225 0
-DEAL::226 0
-DEAL::227 0
-DEAL::228 1
-DEAL::229 1
-DEAL::230 1
+DEAL::192 0
+DEAL::193 0
+DEAL::194 0
+DEAL::195 0
+DEAL::196 0
+DEAL::197 0
+DEAL::198 0
+DEAL::199 3
+DEAL::200 3
+DEAL::201 3
+DEAL::202 0
+DEAL::203 0
+DEAL::204 0
+DEAL::205 0
+DEAL::206 1
+DEAL::207 1
+DEAL::208 1
+DEAL::209 1
+DEAL::210 1
+DEAL::211 1
+DEAL::212 3
+DEAL::213 3
+DEAL::214 3
+DEAL::215 0
+DEAL::216 0
+DEAL::217 0
+DEAL::218 0
+DEAL::219 0
+DEAL::220 0
+DEAL::221 1
+DEAL::222 1
+DEAL::223 1
+DEAL::224 1
+DEAL::225 1
+DEAL::226 1
+DEAL::227 1
+DEAL::228 0
+DEAL::229 0
+DEAL::230 0
DEAL::2D
DEAL::Cell association:
-DEAL::0 4.00000
-DEAL::1 3.00000
-DEAL::2 4.00000
-DEAL::3 4.00000
-DEAL::4 4.00000
-DEAL::5 0
-DEAL::6 0
-DEAL::7 1.00000
-DEAL::8 1.00000
-DEAL::9 4.00000
-DEAL::10 4.00000
+DEAL::0 0
+DEAL::1 1.00000
+DEAL::2 0
+DEAL::3 0
+DEAL::4 0
+DEAL::5 3.00000
+DEAL::6 3.00000
+DEAL::7 4.00000
+DEAL::8 4.00000
+DEAL::9 2.00000
+DEAL::10 2.00000
DEAL::11 2.00000
-DEAL::12 2.00000
-DEAL::13 2.00000
-DEAL::14 0
-DEAL::15 0
-DEAL::16 1.00000
-DEAL::17 1.00000
-DEAL::18 2.00000
+DEAL::12 0
+DEAL::13 0
+DEAL::14 3.00000
+DEAL::15 2.00000
+DEAL::16 4.00000
+DEAL::17 2.00000
+DEAL::18 0
DEAL::19 2.00000
-DEAL::20 2.00000
-DEAL::21 0
-DEAL::22 1.00000
-DEAL::23 0
-DEAL::24 0
-DEAL::25 0
-DEAL::26 1.00000
-DEAL::27 1.00000
-DEAL::28 1.00000
-DEAL::29 4.00000
-DEAL::30 4.00000
-DEAL::31 1.00000
-DEAL::32 4.00000
-DEAL::33 4.00000
-DEAL::34 2.00000
-DEAL::35 4.00000
-DEAL::36 4.00000
-DEAL::37 4.00000
-DEAL::38 4.00000
-DEAL::39 0
-DEAL::40 0
-DEAL::41 1.00000
-DEAL::42 1.00000
-DEAL::43 1.00000
+DEAL::20 0
+DEAL::21 3.00000
+DEAL::22 4.00000
+DEAL::23 3.00000
+DEAL::24 3.00000
+DEAL::25 4.00000
+DEAL::26 4.00000
+DEAL::27 4.00000
+DEAL::28 4.00000
+DEAL::29 1.00000
+DEAL::30 1.00000
+DEAL::31 2.00000
+DEAL::32 1.00000
+DEAL::33 1.00000
+DEAL::34 0
+DEAL::35 0
+DEAL::36 0
+DEAL::37 0
+DEAL::38 0
+DEAL::39 2.00000
+DEAL::40 2.00000
+DEAL::41 2.00000
+DEAL::42 4.00000
+DEAL::43 4.00000
DEAL::44 2.00000
-DEAL::45 4.00000
-DEAL::46 2.00000
-DEAL::47 2.00000
-DEAL::48 0
-DEAL::49 0
-DEAL::50 0
-DEAL::51 4.00000
-DEAL::52 4.00000
-DEAL::53 4.00000
-DEAL::54 3.00000
-DEAL::55 3.00000
-DEAL::56 4.00000
-DEAL::57 4.00000
-DEAL::58 4.00000
-DEAL::59 2.00000
-DEAL::60 2.00000
-DEAL::61 2.00000
-DEAL::62 4.00000
-DEAL::63 4.00000
-DEAL::64 4.00000
-DEAL::65 0
-DEAL::66 1.00000
+DEAL::45 2.00000
+DEAL::46 0
+DEAL::47 0
+DEAL::48 3.00000
+DEAL::49 3.00000
+DEAL::50 4.00000
+DEAL::51 1.00000
+DEAL::52 1.00000
+DEAL::53 1.00000
+DEAL::54 1.00000
+DEAL::55 1.00000
+DEAL::56 1.00000
+DEAL::57 1.00000
+DEAL::58 1.00000
+DEAL::59 0
+DEAL::60 0
+DEAL::61 0
+DEAL::62 0
+DEAL::63 0
+DEAL::64 0
+DEAL::65 2.00000
+DEAL::66 2.00000
DEAL::67 4.00000
DEAL::68 4.00000
DEAL::69 4.00000
DEAL::70 4.00000
DEAL::71 4.00000
DEAL::72 4.00000
-DEAL::73 2.00000
-DEAL::74 2.00000
-DEAL::75 2.00000
-DEAL::76 0
-DEAL::77 1.00000
-DEAL::78 0
-DEAL::79 1.00000
-DEAL::80 1.00000
-DEAL::81 1.00000
-DEAL::82 1.00000
-DEAL::83 1.00000
-DEAL::84 0
-DEAL::85 0
-DEAL::86 0
-DEAL::87 0
-DEAL::88 1.00000
-DEAL::89 1.00000
-DEAL::90 1.00000
-DEAL::91 1.00000
-DEAL::92 1.00000
-DEAL::93 1.00000
-DEAL::94 1.00000
-DEAL::95 1.00000
-DEAL::96 4.00000
-DEAL::97 4.00000
-DEAL::98 4.00000
-DEAL::99 4.00000
-DEAL::100 2.00000
-DEAL::101 2.00000
-DEAL::102 2.00000
-DEAL::103 2.00000
-DEAL::104 3.00000
+DEAL::73 0
+DEAL::74 0
+DEAL::75 0
+DEAL::76 4.00000
+DEAL::77 4.00000
+DEAL::78 4.00000
+DEAL::79 4.00000
+DEAL::80 4.00000
+DEAL::81 4.00000
+DEAL::82 4.00000
+DEAL::83 4.00000
+DEAL::84 3.00000
+DEAL::85 3.00000
+DEAL::86 3.00000
+DEAL::87 3.00000
+DEAL::88 4.00000
+DEAL::89 4.00000
+DEAL::90 4.00000
+DEAL::91 4.00000
+DEAL::92 2.00000
+DEAL::93 2.00000
+DEAL::94 2.00000
+DEAL::95 2.00000
+DEAL::96 2.00000
+DEAL::97 2.00000
+DEAL::98 2.00000
+DEAL::99 2.00000
+DEAL::100 0
+DEAL::101 0
+DEAL::102 0
+DEAL::103 0
+DEAL::104 0
DEAL::105 4.00000
-DEAL::106 0
-DEAL::107 3.00000
-DEAL::108 3.00000
-DEAL::109 3.00000
-DEAL::110 2.00000
-DEAL::111 2.00000
-DEAL::112 3.00000
-DEAL::113 0
-DEAL::114 4.00000
-DEAL::115 2.00000
-DEAL::116 3.00000
-DEAL::117 3.00000
-DEAL::118 4.00000
-DEAL::119 3.00000
-DEAL::120 3.00000
-DEAL::121 3.00000
-DEAL::122 3.00000
-DEAL::123 2.00000
-DEAL::124 0
-DEAL::125 0
-DEAL::126 4.00000
-DEAL::127 4.00000
-DEAL::128 4.00000
-DEAL::129 2.00000
-DEAL::130 2.00000
-DEAL::131 2.00000
-DEAL::132 0
-DEAL::133 0
-DEAL::134 0
-DEAL::135 3.00000
-DEAL::136 3.00000
-DEAL::137 0
-DEAL::138 0
-DEAL::139 1.00000
-DEAL::140 1.00000
-DEAL::141 1.00000
-DEAL::142 1.00000
+DEAL::106 3.00000
+DEAL::107 1.00000
+DEAL::108 1.00000
+DEAL::109 1.00000
+DEAL::110 0
+DEAL::111 0
+DEAL::112 0
+DEAL::113 3.00000
+DEAL::114 2.00000
+DEAL::115 0
+DEAL::116 0
+DEAL::117 0
+DEAL::118 0
+DEAL::119 1.00000
+DEAL::120 1.00000
+DEAL::121 1.00000
+DEAL::122 1.00000
+DEAL::123 0
+DEAL::124 3.00000
+DEAL::125 3.00000
+DEAL::126 1.00000
+DEAL::127 2.00000
+DEAL::128 2.00000
+DEAL::129 0
+DEAL::130 0
+DEAL::131 0
+DEAL::132 3.00000
+DEAL::133 3.00000
+DEAL::134 3.00000
+DEAL::135 4.00000
+DEAL::136 4.00000
+DEAL::137 3.00000
+DEAL::138 3.00000
+DEAL::139 4.00000
+DEAL::140 4.00000
+DEAL::141 2.00000
+DEAL::142 2.00000
DEAL::143 2.00000
DEAL::144 2.00000
-DEAL::145 0
-DEAL::146 0
-DEAL::147 0
-DEAL::148 0
-DEAL::149 1.00000
-DEAL::150 1.00000
-DEAL::151 3.00000
-DEAL::152 2.00000
-DEAL::153 2.00000
-DEAL::154 2.00000
-DEAL::155 2.00000
-DEAL::156 2.00000
-DEAL::157 2.00000
-DEAL::158 1.00000
-DEAL::159 1.00000
-DEAL::160 1.00000
+DEAL::145 3.00000
+DEAL::146 3.00000
+DEAL::147 3.00000
+DEAL::148 3.00000
+DEAL::149 3.00000
+DEAL::150 3.00000
+DEAL::151 2.00000
+DEAL::152 0
+DEAL::153 0
+DEAL::154 0
+DEAL::155 0
+DEAL::156 0
+DEAL::157 0
+DEAL::158 4.00000
+DEAL::159 4.00000
+DEAL::160 4.00000
DEAL::161 4.00000
DEAL::162 4.00000
-DEAL::163 4.00000
-DEAL::164 4.00000
-DEAL::165 3.00000
-DEAL::166 3.00000
-DEAL::167 3.00000
-DEAL::168 0
-DEAL::169 0
-DEAL::170 0
-DEAL::171 1.00000
-DEAL::172 4.00000
-DEAL::173 3.00000
-DEAL::174 3.00000
-DEAL::175 3.00000
-DEAL::176 3.00000
-DEAL::177 3.00000
-DEAL::178 2.00000
-DEAL::179 2.00000
-DEAL::180 2.00000
-DEAL::181 0
-DEAL::182 0
-DEAL::183 0
-DEAL::184 0
-DEAL::185 0
-DEAL::186 0
-DEAL::187 0
+DEAL::163 1.00000
+DEAL::164 1.00000
+DEAL::165 1.00000
+DEAL::166 0
+DEAL::167 1.00000
+DEAL::168 3.00000
+DEAL::169 3.00000
+DEAL::170 3.00000
+DEAL::171 4.00000
+DEAL::172 1.00000
+DEAL::173 4.00000
+DEAL::174 1.00000
+DEAL::175 1.00000
+DEAL::176 1.00000
+DEAL::177 1.00000
+DEAL::178 0
+DEAL::179 0
+DEAL::180 0
+DEAL::181 3.00000
+DEAL::182 3.00000
+DEAL::183 3.00000
+DEAL::184 3.00000
+DEAL::185 3.00000
+DEAL::186 3.00000
+DEAL::187 3.00000
DEAL::188 4.00000
DEAL::189 4.00000
DEAL::190 4.00000
-DEAL::191 4.00000
-DEAL::192 4.00000
-DEAL::193 4.00000
-DEAL::194 4.00000
-DEAL::195 2.00000
-DEAL::196 2.00000
-DEAL::197 2.00000
-DEAL::198 0
-DEAL::199 0
-DEAL::200 0
-DEAL::201 0
-DEAL::202 0
-DEAL::203 0
-DEAL::204 0
-DEAL::205 1.00000
-DEAL::206 1.00000
-DEAL::207 1.00000
-DEAL::208 3.00000
-DEAL::209 3.00000
-DEAL::210 3.00000
-DEAL::211 0
-DEAL::212 0
-DEAL::213 0
-DEAL::214 0
-DEAL::215 1.00000
-DEAL::216 1.00000
-DEAL::217 1.00000
-DEAL::218 1.00000
-DEAL::219 1.00000
-DEAL::220 1.00000
-DEAL::221 4.00000
-DEAL::222 4.00000
-DEAL::223 4.00000
-DEAL::224 4.00000
-DEAL::225 2.00000
-DEAL::226 2.00000
-DEAL::227 2.00000
-DEAL::228 0
-DEAL::229 0
-DEAL::230 0
-DEAL::231 0
-DEAL::232 0
-DEAL::233 1.00000
-DEAL::234 1.00000
-DEAL::235 1.00000
-DEAL::236 1.00000
-DEAL::237 1.00000
-DEAL::238 1.00000
-DEAL::239 1.00000
-DEAL::240 3.00000
-DEAL::241 3.00000
-DEAL::242 2.00000
-DEAL::243 2.00000
-DEAL::244 2.00000
-DEAL::245 2.00000
-DEAL::246 2.00000
-DEAL::247 2.00000
-DEAL::248 2.00000
-DEAL::249 2.00000
-DEAL::250 2.00000
-DEAL::251 2.00000
-DEAL::252 2.00000
-DEAL::253 2.00000
-DEAL::254 0
-DEAL::255 0
-DEAL::256 0
-DEAL::257 1.00000
-DEAL::258 1.00000
-DEAL::259 1.00000
-DEAL::260 0
-DEAL::261 0
-DEAL::262 0
-DEAL::263 0
+DEAL::191 2.00000
+DEAL::192 2.00000
+DEAL::193 2.00000
+DEAL::194 2.00000
+DEAL::195 0
+DEAL::196 0
+DEAL::197 0
+DEAL::198 3.00000
+DEAL::199 3.00000
+DEAL::200 3.00000
+DEAL::201 3.00000
+DEAL::202 3.00000
+DEAL::203 3.00000
+DEAL::204 3.00000
+DEAL::205 4.00000
+DEAL::206 4.00000
+DEAL::207 4.00000
+DEAL::208 4.00000
+DEAL::209 4.00000
+DEAL::210 4.00000
+DEAL::211 3.00000
+DEAL::212 3.00000
+DEAL::213 3.00000
+DEAL::214 3.00000
+DEAL::215 4.00000
+DEAL::216 4.00000
+DEAL::217 4.00000
+DEAL::218 2.00000
+DEAL::219 2.00000
+DEAL::220 2.00000
+DEAL::221 2.00000
+DEAL::222 2.00000
+DEAL::223 2.00000
+DEAL::224 2.00000
+DEAL::225 0
+DEAL::226 0
+DEAL::227 0
+DEAL::228 3.00000
+DEAL::229 3.00000
+DEAL::230 2.00000
+DEAL::231 3.00000
+DEAL::232 3.00000
+DEAL::233 3.00000
+DEAL::234 3.00000
+DEAL::235 3.00000
+DEAL::236 3.00000
+DEAL::237 2.00000
+DEAL::238 2.00000
+DEAL::239 2.00000
+DEAL::240 2.00000
+DEAL::241 0
+DEAL::242 0
+DEAL::243 0
+DEAL::244 0
+DEAL::245 0
+DEAL::246 0
+DEAL::247 0
+DEAL::248 0
+DEAL::249 0
+DEAL::250 0
+DEAL::251 0
+DEAL::252 0
+DEAL::253 0
+DEAL::254 3.00000
+DEAL::255 3.00000
+DEAL::256 3.00000
+DEAL::257 4.00000
+DEAL::258 4.00000
+DEAL::259 4.00000
+DEAL::260 3.00000
+DEAL::261 3.00000
+DEAL::262 3.00000
+DEAL::263 3.00000
DEAL::264 4.00000
DEAL::265 4.00000
DEAL::266 4.00000
DEAL::267 4.00000
DEAL::268 4.00000
-DEAL::269 4.00000
-DEAL::270 4.00000
-DEAL::271 4.00000
-DEAL::272 3.00000
-DEAL::273 4.00000
-DEAL::274 1.00000
-DEAL::275 1.00000
-DEAL::276 1.00000
-DEAL::277 4.00000
-DEAL::278 4.00000
-DEAL::279 4.00000
-DEAL::280 4.00000
-DEAL::281 4.00000
-DEAL::282 4.00000
-DEAL::283 4.00000
-DEAL::284 4.00000
-DEAL::285 4.00000
-DEAL::286 4.00000
-DEAL::287 0
-DEAL::288 0
-DEAL::289 1.00000
-DEAL::290 0
-DEAL::291 0
-DEAL::292 1.00000
-DEAL::293 1.00000
-DEAL::294 1.00000
-DEAL::295 1.00000
-DEAL::296 1.00000
-DEAL::297 1.00000
-DEAL::298 1.00000
-DEAL::299 1.00000
-DEAL::300 1.00000
-DEAL::301 1.00000
-DEAL::302 1.00000
+DEAL::269 1.00000
+DEAL::270 1.00000
+DEAL::271 1.00000
+DEAL::272 1.00000
+DEAL::273 1.00000
+DEAL::274 2.00000
+DEAL::275 2.00000
+DEAL::276 2.00000
+DEAL::277 1.00000
+DEAL::278 1.00000
+DEAL::279 1.00000
+DEAL::280 0
+DEAL::281 0
+DEAL::282 0
+DEAL::283 0
+DEAL::284 0
+DEAL::285 0
+DEAL::286 0
+DEAL::287 2.00000
+DEAL::288 2.00000
+DEAL::289 2.00000
+DEAL::290 2.00000
+DEAL::291 2.00000
+DEAL::292 2.00000
+DEAL::293 3.00000
+DEAL::294 4.00000
+DEAL::295 4.00000
+DEAL::296 2.00000
+DEAL::297 2.00000
+DEAL::298 2.00000
+DEAL::299 4.00000
+DEAL::300 4.00000
+DEAL::301 4.00000
+DEAL::302 4.00000
DEAL::303 2.00000
DEAL::304 2.00000
DEAL::305 2.00000
-DEAL::306 4.00000
-DEAL::307 4.00000
-DEAL::308 4.00000
+DEAL::306 2.00000
+DEAL::307 2.00000
+DEAL::308 2.00000
DEAL::309 2.00000
DEAL::310 2.00000
DEAL::311 2.00000
DEAL::312 2.00000
DEAL::313 2.00000
DEAL::314 2.00000
-DEAL::315 3.00000
-DEAL::316 3.00000
-DEAL::317 2.00000
-DEAL::318 2.00000
-DEAL::319 0
-DEAL::320 0
-DEAL::321 0
-DEAL::322 0
-DEAL::323 3.00000
-DEAL::324 3.00000
-DEAL::325 3.00000
-DEAL::326 3.00000
+DEAL::315 0
+DEAL::316 0
+DEAL::317 0
+DEAL::318 0
+DEAL::319 3.00000
+DEAL::320 3.00000
+DEAL::321 3.00000
+DEAL::322 3.00000
+DEAL::323 1.00000
+DEAL::324 1.00000
+DEAL::325 1.00000
+DEAL::326 1.00000
DEAL::327 4.00000
DEAL::328 4.00000
DEAL::329 4.00000
DEAL::330 4.00000
-DEAL::331 4.00000
-DEAL::332 4.00000
-DEAL::333 4.00000
-DEAL::334 4.00000
-DEAL::335 4.00000
-DEAL::336 4.00000
-DEAL::337 4.00000
-DEAL::338 4.00000
-DEAL::339 2.00000
-DEAL::340 2.00000
-DEAL::341 2.00000
-DEAL::342 2.00000
-DEAL::343 2.00000
-DEAL::344 4.00000
-DEAL::345 2.00000
-DEAL::346 4.00000
-DEAL::347 0
-DEAL::348 0
-DEAL::349 0
-DEAL::350 0
-DEAL::351 0
-DEAL::352 0
-DEAL::353 0
-DEAL::354 0
-DEAL::355 1.00000
-DEAL::356 1.00000
-DEAL::357 1.00000
-DEAL::358 1.00000
-DEAL::359 3.00000
-DEAL::360 3.00000
-DEAL::361 3.00000
-DEAL::362 3.00000
-DEAL::363 3.00000
-DEAL::364 3.00000
-DEAL::365 2.00000
-DEAL::366 3.00000
-DEAL::367 0
-DEAL::368 0
-DEAL::369 0
-DEAL::370 0
-DEAL::371 0
-DEAL::372 0
-DEAL::373 0
-DEAL::374 0
-DEAL::375 1.00000
-DEAL::376 1.00000
-DEAL::377 1.00000
-DEAL::378 1.00000
-DEAL::379 4.00000
-DEAL::380 4.00000
-DEAL::381 4.00000
+DEAL::331 1.00000
+DEAL::332 1.00000
+DEAL::333 1.00000
+DEAL::334 1.00000
+DEAL::335 2.00000
+DEAL::336 2.00000
+DEAL::337 2.00000
+DEAL::338 2.00000
+DEAL::339 0
+DEAL::340 0
+DEAL::341 0
+DEAL::342 0
+DEAL::343 0
+DEAL::344 0
+DEAL::345 0
+DEAL::346 0
+DEAL::347 3.00000
+DEAL::348 3.00000
+DEAL::349 3.00000
+DEAL::350 3.00000
+DEAL::351 3.00000
+DEAL::352 3.00000
+DEAL::353 3.00000
+DEAL::354 3.00000
+DEAL::355 4.00000
+DEAL::356 4.00000
+DEAL::357 4.00000
+DEAL::358 4.00000
+DEAL::359 4.00000
+DEAL::360 4.00000
+DEAL::361 4.00000
+DEAL::362 4.00000
+DEAL::363 0
+DEAL::364 0
+DEAL::365 0
+DEAL::366 0
+DEAL::367 3.00000
+DEAL::368 3.00000
+DEAL::369 3.00000
+DEAL::370 3.00000
+DEAL::371 3.00000
+DEAL::372 3.00000
+DEAL::373 3.00000
+DEAL::374 3.00000
+DEAL::375 4.00000
+DEAL::376 4.00000
+DEAL::377 4.00000
+DEAL::378 4.00000
+DEAL::379 2.00000
+DEAL::380 2.00000
+DEAL::381 2.00000
DEAL::382 2.00000
-DEAL::383 2.00000
-DEAL::384 2.00000
-DEAL::385 2.00000
-DEAL::386 2.00000
-DEAL::387 1.00000
-DEAL::388 1.00000
-DEAL::389 1.00000
-DEAL::390 1.00000
-DEAL::391 1.00000
-DEAL::392 1.00000
-DEAL::393 1.00000
-DEAL::394 1.00000
-DEAL::395 1.00000
-DEAL::396 1.00000
-DEAL::397 1.00000
-DEAL::398 1.00000
-DEAL::399 1.00000
-DEAL::400 1.00000
-DEAL::401 1.00000
-DEAL::402 1.00000
+DEAL::383 0
+DEAL::384 0
+DEAL::385 0
+DEAL::386 0
+DEAL::387 3.00000
+DEAL::388 3.00000
+DEAL::389 2.00000
+DEAL::390 2.00000
+DEAL::391 2.00000
+DEAL::392 4.00000
+DEAL::393 2.00000
+DEAL::394 2.00000
+DEAL::395 2.00000
+DEAL::396 4.00000
+DEAL::397 2.00000
+DEAL::398 4.00000
+DEAL::399 2.00000
+DEAL::400 2.00000
+DEAL::401 2.00000
+DEAL::402 2.00000
DEAL::403 2.00000
DEAL::404 2.00000
DEAL::405 2.00000
-DEAL::406 2.00000
+DEAL::406 0
DEAL::407 2.00000
DEAL::408 2.00000
DEAL::409 2.00000
DEAL::410 2.00000
-DEAL::411 2.00000
-DEAL::412 2.00000
-DEAL::413 2.00000
-DEAL::414 2.00000
-DEAL::415 0
-DEAL::416 0
-DEAL::417 0
-DEAL::418 0
-DEAL::419 0
-DEAL::420 0
-DEAL::421 0
-DEAL::422 0
-DEAL::423 1.00000
-DEAL::424 1.00000
-DEAL::425 1.00000
-DEAL::426 1.00000
-DEAL::427 1.00000
-DEAL::428 1.00000
-DEAL::429 1.00000
-DEAL::430 1.00000
-DEAL::431 0
-DEAL::432 0
-DEAL::433 0
-DEAL::434 0
+DEAL::411 0
+DEAL::412 0
+DEAL::413 0
+DEAL::414 0
+DEAL::415 3.00000
+DEAL::416 3.00000
+DEAL::417 3.00000
+DEAL::418 3.00000
+DEAL::419 3.00000
+DEAL::420 3.00000
+DEAL::421 3.00000
+DEAL::422 3.00000
+DEAL::423 4.00000
+DEAL::424 4.00000
+DEAL::425 4.00000
+DEAL::426 4.00000
+DEAL::427 4.00000
+DEAL::428 4.00000
+DEAL::429 4.00000
+DEAL::430 4.00000
+DEAL::431 3.00000
+DEAL::432 4.00000
+DEAL::433 3.00000
+DEAL::434 4.00000
DEAL::435 4.00000
DEAL::436 4.00000
DEAL::437 4.00000
DEAL::438 4.00000
DEAL::439 4.00000
DEAL::440 4.00000
-DEAL::441 4.00000
-DEAL::442 4.00000
-DEAL::443 4.00000
-DEAL::444 4.00000
-DEAL::445 4.00000
-DEAL::446 4.00000
-DEAL::447 1.00000
-DEAL::448 1.00000
-DEAL::449 1.00000
-DEAL::450 1.00000
-DEAL::451 1.00000
-DEAL::452 1.00000
-DEAL::453 4.00000
-DEAL::454 4.00000
-DEAL::455 4.00000
-DEAL::456 4.00000
-DEAL::457 4.00000
-DEAL::458 4.00000
-DEAL::459 3.00000
-DEAL::460 4.00000
-DEAL::461 3.00000
-DEAL::462 4.00000
-DEAL::463 3.00000
-DEAL::464 3.00000
-DEAL::465 3.00000
-DEAL::466 4.00000
-DEAL::467 3.00000
-DEAL::468 3.00000
-DEAL::469 4.00000
-DEAL::470 4.00000
-DEAL::471 2.00000
-DEAL::472 2.00000
-DEAL::473 2.00000
-DEAL::474 2.00000
-DEAL::475 4.00000
-DEAL::476 4.00000
-DEAL::477 4.00000
-DEAL::478 4.00000
-DEAL::479 1.00000
-DEAL::480 1.00000
-DEAL::481 1.00000
-DEAL::482 1.00000
-DEAL::483 1.00000
-DEAL::484 1.00000
-DEAL::485 1.00000
-DEAL::486 1.00000
-DEAL::487 1.00000
-DEAL::488 1.00000
-DEAL::489 1.00000
-DEAL::490 1.00000
-DEAL::491 1.00000
-DEAL::492 1.00000
-DEAL::493 1.00000
-DEAL::494 1.00000
-DEAL::495 1.00000
-DEAL::496 1.00000
-DEAL::497 1.00000
-DEAL::498 1.00000
-DEAL::499 1.00000
-DEAL::500 1.00000
-DEAL::501 1.00000
-DEAL::502 1.00000
+DEAL::441 1.00000
+DEAL::442 1.00000
+DEAL::443 1.00000
+DEAL::444 1.00000
+DEAL::445 1.00000
+DEAL::446 1.00000
+DEAL::447 2.00000
+DEAL::448 2.00000
+DEAL::449 2.00000
+DEAL::450 2.00000
+DEAL::451 2.00000
+DEAL::452 2.00000
+DEAL::453 2.00000
+DEAL::454 2.00000
+DEAL::455 1.00000
+DEAL::456 1.00000
+DEAL::457 1.00000
+DEAL::458 1.00000
+DEAL::459 1.00000
+DEAL::460 1.00000
+DEAL::461 1.00000
+DEAL::462 1.00000
+DEAL::463 1.00000
+DEAL::464 1.00000
+DEAL::465 1.00000
+DEAL::466 1.00000
+DEAL::467 1.00000
+DEAL::468 1.00000
+DEAL::469 1.00000
+DEAL::470 1.00000
+DEAL::471 0
+DEAL::472 0
+DEAL::473 0
+DEAL::474 0
+DEAL::475 1.00000
+DEAL::476 1.00000
+DEAL::477 0
+DEAL::478 0
+DEAL::479 3.00000
+DEAL::480 4.00000
+DEAL::481 3.00000
+DEAL::482 4.00000
+DEAL::483 4.00000
+DEAL::484 4.00000
+DEAL::485 4.00000
+DEAL::486 4.00000
+DEAL::487 4.00000
+DEAL::488 4.00000
+DEAL::489 4.00000
+DEAL::490 4.00000
+DEAL::491 2.00000
+DEAL::492 2.00000
+DEAL::493 2.00000
+DEAL::494 2.00000
+DEAL::495 2.00000
+DEAL::496 2.00000
+DEAL::497 2.00000
+DEAL::498 2.00000
+DEAL::499 4.00000
+DEAL::500 4.00000
+DEAL::501 4.00000
+DEAL::502 4.00000
DEAL::503 2.00000
DEAL::504 2.00000
DEAL::505 2.00000
DEAL::506 2.00000
DEAL::507 2.00000
DEAL::508 2.00000
-DEAL::509 2.00000
-DEAL::510 2.00000
-DEAL::511 4.00000
-DEAL::512 4.00000
-DEAL::513 4.00000
-DEAL::514 4.00000
-DEAL::515 4.00000
-DEAL::516 4.00000
-DEAL::517 4.00000
-DEAL::518 4.00000
-DEAL::519 4.00000
+DEAL::509 0
+DEAL::510 0
+DEAL::511 2.00000
+DEAL::512 2.00000
+DEAL::513 2.00000
+DEAL::514 2.00000
+DEAL::515 2.00000
+DEAL::516 2.00000
+DEAL::517 2.00000
+DEAL::518 2.00000
+DEAL::519 2.00000
DEAL::520 2.00000
DEAL::521 2.00000
DEAL::522 2.00000
DEAL::523 2.00000
-DEAL::524 2.00000
+DEAL::524 0
DEAL::525 2.00000
-DEAL::526 2.00000
-DEAL::527 2.00000
-DEAL::528 2.00000
-DEAL::529 2.00000
-DEAL::530 2.00000
-DEAL::531 2.00000
-DEAL::532 2.00000
-DEAL::533 2.00000
-DEAL::534 2.00000
-DEAL::535 0
-DEAL::536 0
-DEAL::537 0
-DEAL::538 0
-DEAL::539 4.00000
-DEAL::540 4.00000
-DEAL::541 4.00000
-DEAL::542 4.00000
-DEAL::543 3.00000
-DEAL::544 3.00000
-DEAL::545 3.00000
-DEAL::546 3.00000
-DEAL::547 3.00000
-DEAL::548 3.00000
-DEAL::549 3.00000
-DEAL::550 3.00000
-DEAL::551 4.00000
-DEAL::552 4.00000
-DEAL::553 4.00000
-DEAL::554 4.00000
-DEAL::555 2.00000
-DEAL::556 2.00000
-DEAL::557 2.00000
-DEAL::558 2.00000
-DEAL::559 4.00000
-DEAL::560 4.00000
-DEAL::561 4.00000
-DEAL::562 4.00000
-DEAL::563 0
-DEAL::564 1.00000
-DEAL::565 0
-DEAL::566 1.00000
-DEAL::567 0
-DEAL::568 0
-DEAL::569 1.00000
-DEAL::570 1.00000
+DEAL::526 0
+DEAL::527 0
+DEAL::528 0
+DEAL::529 0
+DEAL::530 0
+DEAL::531 0
+DEAL::532 0
+DEAL::533 0
+DEAL::534 0
+DEAL::535 3.00000
+DEAL::536 3.00000
+DEAL::537 4.00000
+DEAL::538 4.00000
+DEAL::539 1.00000
+DEAL::540 1.00000
+DEAL::541 1.00000
+DEAL::542 1.00000
+DEAL::543 1.00000
+DEAL::544 1.00000
+DEAL::545 1.00000
+DEAL::546 1.00000
+DEAL::547 1.00000
+DEAL::548 1.00000
+DEAL::549 1.00000
+DEAL::550 1.00000
+DEAL::551 1.00000
+DEAL::552 1.00000
+DEAL::553 1.00000
+DEAL::554 1.00000
+DEAL::555 0
+DEAL::556 0
+DEAL::557 0
+DEAL::558 0
+DEAL::559 0
+DEAL::560 0
+DEAL::561 0
+DEAL::562 0
+DEAL::563 2.00000
+DEAL::564 2.00000
+DEAL::565 2.00000
+DEAL::566 2.00000
+DEAL::567 2.00000
+DEAL::568 2.00000
+DEAL::569 2.00000
+DEAL::570 2.00000
DEAL::571 4.00000
DEAL::572 4.00000
DEAL::573 4.00000
DEAL::577 4.00000
DEAL::578 4.00000
DEAL::579 2.00000
-DEAL::580 2.00000
+DEAL::580 0
DEAL::581 2.00000
-DEAL::582 2.00000
-DEAL::583 3.00000
-DEAL::584 1.00000
-DEAL::585 0
-DEAL::586 0
-DEAL::587 0
-DEAL::588 3.00000
-DEAL::589 3.00000
-DEAL::590 3.00000
-DEAL::591 3.00000
-DEAL::592 2.00000
-DEAL::593 2.00000
-DEAL::594 2.00000
-DEAL::595 2.00000
-DEAL::596 0
-DEAL::597 4.00000
-DEAL::598 4.00000
-DEAL::599 4.00000
-DEAL::600 3.00000
-DEAL::601 3.00000
-DEAL::602 3.00000
-DEAL::603 3.00000
+DEAL::582 0
+DEAL::583 1.00000
+DEAL::584 4.00000
+DEAL::585 3.00000
+DEAL::586 3.00000
+DEAL::587 3.00000
+DEAL::588 1.00000
+DEAL::589 1.00000
+DEAL::590 1.00000
+DEAL::591 1.00000
+DEAL::592 0
+DEAL::593 0
+DEAL::594 0
+DEAL::595 0
+DEAL::596 3.00000
+DEAL::597 2.00000
+DEAL::598 2.00000
+DEAL::599 2.00000
+DEAL::600 1.00000
+DEAL::601 1.00000
+DEAL::602 1.00000
+DEAL::603 1.00000
DEAL::604 4.00000
DEAL::605 4.00000
DEAL::606 4.00000
-DEAL::607 0
-DEAL::608 0
-DEAL::609 0
-DEAL::610 3.00000
-DEAL::611 3.00000
-DEAL::612 3.00000
-DEAL::613 3.00000
-DEAL::614 3.00000
-DEAL::615 3.00000
-DEAL::616 3.00000
-DEAL::617 0
-DEAL::618 0
-DEAL::619 0
-DEAL::620 4.00000
-DEAL::621 4.00000
-DEAL::622 4.00000
-DEAL::623 4.00000
-DEAL::624 2.00000
-DEAL::625 2.00000
-DEAL::626 2.00000
-DEAL::627 1.00000
-DEAL::628 1.00000
-DEAL::629 1.00000
-DEAL::630 3.00000
-DEAL::631 3.00000
-DEAL::632 3.00000
-DEAL::633 4.00000
-DEAL::634 0
-DEAL::635 0
-DEAL::636 0
-DEAL::637 3.00000
-DEAL::638 3.00000
-DEAL::639 3.00000
-DEAL::640 3.00000
-DEAL::641 3.00000
-DEAL::642 3.00000
-DEAL::643 3.00000
-DEAL::644 2.00000
-DEAL::645 2.00000
-DEAL::646 2.00000
+DEAL::607 3.00000
+DEAL::608 3.00000
+DEAL::609 3.00000
+DEAL::610 1.00000
+DEAL::611 1.00000
+DEAL::612 1.00000
+DEAL::613 1.00000
+DEAL::614 1.00000
+DEAL::615 0
+DEAL::616 0
+DEAL::617 3.00000
+DEAL::618 3.00000
+DEAL::619 3.00000
+DEAL::620 2.00000
+DEAL::621 2.00000
+DEAL::622 2.00000
+DEAL::623 2.00000
+DEAL::624 0
+DEAL::625 0
+DEAL::626 0
+DEAL::627 4.00000
+DEAL::628 4.00000
+DEAL::629 4.00000
+DEAL::630 0
+DEAL::631 0
+DEAL::632 0
+DEAL::633 0
+DEAL::634 3.00000
+DEAL::635 3.00000
+DEAL::636 3.00000
+DEAL::637 1.00000
+DEAL::638 1.00000
+DEAL::639 1.00000
+DEAL::640 1.00000
+DEAL::641 1.00000
+DEAL::642 1.00000
+DEAL::643 1.00000
+DEAL::644 0
+DEAL::645 0
+DEAL::646 0
DEAL::647 4.00000
DEAL::648 4.00000
DEAL::649 4.00000
-DEAL::650 4.00000
-DEAL::651 4.00000
-DEAL::652 4.00000
-DEAL::653 4.00000
-DEAL::654 0
-DEAL::655 0
-DEAL::656 0
-DEAL::657 0
-DEAL::658 0
-DEAL::659 0
-DEAL::660 0
-DEAL::661 0
-DEAL::662 0
-DEAL::663 0
-DEAL::664 3.00000
-DEAL::665 3.00000
-DEAL::666 3.00000
-DEAL::667 3.00000
-DEAL::668 3.00000
-DEAL::669 3.00000
-DEAL::670 0
-DEAL::671 0
-DEAL::672 0
-DEAL::673 0
-DEAL::674 1.00000
-DEAL::675 1.00000
-DEAL::676 1.00000
+DEAL::650 2.00000
+DEAL::651 2.00000
+DEAL::652 2.00000
+DEAL::653 2.00000
+DEAL::654 3.00000
+DEAL::655 3.00000
+DEAL::656 3.00000
+DEAL::657 3.00000
+DEAL::658 3.00000
+DEAL::659 3.00000
+DEAL::660 3.00000
+DEAL::661 3.00000
+DEAL::662 3.00000
+DEAL::663 3.00000
+DEAL::664 1.00000
+DEAL::665 1.00000
+DEAL::666 1.00000
+DEAL::667 1.00000
+DEAL::668 1.00000
+DEAL::669 1.00000
+DEAL::670 3.00000
+DEAL::671 3.00000
+DEAL::672 3.00000
+DEAL::673 3.00000
+DEAL::674 2.00000
+DEAL::675 2.00000
+DEAL::676 2.00000
DEAL::677 2.00000
DEAL::678 2.00000
DEAL::679 2.00000
-DEAL::680 1.00000
-DEAL::681 1.00000
-DEAL::682 1.00000
-DEAL::683 1.00000
-DEAL::684 3.00000
-DEAL::685 3.00000
-DEAL::686 3.00000
-DEAL::687 2.00000
-DEAL::688 2.00000
-DEAL::689 2.00000
-DEAL::690 2.00000
-DEAL::691 2.00000
-DEAL::692 2.00000
-DEAL::693 2.00000
-DEAL::694 3.00000
-DEAL::695 3.00000
-DEAL::696 3.00000
-DEAL::697 3.00000
+DEAL::680 3.00000
+DEAL::681 3.00000
+DEAL::682 3.00000
+DEAL::683 3.00000
+DEAL::684 4.00000
+DEAL::685 4.00000
+DEAL::686 4.00000
+DEAL::687 0
+DEAL::688 0
+DEAL::689 0
+DEAL::690 0
+DEAL::691 0
+DEAL::692 0
+DEAL::693 0
+DEAL::694 1.00000
+DEAL::695 1.00000
+DEAL::696 0
+DEAL::697 0
DEAL::698 4.00000
DEAL::699 4.00000
DEAL::700 4.00000
DEAL::701 4.00000
-DEAL::702 0
-DEAL::703 0
-DEAL::704 0
-DEAL::705 0
-DEAL::706 3.00000
-DEAL::707 3.00000
-DEAL::708 3.00000
-DEAL::709 3.00000
-DEAL::710 3.00000
-DEAL::711 3.00000
-DEAL::712 3.00000
-DEAL::713 3.00000
-DEAL::714 2.00000
-DEAL::715 3.00000
-DEAL::716 2.00000
-DEAL::717 2.00000
-DEAL::718 3.00000
-DEAL::719 3.00000
-DEAL::720 3.00000
-DEAL::721 3.00000
-DEAL::722 0
-DEAL::723 0
-DEAL::724 0
-DEAL::725 0
-DEAL::726 4.00000
-DEAL::727 4.00000
-DEAL::728 4.00000
-DEAL::729 4.00000
-DEAL::730 2.00000
-DEAL::731 2.00000
-DEAL::732 2.00000
-DEAL::733 2.00000
-DEAL::734 2.00000
-DEAL::735 2.00000
-DEAL::736 2.00000
-DEAL::737 2.00000
-DEAL::738 1.00000
-DEAL::739 1.00000
-DEAL::740 1.00000
-DEAL::741 1.00000
-DEAL::742 1.00000
-DEAL::743 1.00000
-DEAL::744 1.00000
-DEAL::745 1.00000
-DEAL::746 1.00000
-DEAL::747 1.00000
-DEAL::748 1.00000
-DEAL::749 1.00000
-DEAL::750 0
-DEAL::751 0
-DEAL::752 0
-DEAL::753 0
-DEAL::754 0
-DEAL::755 0
-DEAL::756 0
-DEAL::757 0
-DEAL::758 0
-DEAL::759 0
-DEAL::760 0
-DEAL::761 0
-DEAL::762 3.00000
-DEAL::763 3.00000
-DEAL::764 3.00000
-DEAL::765 3.00000
-DEAL::766 3.00000
-DEAL::767 3.00000
-DEAL::768 3.00000
-DEAL::769 3.00000
-DEAL::770 2.00000
-DEAL::771 2.00000
-DEAL::772 2.00000
-DEAL::773 2.00000
-DEAL::774 2.00000
-DEAL::775 2.00000
-DEAL::776 2.00000
-DEAL::777 2.00000
-DEAL::778 0
-DEAL::779 0
-DEAL::780 0
-DEAL::781 0
-DEAL::782 0
-DEAL::783 0
-DEAL::784 0
-DEAL::785 0
+DEAL::702 3.00000
+DEAL::703 3.00000
+DEAL::704 3.00000
+DEAL::705 3.00000
+DEAL::706 4.00000
+DEAL::707 1.00000
+DEAL::708 4.00000
+DEAL::709 1.00000
+DEAL::710 1.00000
+DEAL::711 1.00000
+DEAL::712 1.00000
+DEAL::713 1.00000
+DEAL::714 0
+DEAL::715 0
+DEAL::716 0
+DEAL::717 0
+DEAL::718 0
+DEAL::719 1.00000
+DEAL::720 0
+DEAL::721 0
+DEAL::722 3.00000
+DEAL::723 3.00000
+DEAL::724 3.00000
+DEAL::725 3.00000
+DEAL::726 2.00000
+DEAL::727 2.00000
+DEAL::728 2.00000
+DEAL::729 2.00000
+DEAL::730 0
+DEAL::731 0
+DEAL::732 0
+DEAL::733 0
+DEAL::734 0
+DEAL::735 0
+DEAL::736 0
+DEAL::737 0
+DEAL::738 4.00000
+DEAL::739 4.00000
+DEAL::740 4.00000
+DEAL::741 4.00000
+DEAL::742 4.00000
+DEAL::743 4.00000
+DEAL::744 4.00000
+DEAL::745 4.00000
+DEAL::746 4.00000
+DEAL::747 4.00000
+DEAL::748 4.00000
+DEAL::749 4.00000
+DEAL::750 3.00000
+DEAL::751 3.00000
+DEAL::752 3.00000
+DEAL::753 3.00000
+DEAL::754 3.00000
+DEAL::755 3.00000
+DEAL::756 3.00000
+DEAL::757 3.00000
+DEAL::758 3.00000
+DEAL::759 3.00000
+DEAL::760 3.00000
+DEAL::761 3.00000
+DEAL::762 1.00000
+DEAL::763 1.00000
+DEAL::764 1.00000
+DEAL::765 1.00000
+DEAL::766 1.00000
+DEAL::767 1.00000
+DEAL::768 1.00000
+DEAL::769 1.00000
+DEAL::770 0
+DEAL::771 0
+DEAL::772 0
+DEAL::773 0
+DEAL::774 0
+DEAL::775 0
+DEAL::776 0
+DEAL::777 0
+DEAL::778 3.00000
+DEAL::779 3.00000
+DEAL::780 3.00000
+DEAL::781 3.00000
+DEAL::782 3.00000
+DEAL::783 3.00000
+DEAL::784 3.00000
+DEAL::785 3.00000
DEAL::786 4.00000
DEAL::787 4.00000
-DEAL::788 4.00000
-DEAL::789 4.00000
-DEAL::790 4.00000
-DEAL::791 4.00000
-DEAL::792 4.00000
-DEAL::793 4.00000
-DEAL::794 4.00000
-DEAL::795 4.00000
-DEAL::796 4.00000
-DEAL::797 4.00000
-DEAL::798 2.00000
-DEAL::799 2.00000
-DEAL::800 2.00000
-DEAL::801 2.00000
-DEAL::802 0
-DEAL::803 0
-DEAL::804 0
-DEAL::805 0
-DEAL::806 0
-DEAL::807 0
-DEAL::808 0
-DEAL::809 0
-DEAL::810 3.00000
-DEAL::811 3.00000
-DEAL::812 3.00000
-DEAL::813 3.00000
-DEAL::814 3.00000
-DEAL::815 3.00000
-DEAL::816 3.00000
-DEAL::817 3.00000
-DEAL::818 3.00000
-DEAL::819 3.00000
-DEAL::820 3.00000
-DEAL::821 3.00000
-DEAL::822 3.00000
-DEAL::823 3.00000
-DEAL::824 3.00000
-DEAL::825 3.00000
-DEAL::826 0
-DEAL::827 0
-DEAL::828 0
-DEAL::829 0
-DEAL::830 1.00000
-DEAL::831 1.00000
-DEAL::832 1.00000
-DEAL::833 1.00000
-DEAL::834 1.00000
-DEAL::835 1.00000
-DEAL::836 1.00000
-DEAL::837 1.00000
-DEAL::838 1.00000
-DEAL::839 1.00000
-DEAL::840 1.00000
-DEAL::841 1.00000
+DEAL::788 1.00000
+DEAL::789 1.00000
+DEAL::790 1.00000
+DEAL::791 1.00000
+DEAL::792 1.00000
+DEAL::793 1.00000
+DEAL::794 2.00000
+DEAL::795 2.00000
+DEAL::796 2.00000
+DEAL::797 2.00000
+DEAL::798 0
+DEAL::799 0
+DEAL::800 0
+DEAL::801 0
+DEAL::802 3.00000
+DEAL::803 3.00000
+DEAL::804 3.00000
+DEAL::805 3.00000
+DEAL::806 3.00000
+DEAL::807 3.00000
+DEAL::808 3.00000
+DEAL::809 3.00000
+DEAL::810 4.00000
+DEAL::811 4.00000
+DEAL::812 4.00000
+DEAL::813 4.00000
+DEAL::814 4.00000
+DEAL::815 1.00000
+DEAL::816 1.00000
+DEAL::817 1.00000
+DEAL::818 0
+DEAL::819 1.00000
+DEAL::820 0
+DEAL::821 1.00000
+DEAL::822 0
+DEAL::823 1.00000
+DEAL::824 0
+DEAL::825 1.00000
+DEAL::826 3.00000
+DEAL::827 3.00000
+DEAL::828 3.00000
+DEAL::829 3.00000
+DEAL::830 4.00000
+DEAL::831 4.00000
+DEAL::832 4.00000
+DEAL::833 4.00000
+DEAL::834 4.00000
+DEAL::835 4.00000
+DEAL::836 4.00000
+DEAL::837 4.00000
+DEAL::838 2.00000
+DEAL::839 2.00000
+DEAL::840 2.00000
+DEAL::841 2.00000
DEAL::842 2.00000
DEAL::843 2.00000
DEAL::844 2.00000
DEAL::845 2.00000
-DEAL::846 1.00000
-DEAL::847 1.00000
-DEAL::848 1.00000
-DEAL::849 1.00000
-DEAL::850 3.00000
-DEAL::851 3.00000
-DEAL::852 3.00000
-DEAL::853 3.00000
-DEAL::854 3.00000
-DEAL::855 3.00000
-DEAL::856 3.00000
-DEAL::857 3.00000
-DEAL::858 2.00000
-DEAL::859 2.00000
-DEAL::860 2.00000
-DEAL::861 2.00000
-DEAL::862 2.00000
-DEAL::863 2.00000
-DEAL::864 2.00000
-DEAL::865 2.00000
-DEAL::866 2.00000
-DEAL::867 2.00000
-DEAL::868 2.00000
-DEAL::869 2.00000
-DEAL::870 2.00000
-DEAL::871 2.00000
-DEAL::872 2.00000
-DEAL::873 2.00000
-DEAL::874 1.00000
+DEAL::846 3.00000
+DEAL::847 3.00000
+DEAL::848 2.00000
+DEAL::849 2.00000
+DEAL::850 2.00000
+DEAL::851 4.00000
+DEAL::852 2.00000
+DEAL::853 4.00000
+DEAL::854 2.00000
+DEAL::855 2.00000
+DEAL::856 2.00000
+DEAL::857 2.00000
+DEAL::858 0
+DEAL::859 0
+DEAL::860 0
+DEAL::861 0
+DEAL::862 0
+DEAL::863 0
+DEAL::864 0
+DEAL::865 0
+DEAL::866 0
+DEAL::867 0
+DEAL::868 0
+DEAL::869 0
+DEAL::870 0
+DEAL::871 0
+DEAL::872 0
+DEAL::873 0
+DEAL::874 4.00000
DEAL::875 4.00000
-DEAL::876 1.00000
+DEAL::876 4.00000
DEAL::877 4.00000
-DEAL::878 3.00000
-DEAL::879 3.00000
-DEAL::880 3.00000
-DEAL::881 3.00000
-DEAL::882 0
-DEAL::883 0
-DEAL::884 0
-DEAL::885 0
-DEAL::886 3.00000
-DEAL::887 3.00000
-DEAL::888 3.00000
-DEAL::889 3.00000
-DEAL::890 2.00000
-DEAL::891 2.00000
-DEAL::892 2.00000
-DEAL::893 2.00000
-DEAL::894 0
-DEAL::895 0
-DEAL::896 0
-DEAL::897 0
+DEAL::878 1.00000
+DEAL::879 1.00000
+DEAL::880 1.00000
+DEAL::881 1.00000
+DEAL::882 3.00000
+DEAL::883 3.00000
+DEAL::884 3.00000
+DEAL::885 3.00000
+DEAL::886 1.00000
+DEAL::887 1.00000
+DEAL::888 1.00000
+DEAL::889 1.00000
+DEAL::890 0
+DEAL::891 0
+DEAL::892 0
+DEAL::893 0
+DEAL::894 3.00000
+DEAL::895 3.00000
+DEAL::896 3.00000
+DEAL::897 3.00000
DEAL::898 4.00000
DEAL::899 4.00000
DEAL::900 4.00000
DEAL::901 4.00000
-DEAL::902 2.00000
-DEAL::903 2.00000
-DEAL::904 2.00000
-DEAL::905 2.00000
-DEAL::906 0
-DEAL::907 0
-DEAL::908 0
-DEAL::909 0
-DEAL::910 1.00000
-DEAL::911 1.00000
-DEAL::912 1.00000
-DEAL::913 1.00000
-DEAL::914 3.00000
-DEAL::915 3.00000
-DEAL::916 3.00000
-DEAL::917 3.00000
-DEAL::918 1.00000
-DEAL::919 1.00000
-DEAL::920 1.00000
-DEAL::921 1.00000
-DEAL::922 1.00000
-DEAL::923 1.00000
-DEAL::924 4.00000
-DEAL::925 4.00000
-DEAL::926 2.00000
-DEAL::927 2.00000
-DEAL::928 2.00000
-DEAL::929 2.00000
-DEAL::930 0
-DEAL::931 1.00000
-DEAL::932 0
-DEAL::933 1.00000
-DEAL::934 0
-DEAL::935 0
-DEAL::936 0
-DEAL::937 0
-DEAL::938 1.00000
-DEAL::939 1.00000
-DEAL::940 1.00000
-DEAL::941 1.00000
-DEAL::942 1.00000
-DEAL::943 1.00000
-DEAL::944 1.00000
-DEAL::945 1.00000
-DEAL::946 2.00000
-DEAL::947 2.00000
-DEAL::948 2.00000
-DEAL::949 2.00000
-DEAL::950 2.00000
-DEAL::951 2.00000
-DEAL::952 2.00000
-DEAL::953 2.00000
-DEAL::954 0
-DEAL::955 0
-DEAL::956 0
-DEAL::957 0
-DEAL::958 1.00000
-DEAL::959 1.00000
-DEAL::960 1.00000
-DEAL::961 1.00000
+DEAL::902 0
+DEAL::903 0
+DEAL::904 0
+DEAL::905 0
+DEAL::906 3.00000
+DEAL::907 3.00000
+DEAL::908 3.00000
+DEAL::909 3.00000
+DEAL::910 4.00000
+DEAL::911 4.00000
+DEAL::912 4.00000
+DEAL::913 4.00000
+DEAL::914 4.00000
+DEAL::915 4.00000
+DEAL::916 0
+DEAL::917 0
+DEAL::918 4.00000
+DEAL::919 4.00000
+DEAL::920 4.00000
+DEAL::921 4.00000
+DEAL::922 2.00000
+DEAL::923 2.00000
+DEAL::924 2.00000
+DEAL::925 2.00000
+DEAL::926 0
+DEAL::927 0
+DEAL::928 0
+DEAL::929 0
+DEAL::930 3.00000
+DEAL::931 3.00000
+DEAL::932 2.00000
+DEAL::933 2.00000
+DEAL::934 3.00000
+DEAL::935 3.00000
+DEAL::936 3.00000
+DEAL::937 3.00000
+DEAL::938 3.00000
+DEAL::939 3.00000
+DEAL::940 3.00000
+DEAL::941 3.00000
+DEAL::942 2.00000
+DEAL::943 2.00000
+DEAL::944 2.00000
+DEAL::945 2.00000
+DEAL::946 0
+DEAL::947 0
+DEAL::948 0
+DEAL::949 0
+DEAL::950 0
+DEAL::951 0
+DEAL::952 0
+DEAL::953 0
+DEAL::954 3.00000
+DEAL::955 3.00000
+DEAL::956 3.00000
+DEAL::957 3.00000
+DEAL::958 4.00000
+DEAL::959 4.00000
+DEAL::960 4.00000
+DEAL::961 4.00000
DEAL::962 4.00000
DEAL::963 4.00000
DEAL::964 4.00000
DEAL::965 4.00000
DEAL::966 4.00000
DEAL::967 4.00000
-DEAL::968 4.00000
-DEAL::969 4.00000
-DEAL::970 1.00000
-DEAL::971 1.00000
-DEAL::972 1.00000
-DEAL::973 1.00000
-DEAL::974 4.00000
-DEAL::975 4.00000
-DEAL::976 4.00000
-DEAL::977 4.00000
-DEAL::978 4.00000
-DEAL::979 4.00000
-DEAL::980 4.00000
-DEAL::981 4.00000
-DEAL::982 1.00000
-DEAL::983 1.00000
-DEAL::984 1.00000
-DEAL::985 1.00000
-DEAL::986 1.00000
-DEAL::987 1.00000
-DEAL::988 1.00000
-DEAL::989 1.00000
-DEAL::990 1.00000
-DEAL::991 1.00000
-DEAL::992 1.00000
-DEAL::993 1.00000
-DEAL::994 1.00000
-DEAL::995 1.00000
-DEAL::996 1.00000
-DEAL::997 1.00000
+DEAL::968 1.00000
+DEAL::969 1.00000
+DEAL::970 2.00000
+DEAL::971 2.00000
+DEAL::972 2.00000
+DEAL::973 2.00000
+DEAL::974 1.00000
+DEAL::975 1.00000
+DEAL::976 1.00000
+DEAL::977 1.00000
+DEAL::978 1.00000
+DEAL::979 1.00000
+DEAL::980 1.00000
+DEAL::981 1.00000
+DEAL::982 2.00000
+DEAL::983 2.00000
+DEAL::984 2.00000
+DEAL::985 2.00000
+DEAL::986 2.00000
+DEAL::987 2.00000
+DEAL::988 2.00000
+DEAL::989 2.00000
+DEAL::990 4.00000
+DEAL::991 4.00000
+DEAL::992 4.00000
+DEAL::993 4.00000
+DEAL::994 2.00000
+DEAL::995 2.00000
+DEAL::996 2.00000
+DEAL::997 2.00000
DEAL::998 2.00000
DEAL::999 2.00000
DEAL::1000 2.00000
DEAL::1001 2.00000
-DEAL::1002 4.00000
-DEAL::1003 4.00000
-DEAL::1004 4.00000
-DEAL::1005 4.00000
+DEAL::1002 2.00000
+DEAL::1003 2.00000
+DEAL::1004 2.00000
+DEAL::1005 2.00000
DEAL::1006 2.00000
DEAL::1007 2.00000
DEAL::1008 2.00000
DEAL::1011 2.00000
DEAL::1012 2.00000
DEAL::1013 2.00000
-DEAL::1014 3.00000
-DEAL::1015 1.00000
+DEAL::1014 1.00000
+DEAL::1015 4.00000
DEAL::1016 4.00000
-DEAL::1017 1.00000
-DEAL::1018 3.00000
-DEAL::1019 3.00000
-DEAL::1020 3.00000
-DEAL::1021 3.00000
-DEAL::1022 3.00000
-DEAL::1023 3.00000
-DEAL::1024 3.00000
-DEAL::1025 3.00000
-DEAL::1026 3.00000
-DEAL::1027 3.00000
-DEAL::1028 3.00000
-DEAL::1029 3.00000
-DEAL::1030 3.00000
-DEAL::1031 3.00000
-DEAL::1032 0
-DEAL::1033 0
-DEAL::1034 0
-DEAL::1035 3.00000
-DEAL::1036 3.00000
-DEAL::1037 3.00000
-DEAL::1038 3.00000
-DEAL::1039 3.00000
-DEAL::1040 3.00000
-DEAL::1041 3.00000
-DEAL::1042 3.00000
-DEAL::1043 1.00000
-DEAL::1044 1.00000
-DEAL::1045 1.00000
-DEAL::1046 1.00000
+DEAL::1017 4.00000
+DEAL::1018 1.00000
+DEAL::1019 1.00000
+DEAL::1020 1.00000
+DEAL::1021 1.00000
+DEAL::1022 1.00000
+DEAL::1023 1.00000
+DEAL::1024 1.00000
+DEAL::1025 1.00000
+DEAL::1026 1.00000
+DEAL::1027 1.00000
+DEAL::1028 1.00000
+DEAL::1029 1.00000
+DEAL::1030 1.00000
+DEAL::1031 1.00000
+DEAL::1032 3.00000
+DEAL::1033 3.00000
+DEAL::1034 3.00000
+DEAL::1035 1.00000
+DEAL::1036 1.00000
+DEAL::1037 1.00000
+DEAL::1038 1.00000
+DEAL::1039 1.00000
+DEAL::1040 1.00000
+DEAL::1041 1.00000
+DEAL::1042 1.00000
+DEAL::1043 4.00000
+DEAL::1044 4.00000
+DEAL::1045 4.00000
+DEAL::1046 4.00000
DEAL::1047 4.00000
DEAL::1048 4.00000
DEAL::1049 4.00000
DEAL::1050 4.00000
-DEAL::1051 0
-DEAL::1052 0
-DEAL::1053 0
-DEAL::1054 0
-DEAL::1055 3.00000
-DEAL::1056 3.00000
-DEAL::1057 3.00000
-DEAL::1058 3.00000
-DEAL::1059 3.00000
-DEAL::1060 3.00000
-DEAL::1061 3.00000
-DEAL::1062 3.00000
-DEAL::1063 3.00000
-DEAL::1064 3.00000
-DEAL::1065 3.00000
-DEAL::1066 3.00000
-DEAL::1067 3.00000
-DEAL::1068 3.00000
-DEAL::1069 3.00000
-DEAL::1070 3.00000
-DEAL::1071 0
-DEAL::1072 0
-DEAL::1073 0
-DEAL::1074 0
-DEAL::1075 0
-DEAL::1076 0
-DEAL::1077 0
-DEAL::1078 0
-DEAL::1079 4.00000
-DEAL::1080 4.00000
-DEAL::1081 4.00000
-DEAL::1082 4.00000
+DEAL::1051 3.00000
+DEAL::1052 3.00000
+DEAL::1053 3.00000
+DEAL::1054 3.00000
+DEAL::1055 1.00000
+DEAL::1056 1.00000
+DEAL::1057 1.00000
+DEAL::1058 1.00000
+DEAL::1059 1.00000
+DEAL::1060 1.00000
+DEAL::1061 1.00000
+DEAL::1062 1.00000
+DEAL::1063 1.00000
+DEAL::1064 1.00000
+DEAL::1065 1.00000
+DEAL::1066 1.00000
+DEAL::1067 1.00000
+DEAL::1068 1.00000
+DEAL::1069 1.00000
+DEAL::1070 1.00000
+DEAL::1071 3.00000
+DEAL::1072 3.00000
+DEAL::1073 3.00000
+DEAL::1074 3.00000
+DEAL::1075 3.00000
+DEAL::1076 3.00000
+DEAL::1077 3.00000
+DEAL::1078 3.00000
+DEAL::1079 2.00000
+DEAL::1080 2.00000
+DEAL::1081 2.00000
+DEAL::1082 2.00000
DEAL::1083 4.00000
DEAL::1084 4.00000
DEAL::1085 4.00000
DEAL::1086 4.00000
-DEAL::1087 0
-DEAL::1088 0
-DEAL::1089 0
-DEAL::1090 0
-DEAL::1091 3.00000
-DEAL::1092 3.00000
-DEAL::1093 3.00000
-DEAL::1094 3.00000
-DEAL::1095 0
-DEAL::1096 0
-DEAL::1097 0
-DEAL::1098 0
-DEAL::1099 2.00000
-DEAL::1100 2.00000
-DEAL::1101 2.00000
-DEAL::1102 2.00000
-DEAL::1103 1.00000
-DEAL::1104 1.00000
-DEAL::1105 1.00000
-DEAL::1106 1.00000
-DEAL::1107 0
-DEAL::1108 0
-DEAL::1109 0
-DEAL::1110 0
-DEAL::1111 3.00000
-DEAL::1112 3.00000
-DEAL::1113 3.00000
-DEAL::1114 3.00000
-DEAL::1115 2.00000
-DEAL::1116 2.00000
-DEAL::1117 2.00000
-DEAL::1118 2.00000
+DEAL::1087 3.00000
+DEAL::1088 3.00000
+DEAL::1089 3.00000
+DEAL::1090 3.00000
+DEAL::1091 0
+DEAL::1092 1.00000
+DEAL::1093 0
+DEAL::1094 1.00000
+DEAL::1095 3.00000
+DEAL::1096 3.00000
+DEAL::1097 3.00000
+DEAL::1098 3.00000
+DEAL::1099 0
+DEAL::1100 0
+DEAL::1101 0
+DEAL::1102 0
+DEAL::1103 4.00000
+DEAL::1104 4.00000
+DEAL::1105 4.00000
+DEAL::1106 4.00000
+DEAL::1107 3.00000
+DEAL::1108 3.00000
+DEAL::1109 3.00000
+DEAL::1110 3.00000
+DEAL::1111 1.00000
+DEAL::1112 1.00000
+DEAL::1113 1.00000
+DEAL::1114 1.00000
+DEAL::1115 0
+DEAL::1116 0
+DEAL::1117 0
+DEAL::1118 0
DEAL::1119 4.00000
DEAL::1120 4.00000
DEAL::1121 4.00000
DEAL::1122 4.00000
-DEAL::1123 0
-DEAL::1124 0
-DEAL::1125 0
-DEAL::1126 0
-DEAL::1127 0
-DEAL::1128 0
-DEAL::1129 0
-DEAL::1130 0
-DEAL::1131 3.00000
-DEAL::1132 3.00000
-DEAL::1133 3.00000
-DEAL::1134 3.00000
-DEAL::1135 3.00000
-DEAL::1136 3.00000
-DEAL::1137 3.00000
-DEAL::1138 3.00000
-DEAL::1139 1.00000
-DEAL::1140 1.00000
-DEAL::1141 1.00000
-DEAL::1142 1.00000
+DEAL::1123 3.00000
+DEAL::1124 3.00000
+DEAL::1125 3.00000
+DEAL::1126 3.00000
+DEAL::1127 3.00000
+DEAL::1128 3.00000
+DEAL::1129 3.00000
+DEAL::1130 3.00000
+DEAL::1131 1.00000
+DEAL::1132 1.00000
+DEAL::1133 1.00000
+DEAL::1134 1.00000
+DEAL::1135 1.00000
+DEAL::1136 1.00000
+DEAL::1137 1.00000
+DEAL::1138 1.00000
+DEAL::1139 2.00000
+DEAL::1140 2.00000
+DEAL::1141 2.00000
+DEAL::1142 2.00000
DEAL::1143 2.00000
DEAL::1144 2.00000
DEAL::1145 2.00000
DEAL::1146 2.00000
-DEAL::1147 3.00000
-DEAL::1148 3.00000
-DEAL::1149 3.00000
-DEAL::1150 3.00000
-DEAL::1151 2.00000
-DEAL::1152 2.00000
-DEAL::1153 2.00000
-DEAL::1154 2.00000
-DEAL::1155 3.00000
-DEAL::1156 3.00000
-DEAL::1157 3.00000
-DEAL::1158 3.00000
-DEAL::1159 3.00000
-DEAL::1160 3.00000
-DEAL::1161 3.00000
-DEAL::1162 3.00000
-DEAL::1163 3.00000
-DEAL::1164 3.00000
-DEAL::1165 3.00000
+DEAL::1147 4.00000
+DEAL::1148 4.00000
+DEAL::1149 4.00000
+DEAL::1150 4.00000
+DEAL::1151 0
+DEAL::1152 0
+DEAL::1153 0
+DEAL::1154 0
+DEAL::1155 1.00000
+DEAL::1156 1.00000
+DEAL::1157 1.00000
+DEAL::1158 1.00000
+DEAL::1159 1.00000
+DEAL::1160 1.00000
+DEAL::1161 1.00000
+DEAL::1162 1.00000
+DEAL::1163 1.00000
+DEAL::1164 1.00000
+DEAL::1165 1.00000
DEAL::1166 4.00000
DEAL::1167 4.00000
DEAL::1168 4.00000
DEAL::1169 4.00000
-DEAL::1170 3.00000
-DEAL::1171 3.00000
-DEAL::1172 3.00000
-DEAL::1173 3.00000
-DEAL::1174 3.00000
-DEAL::1175 3.00000
-DEAL::1176 3.00000
-DEAL::1177 3.00000
-DEAL::1178 0
-DEAL::1179 0
-DEAL::1180 0
-DEAL::1181 0
-DEAL::1182 3.00000
-DEAL::1183 3.00000
-DEAL::1184 3.00000
-DEAL::1185 3.00000
+DEAL::1170 1.00000
+DEAL::1171 1.00000
+DEAL::1172 1.00000
+DEAL::1173 1.00000
+DEAL::1174 1.00000
+DEAL::1175 1.00000
+DEAL::1176 1.00000
+DEAL::1177 1.00000
+DEAL::1178 3.00000
+DEAL::1179 3.00000
+DEAL::1180 3.00000
+DEAL::1181 3.00000
+DEAL::1182 1.00000
+DEAL::1183 1.00000
+DEAL::1184 1.00000
+DEAL::1185 1.00000
DEAL::DoF association:
-DEAL::0 4
-DEAL::1 4
-DEAL::2 4
-DEAL::3 4
-DEAL::4 4
-DEAL::5 4
-DEAL::6 4
-DEAL::7 4
-DEAL::8 4
-DEAL::9 4
-DEAL::10 4
-DEAL::11 3
-DEAL::12 4
-DEAL::13 3
-DEAL::14 3
-DEAL::15 3
-DEAL::16 3
-DEAL::17 3
-DEAL::18 4
-DEAL::19 4
-DEAL::20 2
-DEAL::21 4
-DEAL::22 4
-DEAL::23 4
-DEAL::24 4
-DEAL::25 4
-DEAL::26 4
-DEAL::27 4
-DEAL::28 4
-DEAL::29 4
-DEAL::30 4
-DEAL::31 4
-DEAL::32 4
-DEAL::33 4
-DEAL::34 4
-DEAL::35 4
-DEAL::36 4
-DEAL::37 0
-DEAL::38 0
-DEAL::39 0
-DEAL::40 0
-DEAL::41 0
-DEAL::42 0
-DEAL::43 0
-DEAL::44 0
-DEAL::45 0
-DEAL::46 0
-DEAL::47 0
-DEAL::48 0
-DEAL::49 0
-DEAL::50 0
-DEAL::51 0
-DEAL::52 0
-DEAL::53 0
-DEAL::54 1
-DEAL::55 1
-DEAL::56 3
-DEAL::57 3
-DEAL::58 1
-DEAL::59 1
-DEAL::60 1
-DEAL::61 1
-DEAL::62 1
-DEAL::63 1
-DEAL::64 1
-DEAL::65 1
-DEAL::66 1
-DEAL::67 1
-DEAL::68 1
-DEAL::69 1
-DEAL::70 1
-DEAL::71 1
-DEAL::72 1
-DEAL::73 1
-DEAL::74 4
-DEAL::75 4
-DEAL::76 4
-DEAL::77 4
-DEAL::78 4
-DEAL::79 4
-DEAL::80 4
+DEAL::0 0
+DEAL::1 0
+DEAL::2 0
+DEAL::3 0
+DEAL::4 0
+DEAL::5 0
+DEAL::6 0
+DEAL::7 0
+DEAL::8 0
+DEAL::9 1
+DEAL::10 1
+DEAL::11 1
+DEAL::12 1
+DEAL::13 1
+DEAL::14 1
+DEAL::15 1
+DEAL::16 1
+DEAL::17 1
+DEAL::18 0
+DEAL::19 0
+DEAL::20 0
+DEAL::21 0
+DEAL::22 0
+DEAL::23 0
+DEAL::24 0
+DEAL::25 0
+DEAL::26 0
+DEAL::27 0
+DEAL::28 0
+DEAL::29 0
+DEAL::30 0
+DEAL::31 0
+DEAL::32 0
+DEAL::33 0
+DEAL::34 0
+DEAL::35 0
+DEAL::36 0
+DEAL::37 3
+DEAL::38 3
+DEAL::39 3
+DEAL::40 3
+DEAL::41 3
+DEAL::42 3
+DEAL::43 3
+DEAL::44 3
+DEAL::45 3
+DEAL::46 3
+DEAL::47 3
+DEAL::48 3
+DEAL::49 3
+DEAL::50 3
+DEAL::51 3
+DEAL::52 3
+DEAL::53 3
+DEAL::54 4
+DEAL::55 4
+DEAL::56 4
+DEAL::57 4
+DEAL::58 4
+DEAL::59 4
+DEAL::60 4
+DEAL::61 4
+DEAL::62 4
+DEAL::63 4
+DEAL::64 4
+DEAL::65 4
+DEAL::66 4
+DEAL::67 4
+DEAL::68 4
+DEAL::69 4
+DEAL::70 4
+DEAL::71 4
+DEAL::72 2
+DEAL::73 2
+DEAL::74 2
+DEAL::75 2
+DEAL::76 2
+DEAL::77 2
+DEAL::78 2
+DEAL::79 2
+DEAL::80 2
DEAL::81 2
-DEAL::82 4
-DEAL::83 4
-DEAL::84 4
+DEAL::82 2
+DEAL::83 2
+DEAL::84 2
DEAL::85 2
-DEAL::86 4
-DEAL::87 4
-DEAL::88 4
+DEAL::86 2
+DEAL::87 2
+DEAL::88 2
DEAL::89 2
DEAL::90 2
DEAL::91 2
DEAL::92 2
DEAL::93 2
DEAL::94 2
-DEAL::95 2
-DEAL::96 2
-DEAL::97 2
-DEAL::98 2
-DEAL::99 2
-DEAL::100 2
-DEAL::101 2
-DEAL::102 2
-DEAL::103 2
-DEAL::104 2
-DEAL::105 2
-DEAL::106 2
-DEAL::107 2
-DEAL::108 2
-DEAL::109 2
-DEAL::110 0
-DEAL::111 0
-DEAL::112 0
-DEAL::113 0
-DEAL::114 0
-DEAL::115 0
-DEAL::116 0
-DEAL::117 0
-DEAL::118 0
-DEAL::119 0
-DEAL::120 0
-DEAL::121 0
-DEAL::122 0
-DEAL::123 0
-DEAL::124 0
-DEAL::125 1
-DEAL::126 1
-DEAL::127 1
-DEAL::128 1
-DEAL::129 1
-DEAL::130 1
-DEAL::131 1
-DEAL::132 1
-DEAL::133 1
-DEAL::134 1
-DEAL::135 1
-DEAL::136 2
-DEAL::137 1
-DEAL::138 1
-DEAL::139 1
-DEAL::140 1
-DEAL::141 1
+DEAL::95 0
+DEAL::96 0
+DEAL::97 0
+DEAL::98 0
+DEAL::99 0
+DEAL::100 0
+DEAL::101 0
+DEAL::102 0
+DEAL::103 0
+DEAL::104 0
+DEAL::105 0
+DEAL::106 0
+DEAL::107 0
+DEAL::108 0
+DEAL::109 0
+DEAL::110 3
+DEAL::111 3
+DEAL::112 3
+DEAL::113 3
+DEAL::114 3
+DEAL::115 3
+DEAL::116 3
+DEAL::117 2
+DEAL::118 3
+DEAL::119 3
+DEAL::120 2
+DEAL::121 3
+DEAL::122 2
+DEAL::123 2
+DEAL::124 2
+DEAL::125 4
+DEAL::126 4
+DEAL::127 2
+DEAL::128 4
+DEAL::129 4
+DEAL::130 4
+DEAL::131 4
+DEAL::132 4
+DEAL::133 2
+DEAL::134 2
+DEAL::135 2
+DEAL::136 0
+DEAL::137 2
+DEAL::138 2
+DEAL::139 2
+DEAL::140 2
+DEAL::141 2
DEAL::142 2
-DEAL::143 2
+DEAL::143 0
DEAL::144 2
-DEAL::145 2
-DEAL::146 2
-DEAL::147 2
-DEAL::148 2
-DEAL::149 2
-DEAL::150 2
-DEAL::151 4
-DEAL::152 4
+DEAL::145 0
+DEAL::146 0
+DEAL::147 0
+DEAL::148 0
+DEAL::149 0
+DEAL::150 0
+DEAL::151 2
+DEAL::152 2
DEAL::153 2
-DEAL::154 4
-DEAL::155 2
+DEAL::154 2
+DEAL::155 0
DEAL::156 2
DEAL::157 2
DEAL::158 2
-DEAL::159 2
-DEAL::160 2
-DEAL::161 2
-DEAL::162 2
-DEAL::163 0
-DEAL::164 0
-DEAL::165 0
-DEAL::166 0
-DEAL::167 0
-DEAL::168 0
-DEAL::169 0
-DEAL::170 1
-DEAL::171 1
-DEAL::172 1
-DEAL::173 1
-DEAL::174 1
-DEAL::175 1
-DEAL::176 1
-DEAL::177 1
-DEAL::178 1
-DEAL::179 0
-DEAL::180 0
-DEAL::181 0
-DEAL::182 0
-DEAL::183 0
-DEAL::184 0
-DEAL::185 0
-DEAL::186 0
-DEAL::187 0
-DEAL::188 0
-DEAL::189 0
-DEAL::190 0
-DEAL::191 0
-DEAL::192 0
-DEAL::193 0
-DEAL::194 0
-DEAL::195 0
-DEAL::196 1
-DEAL::197 0
-DEAL::198 1
-DEAL::199 0
-DEAL::200 1
-DEAL::201 0
-DEAL::202 0
-DEAL::203 0
-DEAL::204 1
-DEAL::205 1
-DEAL::206 1
-DEAL::207 1
-DEAL::208 1
-DEAL::209 1
-DEAL::210 1
-DEAL::211 1
-DEAL::212 0
-DEAL::213 1
-DEAL::214 1
-DEAL::215 1
-DEAL::216 1
-DEAL::217 1
-DEAL::218 1
-DEAL::219 1
-DEAL::220 4
-DEAL::221 4
-DEAL::222 4
-DEAL::223 4
-DEAL::224 4
-DEAL::225 4
-DEAL::226 4
-DEAL::227 3
-DEAL::228 3
-DEAL::229 4
-DEAL::230 4
-DEAL::231 4
-DEAL::232 4
-DEAL::233 4
-DEAL::234 1
-DEAL::235 1
-DEAL::236 1
-DEAL::237 1
-DEAL::238 1
-DEAL::239 1
-DEAL::240 4
-DEAL::241 4
-DEAL::242 4
-DEAL::243 4
-DEAL::244 4
-DEAL::245 4
-DEAL::246 4
-DEAL::247 4
-DEAL::248 4
-DEAL::249 4
-DEAL::250 4
-DEAL::251 4
-DEAL::252 4
-DEAL::253 4
-DEAL::254 4
-DEAL::255 4
-DEAL::256 4
-DEAL::257 4
-DEAL::258 2
-DEAL::259 2
-DEAL::260 2
-DEAL::261 2
-DEAL::262 2
-DEAL::263 4
-DEAL::264 2
-DEAL::265 2
-DEAL::266 2
-DEAL::267 4
-DEAL::268 4
-DEAL::269 4
-DEAL::270 4
-DEAL::271 4
-DEAL::272 4
-DEAL::273 2
-DEAL::274 4
-DEAL::275 4
-DEAL::276 2
-DEAL::277 4
-DEAL::278 4
-DEAL::279 4
-DEAL::280 4
-DEAL::281 4
-DEAL::282 4
-DEAL::283 4
-DEAL::284 4
-DEAL::285 4
-DEAL::286 4
-DEAL::287 4
-DEAL::288 4
-DEAL::289 4
-DEAL::290 4
-DEAL::291 0
-DEAL::292 0
-DEAL::293 0
-DEAL::294 0
-DEAL::295 0
-DEAL::296 0
-DEAL::297 0
-DEAL::298 0
-DEAL::299 0
-DEAL::300 0
-DEAL::301 0
-DEAL::302 0
-DEAL::303 0
-DEAL::304 0
-DEAL::305 1
-DEAL::306 1
-DEAL::307 1
-DEAL::308 1
-DEAL::309 1
-DEAL::310 1
-DEAL::311 1
-DEAL::312 1
-DEAL::313 1
-DEAL::314 1
-DEAL::315 1
-DEAL::316 1
-DEAL::317 1
-DEAL::318 1
-DEAL::319 1
+DEAL::159 0
+DEAL::160 0
+DEAL::161 0
+DEAL::162 0
+DEAL::163 3
+DEAL::164 3
+DEAL::165 3
+DEAL::166 3
+DEAL::167 3
+DEAL::168 3
+DEAL::169 3
+DEAL::170 4
+DEAL::171 4
+DEAL::172 4
+DEAL::173 4
+DEAL::174 4
+DEAL::175 4
+DEAL::176 4
+DEAL::177 4
+DEAL::178 4
+DEAL::179 3
+DEAL::180 3
+DEAL::181 3
+DEAL::182 3
+DEAL::183 3
+DEAL::184 3
+DEAL::185 3
+DEAL::186 3
+DEAL::187 3
+DEAL::188 4
+DEAL::189 3
+DEAL::190 4
+DEAL::191 3
+DEAL::192 4
+DEAL::193 3
+DEAL::194 3
+DEAL::195 3
+DEAL::196 4
+DEAL::197 4
+DEAL::198 4
+DEAL::199 4
+DEAL::200 4
+DEAL::201 4
+DEAL::202 4
+DEAL::203 4
+DEAL::204 4
+DEAL::205 4
+DEAL::206 4
+DEAL::207 4
+DEAL::208 4
+DEAL::209 4
+DEAL::210 4
+DEAL::211 4
+DEAL::212 4
+DEAL::213 4
+DEAL::214 4
+DEAL::215 4
+DEAL::216 4
+DEAL::217 4
+DEAL::218 4
+DEAL::219 4
+DEAL::220 1
+DEAL::221 1
+DEAL::222 1
+DEAL::223 1
+DEAL::224 1
+DEAL::225 1
+DEAL::226 1
+DEAL::227 1
+DEAL::228 1
+DEAL::229 1
+DEAL::230 1
+DEAL::231 1
+DEAL::232 1
+DEAL::233 1
+DEAL::234 2
+DEAL::235 2
+DEAL::236 2
+DEAL::237 2
+DEAL::238 2
+DEAL::239 2
+DEAL::240 1
+DEAL::241 1
+DEAL::242 1
+DEAL::243 1
+DEAL::244 1
+DEAL::245 1
+DEAL::246 1
+DEAL::247 1
+DEAL::248 1
+DEAL::249 1
+DEAL::250 1
+DEAL::251 0
+DEAL::252 1
+DEAL::253 1
+DEAL::254 1
+DEAL::255 1
+DEAL::256 1
+DEAL::257 1
+DEAL::258 0
+DEAL::259 0
+DEAL::260 0
+DEAL::261 0
+DEAL::262 0
+DEAL::263 0
+DEAL::264 0
+DEAL::265 0
+DEAL::266 0
+DEAL::267 0
+DEAL::268 0
+DEAL::269 0
+DEAL::270 0
+DEAL::271 0
+DEAL::272 0
+DEAL::273 0
+DEAL::274 0
+DEAL::275 0
+DEAL::276 0
+DEAL::277 0
+DEAL::278 0
+DEAL::279 0
+DEAL::280 0
+DEAL::281 0
+DEAL::282 0
+DEAL::283 0
+DEAL::284 0
+DEAL::285 0
+DEAL::286 0
+DEAL::287 0
+DEAL::288 0
+DEAL::289 0
+DEAL::290 0
+DEAL::291 2
+DEAL::292 3
+DEAL::293 2
+DEAL::294 2
+DEAL::295 2
+DEAL::296 2
+DEAL::297 3
+DEAL::298 2
+DEAL::299 2
+DEAL::300 2
+DEAL::301 2
+DEAL::302 3
+DEAL::303 2
+DEAL::304 2
+DEAL::305 2
+DEAL::306 2
+DEAL::307 2
+DEAL::308 2
+DEAL::309 2
+DEAL::310 2
+DEAL::311 2
+DEAL::312 2
+DEAL::313 2
+DEAL::314 4
+DEAL::315 4
+DEAL::316 4
+DEAL::317 4
+DEAL::318 4
+DEAL::319 4
DEAL::320 4
-DEAL::321 1
-DEAL::322 1
-DEAL::323 1
-DEAL::324 1
-DEAL::325 1
-DEAL::326 1
-DEAL::327 1
+DEAL::321 4
+DEAL::322 4
+DEAL::323 4
+DEAL::324 4
+DEAL::325 4
+DEAL::326 4
+DEAL::327 4
DEAL::328 2
DEAL::329 2
DEAL::330 2
DEAL::331 2
DEAL::332 2
-DEAL::333 1
+DEAL::333 2
DEAL::334 2
DEAL::335 2
-DEAL::336 4
+DEAL::336 2
DEAL::337 2
-DEAL::338 4
+DEAL::338 2
DEAL::339 2
-DEAL::340 4
-DEAL::341 4
-DEAL::342 4
-DEAL::343 4
-DEAL::344 4
-DEAL::345 2
-DEAL::346 2
-DEAL::347 2
-DEAL::348 2
-DEAL::349 2
-DEAL::350 2
-DEAL::351 2
-DEAL::352 2
-DEAL::353 2
-DEAL::354 2
-DEAL::355 2
-DEAL::356 2
-DEAL::357 0
-DEAL::358 0
-DEAL::359 0
-DEAL::360 0
-DEAL::361 0
-DEAL::362 0
-DEAL::363 0
-DEAL::364 0
-DEAL::365 0
-DEAL::366 0
-DEAL::367 1
-DEAL::368 0
-DEAL::369 0
-DEAL::370 0
-DEAL::371 4
-DEAL::372 4
-DEAL::373 4
-DEAL::374 4
-DEAL::375 4
-DEAL::376 4
-DEAL::377 4
-DEAL::378 4
-DEAL::379 4
-DEAL::380 4
-DEAL::381 4
-DEAL::382 4
-DEAL::383 4
-DEAL::384 4
-DEAL::385 4
-DEAL::386 4
-DEAL::387 4
-DEAL::388 4
-DEAL::389 3
-DEAL::390 4
-DEAL::391 3
-DEAL::392 3
-DEAL::393 3
-DEAL::394 3
-DEAL::395 3
-DEAL::396 3
-DEAL::397 3
-DEAL::398 3
-DEAL::399 3
-DEAL::400 3
-DEAL::401 4
-DEAL::402 4
-DEAL::403 4
-DEAL::404 4
-DEAL::405 4
-DEAL::406 4
-DEAL::407 4
-DEAL::408 4
-DEAL::409 4
-DEAL::410 4
-DEAL::411 4
-DEAL::412 4
-DEAL::413 4
-DEAL::414 4
-DEAL::415 4
-DEAL::416 4
-DEAL::417 2
-DEAL::418 2
-DEAL::419 2
-DEAL::420 2
-DEAL::421 2
-DEAL::422 2
-DEAL::423 2
-DEAL::424 2
-DEAL::425 2
-DEAL::426 2
-DEAL::427 2
-DEAL::428 2
-DEAL::429 2
-DEAL::430 4
-DEAL::431 4
-DEAL::432 4
-DEAL::433 4
-DEAL::434 4
-DEAL::435 4
-DEAL::436 4
-DEAL::437 4
-DEAL::438 4
-DEAL::439 4
-DEAL::440 0
-DEAL::441 0
-DEAL::442 0
-DEAL::443 0
-DEAL::444 1
-DEAL::445 1
-DEAL::446 1
-DEAL::447 1
-DEAL::448 1
-DEAL::449 1
-DEAL::450 1
-DEAL::451 1
+DEAL::340 2
+DEAL::341 2
+DEAL::342 2
+DEAL::343 2
+DEAL::344 2
+DEAL::345 0
+DEAL::346 0
+DEAL::347 0
+DEAL::348 0
+DEAL::349 0
+DEAL::350 0
+DEAL::351 0
+DEAL::352 0
+DEAL::353 0
+DEAL::354 0
+DEAL::355 0
+DEAL::356 0
+DEAL::357 3
+DEAL::358 3
+DEAL::359 3
+DEAL::360 3
+DEAL::361 3
+DEAL::362 3
+DEAL::363 3
+DEAL::364 3
+DEAL::365 3
+DEAL::366 3
+DEAL::367 4
+DEAL::368 4
+DEAL::369 4
+DEAL::370 4
+DEAL::371 1
+DEAL::372 1
+DEAL::373 1
+DEAL::374 1
+DEAL::375 1
+DEAL::376 1
+DEAL::377 1
+DEAL::378 1
+DEAL::379 1
+DEAL::380 1
+DEAL::381 1
+DEAL::382 1
+DEAL::383 1
+DEAL::384 1
+DEAL::385 1
+DEAL::386 1
+DEAL::387 1
+DEAL::388 1
+DEAL::389 1
+DEAL::390 1
+DEAL::391 1
+DEAL::392 1
+DEAL::393 1
+DEAL::394 1
+DEAL::395 1
+DEAL::396 1
+DEAL::397 1
+DEAL::398 1
+DEAL::399 1
+DEAL::400 1
+DEAL::401 1
+DEAL::402 1
+DEAL::403 1
+DEAL::404 1
+DEAL::405 1
+DEAL::406 1
+DEAL::407 1
+DEAL::408 1
+DEAL::409 1
+DEAL::410 1
+DEAL::411 1
+DEAL::412 1
+DEAL::413 1
+DEAL::414 1
+DEAL::415 1
+DEAL::416 1
+DEAL::417 0
+DEAL::418 0
+DEAL::419 0
+DEAL::420 0
+DEAL::421 0
+DEAL::422 0
+DEAL::423 0
+DEAL::424 0
+DEAL::425 0
+DEAL::426 0
+DEAL::427 0
+DEAL::428 0
+DEAL::429 0
+DEAL::430 0
+DEAL::431 0
+DEAL::432 0
+DEAL::433 0
+DEAL::434 0
+DEAL::435 0
+DEAL::436 0
+DEAL::437 0
+DEAL::438 0
+DEAL::439 0
+DEAL::440 2
+DEAL::441 2
+DEAL::442 2
+DEAL::443 2
+DEAL::444 2
+DEAL::445 2
+DEAL::446 2
+DEAL::447 2
+DEAL::448 2
+DEAL::449 2
+DEAL::450 2
+DEAL::451 2
DEAL::452 4
DEAL::453 4
DEAL::454 4
DEAL::459 4
DEAL::460 4
DEAL::461 4
-DEAL::462 1
+DEAL::462 4
DEAL::463 4
-DEAL::464 1
+DEAL::464 4
DEAL::465 4
DEAL::466 4
DEAL::467 4
DEAL::485 4
DEAL::486 4
DEAL::487 4
-DEAL::488 2
-DEAL::489 2
-DEAL::490 2
-DEAL::491 2
-DEAL::492 2
-DEAL::493 2
-DEAL::494 2
-DEAL::495 2
-DEAL::496 2
+DEAL::488 0
+DEAL::489 0
+DEAL::490 0
+DEAL::491 0
+DEAL::492 0
+DEAL::493 0
+DEAL::494 0
+DEAL::495 0
+DEAL::496 0
DEAL::497 2
-DEAL::498 2
-DEAL::499 2
-DEAL::500 2
-DEAL::501 2
-DEAL::502 2
-DEAL::503 2
-DEAL::504 2
-DEAL::505 2
-DEAL::506 2
-DEAL::507 2
-DEAL::508 0
-DEAL::509 0
-DEAL::510 1
-DEAL::511 0
-DEAL::512 0
-DEAL::513 0
-DEAL::514 0
-DEAL::515 0
-DEAL::516 1
-DEAL::517 1
-DEAL::518 1
-DEAL::519 1
-DEAL::520 1
-DEAL::521 1
-DEAL::522 0
-DEAL::523 0
-DEAL::524 1
-DEAL::525 1
-DEAL::526 1
-DEAL::527 1
-DEAL::528 1
-DEAL::529 1
-DEAL::530 1
-DEAL::531 1
-DEAL::532 1
-DEAL::533 1
-DEAL::534 1
-DEAL::535 1
-DEAL::536 1
-DEAL::537 1
-DEAL::538 1
-DEAL::539 1
-DEAL::540 1
-DEAL::541 1
-DEAL::542 1
-DEAL::543 0
-DEAL::544 0
-DEAL::545 0
-DEAL::546 0
-DEAL::547 0
-DEAL::548 0
-DEAL::549 0
-DEAL::550 0
-DEAL::551 0
-DEAL::552 0
-DEAL::553 0
-DEAL::554 0
-DEAL::555 0
-DEAL::556 0
-DEAL::557 1
-DEAL::558 1
-DEAL::559 1
-DEAL::560 1
-DEAL::561 1
-DEAL::562 1
-DEAL::563 1
-DEAL::564 1
-DEAL::565 1
-DEAL::566 1
-DEAL::567 1
-DEAL::568 1
-DEAL::569 1
-DEAL::570 1
-DEAL::571 1
-DEAL::572 1
-DEAL::573 1
-DEAL::574 1
-DEAL::575 1
-DEAL::576 1
-DEAL::577 1
-DEAL::578 1
-DEAL::579 1
-DEAL::580 1
-DEAL::581 1
-DEAL::582 1
-DEAL::583 1
-DEAL::584 1
-DEAL::585 4
-DEAL::586 4
-DEAL::587 4
-DEAL::588 4
-DEAL::589 4
-DEAL::590 4
-DEAL::591 4
-DEAL::592 4
-DEAL::593 4
-DEAL::594 4
-DEAL::595 4
-DEAL::596 4
-DEAL::597 4
-DEAL::598 4
-DEAL::599 4
-DEAL::600 4
-DEAL::601 4
-DEAL::602 4
-DEAL::603 4
-DEAL::604 2
-DEAL::605 2
-DEAL::606 2
-DEAL::607 2
-DEAL::608 2
-DEAL::609 2
-DEAL::610 2
-DEAL::611 2
-DEAL::612 2
-DEAL::613 2
-DEAL::614 2
-DEAL::615 2
-DEAL::616 2
-DEAL::617 2
-DEAL::618 2
-DEAL::619 2
-DEAL::620 3
-DEAL::621 3
-DEAL::622 3
-DEAL::623 3
-DEAL::624 3
-DEAL::625 3
-DEAL::626 3
-DEAL::627 3
-DEAL::628 3
-DEAL::629 4
-DEAL::630 4
-DEAL::631 4
-DEAL::632 4
-DEAL::633 4
-DEAL::634 4
-DEAL::635 4
-DEAL::636 4
-DEAL::637 4
-DEAL::638 0
-DEAL::639 0
-DEAL::640 0
-DEAL::641 0
-DEAL::642 0
-DEAL::643 0
-DEAL::644 0
-DEAL::645 0
-DEAL::646 0
-DEAL::647 3
-DEAL::648 3
-DEAL::649 3
-DEAL::650 3
-DEAL::651 3
-DEAL::652 3
-DEAL::653 3
-DEAL::654 3
-DEAL::655 3
-DEAL::656 3
-DEAL::657 3
-DEAL::658 3
-DEAL::659 3
-DEAL::660 3
-DEAL::661 3
-DEAL::662 3
-DEAL::663 3
-DEAL::664 3
-DEAL::665 3
-DEAL::666 3
-DEAL::667 3
-DEAL::668 3
-DEAL::669 3
-DEAL::670 3
-DEAL::671 3
-DEAL::672 2
-DEAL::673 2
-DEAL::674 2
-DEAL::675 2
-DEAL::676 2
-DEAL::677 2
-DEAL::678 2
-DEAL::679 2
-DEAL::680 2
-DEAL::681 2
-DEAL::682 2
-DEAL::683 2
-DEAL::684 2
-DEAL::685 2
-DEAL::686 2
-DEAL::687 2
-DEAL::688 2
-DEAL::689 3
-DEAL::690 3
-DEAL::691 3
-DEAL::692 3
-DEAL::693 3
-DEAL::694 3
-DEAL::695 0
-DEAL::696 0
-DEAL::697 0
-DEAL::698 0
-DEAL::699 0
-DEAL::700 0
-DEAL::701 0
-DEAL::702 0
-DEAL::703 0
-DEAL::704 4
-DEAL::705 4
-DEAL::706 4
-DEAL::707 4
-DEAL::708 4
-DEAL::709 4
-DEAL::710 4
-DEAL::711 4
-DEAL::712 4
-DEAL::713 2
-DEAL::714 2
-DEAL::715 2
-DEAL::716 2
-DEAL::717 2
-DEAL::718 2
-DEAL::719 2
-DEAL::720 2
-DEAL::721 2
-DEAL::722 3
-DEAL::723 2
-DEAL::724 3
-DEAL::725 3
-DEAL::726 3
-DEAL::727 3
-DEAL::728 3
-DEAL::729 3
-DEAL::730 4
-DEAL::731 2
-DEAL::732 4
-DEAL::733 3
-DEAL::734 3
-DEAL::735 4
-DEAL::736 4
-DEAL::737 4
-DEAL::738 4
-DEAL::739 4
-DEAL::740 3
-DEAL::741 3
-DEAL::742 3
-DEAL::743 3
-DEAL::744 3
-DEAL::745 3
-DEAL::746 3
-DEAL::747 3
-DEAL::748 3
-DEAL::749 3
-DEAL::750 3
-DEAL::751 3
-DEAL::752 3
-DEAL::753 3
-DEAL::754 3
-DEAL::755 3
-DEAL::756 3
-DEAL::757 3
-DEAL::758 3
-DEAL::759 3
-DEAL::760 3
-DEAL::761 2
-DEAL::762 2
-DEAL::763 2
-DEAL::764 2
-DEAL::765 2
-DEAL::766 2
-DEAL::767 2
-DEAL::768 2
-DEAL::769 0
-DEAL::770 0
-DEAL::771 0
-DEAL::772 0
-DEAL::773 0
-DEAL::774 0
-DEAL::775 0
-DEAL::776 0
-DEAL::777 0
-DEAL::778 0
-DEAL::779 0
-DEAL::780 0
-DEAL::781 0
-DEAL::782 0
-DEAL::783 0
-DEAL::784 0
-DEAL::785 4
+DEAL::498 0
+DEAL::499 0
+DEAL::500 0
+DEAL::501 0
+DEAL::502 0
+DEAL::503 0
+DEAL::504 0
+DEAL::505 0
+DEAL::506 0
+DEAL::507 0
+DEAL::508 4
+DEAL::509 4
+DEAL::510 4
+DEAL::511 4
+DEAL::512 4
+DEAL::513 4
+DEAL::514 4
+DEAL::515 4
+DEAL::516 4
+DEAL::517 4
+DEAL::518 4
+DEAL::519 4
+DEAL::520 4
+DEAL::521 4
+DEAL::522 4
+DEAL::523 4
+DEAL::524 4
+DEAL::525 4
+DEAL::526 4
+DEAL::527 4
+DEAL::528 4
+DEAL::529 4
+DEAL::530 4
+DEAL::531 4
+DEAL::532 4
+DEAL::533 4
+DEAL::534 4
+DEAL::535 4
+DEAL::536 4
+DEAL::537 4
+DEAL::538 4
+DEAL::539 4
+DEAL::540 4
+DEAL::541 4
+DEAL::542 4
+DEAL::543 3
+DEAL::544 3
+DEAL::545 3
+DEAL::546 3
+DEAL::547 3
+DEAL::548 3
+DEAL::549 3
+DEAL::550 3
+DEAL::551 3
+DEAL::552 3
+DEAL::553 3
+DEAL::554 3
+DEAL::555 3
+DEAL::556 3
+DEAL::557 4
+DEAL::558 4
+DEAL::559 4
+DEAL::560 4
+DEAL::561 4
+DEAL::562 4
+DEAL::563 4
+DEAL::564 4
+DEAL::565 4
+DEAL::566 4
+DEAL::567 4
+DEAL::568 4
+DEAL::569 4
+DEAL::570 4
+DEAL::571 4
+DEAL::572 2
+DEAL::573 2
+DEAL::574 2
+DEAL::575 2
+DEAL::576 2
+DEAL::577 2
+DEAL::578 2
+DEAL::579 2
+DEAL::580 2
+DEAL::581 2
+DEAL::582 2
+DEAL::583 2
+DEAL::584 2
+DEAL::585 2
+DEAL::586 2
+DEAL::587 2
+DEAL::588 2
+DEAL::589 2
+DEAL::590 2
+DEAL::591 2
+DEAL::592 2
+DEAL::593 2
+DEAL::594 2
+DEAL::595 2
+DEAL::596 2
+DEAL::597 2
+DEAL::598 2
+DEAL::599 2
+DEAL::600 2
+DEAL::601 2
+DEAL::602 2
+DEAL::603 2
+DEAL::604 0
+DEAL::605 0
+DEAL::606 0
+DEAL::607 0
+DEAL::608 0
+DEAL::609 0
+DEAL::610 0
+DEAL::611 0
+DEAL::612 0
+DEAL::613 0
+DEAL::614 0
+DEAL::615 0
+DEAL::616 0
+DEAL::617 0
+DEAL::618 0
+DEAL::619 0
+DEAL::620 1
+DEAL::621 1
+DEAL::622 0
+DEAL::623 0
+DEAL::624 0
+DEAL::625 0
+DEAL::626 0
+DEAL::627 0
+DEAL::628 0
+DEAL::629 4
+DEAL::630 4
+DEAL::631 4
+DEAL::632 4
+DEAL::633 4
+DEAL::634 4
+DEAL::635 4
+DEAL::636 4
+DEAL::637 4
+DEAL::638 3
+DEAL::639 3
+DEAL::640 3
+DEAL::641 3
+DEAL::642 3
+DEAL::643 3
+DEAL::644 3
+DEAL::645 3
+DEAL::646 3
+DEAL::647 1
+DEAL::648 1
+DEAL::649 1
+DEAL::650 1
+DEAL::651 1
+DEAL::652 1
+DEAL::653 1
+DEAL::654 1
+DEAL::655 4
+DEAL::656 1
+DEAL::657 1
+DEAL::658 4
+DEAL::659 1
+DEAL::660 1
+DEAL::661 1
+DEAL::662 1
+DEAL::663 1
+DEAL::664 1
+DEAL::665 1
+DEAL::666 1
+DEAL::667 1
+DEAL::668 1
+DEAL::669 1
+DEAL::670 1
+DEAL::671 1
+DEAL::672 0
+DEAL::673 0
+DEAL::674 0
+DEAL::675 0
+DEAL::676 0
+DEAL::677 0
+DEAL::678 0
+DEAL::679 0
+DEAL::680 0
+DEAL::681 0
+DEAL::682 0
+DEAL::683 0
+DEAL::684 0
+DEAL::685 0
+DEAL::686 0
+DEAL::687 0
+DEAL::688 0
+DEAL::689 0
+DEAL::690 0
+DEAL::691 0
+DEAL::692 0
+DEAL::693 0
+DEAL::694 0
+DEAL::695 3
+DEAL::696 3
+DEAL::697 3
+DEAL::698 3
+DEAL::699 3
+DEAL::700 3
+DEAL::701 3
+DEAL::702 3
+DEAL::703 3
+DEAL::704 2
+DEAL::705 2
+DEAL::706 2
+DEAL::707 2
+DEAL::708 2
+DEAL::709 2
+DEAL::710 2
+DEAL::711 2
+DEAL::712 2
+DEAL::713 0
+DEAL::714 0
+DEAL::715 0
+DEAL::716 0
+DEAL::717 0
+DEAL::718 0
+DEAL::719 0
+DEAL::720 0
+DEAL::721 0
+DEAL::722 0
+DEAL::723 0
+DEAL::724 0
+DEAL::725 0
+DEAL::726 0
+DEAL::727 0
+DEAL::728 0
+DEAL::729 0
+DEAL::730 0
+DEAL::731 0
+DEAL::732 0
+DEAL::733 0
+DEAL::734 0
+DEAL::735 0
+DEAL::736 0
+DEAL::737 0
+DEAL::738 0
+DEAL::739 0
+DEAL::740 1
+DEAL::741 1
+DEAL::742 1
+DEAL::743 1
+DEAL::744 1
+DEAL::745 1
+DEAL::746 1
+DEAL::747 1
+DEAL::748 1
+DEAL::749 1
+DEAL::750 1
+DEAL::751 1
+DEAL::752 1
+DEAL::753 1
+DEAL::754 1
+DEAL::755 1
+DEAL::756 1
+DEAL::757 1
+DEAL::758 1
+DEAL::759 1
+DEAL::760 1
+DEAL::761 0
+DEAL::762 0
+DEAL::763 0
+DEAL::764 0
+DEAL::765 0
+DEAL::766 0
+DEAL::767 0
+DEAL::768 0
+DEAL::769 3
+DEAL::770 3
+DEAL::771 3
+DEAL::772 3
+DEAL::773 3
+DEAL::774 3
+DEAL::775 3
+DEAL::776 3
+DEAL::777 3
+DEAL::778 3
+DEAL::779 3
+DEAL::780 3
+DEAL::781 3
+DEAL::782 3
+DEAL::783 3
+DEAL::784 3
+DEAL::785 1
DEAL::786 4
-DEAL::787 4
-DEAL::788 4
-DEAL::789 4
-DEAL::790 4
-DEAL::791 4
-DEAL::792 4
-DEAL::793 4
-DEAL::794 4
-DEAL::795 4
-DEAL::796 4
-DEAL::797 4
-DEAL::798 4
-DEAL::799 4
-DEAL::800 4
-DEAL::801 4
-DEAL::802 4
-DEAL::803 4
-DEAL::804 4
-DEAL::805 4
-DEAL::806 4
-DEAL::807 2
-DEAL::808 2
-DEAL::809 2
-DEAL::810 2
-DEAL::811 2
-DEAL::812 2
-DEAL::813 2
-DEAL::814 2
-DEAL::815 2
-DEAL::816 2
-DEAL::817 2
-DEAL::818 2
-DEAL::819 2
-DEAL::820 2
-DEAL::821 2
-DEAL::822 2
-DEAL::823 2
-DEAL::824 2
-DEAL::825 2
-DEAL::826 2
-DEAL::827 0
-DEAL::828 0
-DEAL::829 0
-DEAL::830 0
-DEAL::831 0
-DEAL::832 0
-DEAL::833 0
-DEAL::834 0
-DEAL::835 0
-DEAL::836 0
-DEAL::837 0
-DEAL::838 0
-DEAL::839 0
-DEAL::840 0
-DEAL::841 0
-DEAL::842 0
-DEAL::843 0
-DEAL::844 0
-DEAL::845 0
-DEAL::846 0
-DEAL::847 0
-DEAL::848 3
-DEAL::849 3
-DEAL::850 3
-DEAL::851 3
-DEAL::852 3
-DEAL::853 3
-DEAL::854 3
-DEAL::855 3
-DEAL::856 3
-DEAL::857 3
-DEAL::858 3
-DEAL::859 3
-DEAL::860 3
-DEAL::861 3
-DEAL::862 3
-DEAL::863 3
-DEAL::864 0
-DEAL::865 0
-DEAL::866 0
-DEAL::867 0
-DEAL::868 0
-DEAL::869 0
-DEAL::870 0
-DEAL::871 0
-DEAL::872 0
-DEAL::873 0
-DEAL::874 0
-DEAL::875 0
-DEAL::876 0
-DEAL::877 0
-DEAL::878 0
-DEAL::879 0
-DEAL::880 1
-DEAL::881 1
-DEAL::882 1
-DEAL::883 1
-DEAL::884 1
-DEAL::885 1
-DEAL::886 1
-DEAL::887 1
-DEAL::888 1
-DEAL::889 1
-DEAL::890 1
-DEAL::891 1
-DEAL::892 1
-DEAL::893 1
-DEAL::894 1
-DEAL::895 1
-DEAL::896 1
-DEAL::897 1
-DEAL::898 1
-DEAL::899 1
-DEAL::900 1
-DEAL::901 1
-DEAL::902 1
-DEAL::903 1
-DEAL::904 1
-DEAL::905 1
+DEAL::787 1
+DEAL::788 1
+DEAL::789 1
+DEAL::790 1
+DEAL::791 1
+DEAL::792 1
+DEAL::793 2
+DEAL::794 2
+DEAL::795 2
+DEAL::796 2
+DEAL::797 2
+DEAL::798 2
+DEAL::799 2
+DEAL::800 2
+DEAL::801 2
+DEAL::802 2
+DEAL::803 2
+DEAL::804 2
+DEAL::805 2
+DEAL::806 2
+DEAL::807 0
+DEAL::808 0
+DEAL::809 0
+DEAL::810 0
+DEAL::811 0
+DEAL::812 0
+DEAL::813 0
+DEAL::814 0
+DEAL::815 0
+DEAL::816 0
+DEAL::817 0
+DEAL::818 0
+DEAL::819 0
+DEAL::820 0
+DEAL::821 0
+DEAL::822 0
+DEAL::823 0
+DEAL::824 0
+DEAL::825 0
+DEAL::826 0
+DEAL::827 3
+DEAL::828 3
+DEAL::829 3
+DEAL::830 3
+DEAL::831 3
+DEAL::832 3
+DEAL::833 3
+DEAL::834 3
+DEAL::835 3
+DEAL::836 3
+DEAL::837 3
+DEAL::838 3
+DEAL::839 3
+DEAL::840 3
+DEAL::841 3
+DEAL::842 3
+DEAL::843 3
+DEAL::844 3
+DEAL::845 3
+DEAL::846 3
+DEAL::847 3
+DEAL::848 4
+DEAL::849 4
+DEAL::850 4
+DEAL::851 4
+DEAL::852 4
+DEAL::853 4
+DEAL::854 4
+DEAL::855 4
+DEAL::856 4
+DEAL::857 4
+DEAL::858 1
+DEAL::859 4
+DEAL::860 4
+DEAL::861 4
+DEAL::862 4
+DEAL::863 4
+DEAL::864 3
+DEAL::865 3
+DEAL::866 3
+DEAL::867 3
+DEAL::868 3
+DEAL::869 3
+DEAL::870 3
+DEAL::871 3
+DEAL::872 3
+DEAL::873 3
+DEAL::874 3
+DEAL::875 3
+DEAL::876 3
+DEAL::877 3
+DEAL::878 3
+DEAL::879 3
+DEAL::880 4
+DEAL::881 4
+DEAL::882 4
+DEAL::883 4
+DEAL::884 4
+DEAL::885 4
+DEAL::886 4
+DEAL::887 4
+DEAL::888 4
+DEAL::889 4
+DEAL::890 4
+DEAL::891 4
+DEAL::892 4
+DEAL::893 2
+DEAL::894 2
+DEAL::895 2
+DEAL::896 2
+DEAL::897 2
+DEAL::898 2
+DEAL::899 2
+DEAL::900 2
+DEAL::901 2
+DEAL::902 2
+DEAL::903 2
+DEAL::904 2
+DEAL::905 2
DEAL::906 2
DEAL::907 2
DEAL::908 2
DEAL::916 2
DEAL::917 2
DEAL::918 2
-DEAL::919 0
-DEAL::920 0
-DEAL::921 0
-DEAL::922 0
-DEAL::923 0
-DEAL::924 0
-DEAL::925 0
-DEAL::926 0
-DEAL::927 0
-DEAL::928 0
-DEAL::929 0
-DEAL::930 0
-DEAL::931 0
-DEAL::932 0
-DEAL::933 0
-DEAL::934 0
-DEAL::935 0
-DEAL::936 0
-DEAL::937 0
-DEAL::938 0
-DEAL::939 0
-DEAL::940 1
-DEAL::941 1
-DEAL::942 1
-DEAL::943 1
-DEAL::944 1
-DEAL::945 1
-DEAL::946 1
-DEAL::947 1
-DEAL::948 1
-DEAL::949 1
-DEAL::950 1
-DEAL::951 1
-DEAL::952 1
-DEAL::953 1
-DEAL::954 1
-DEAL::955 1
-DEAL::956 1
-DEAL::957 1
-DEAL::958 3
-DEAL::959 1
-DEAL::960 3
-DEAL::961 1
-DEAL::962 3
-DEAL::963 3
-DEAL::964 3
-DEAL::965 3
-DEAL::966 2
-DEAL::967 2
-DEAL::968 2
-DEAL::969 2
-DEAL::970 2
-DEAL::971 2
-DEAL::972 2
-DEAL::973 2
-DEAL::974 2
-DEAL::975 2
-DEAL::976 2
-DEAL::977 2
-DEAL::978 2
-DEAL::979 2
-DEAL::980 2
-DEAL::981 2
-DEAL::982 2
-DEAL::983 2
-DEAL::984 2
-DEAL::985 2
-DEAL::986 2
-DEAL::987 2
-DEAL::988 2
-DEAL::989 2
-DEAL::990 2
-DEAL::991 2
-DEAL::992 2
-DEAL::993 2
-DEAL::994 2
-DEAL::995 2
-DEAL::996 2
-DEAL::997 2
-DEAL::998 2
-DEAL::999 2
-DEAL::1000 2
-DEAL::1001 2
-DEAL::1002 2
-DEAL::1003 2
-DEAL::1004 2
-DEAL::1005 2
-DEAL::1006 2
-DEAL::1007 2
-DEAL::1008 2
-DEAL::1009 1
-DEAL::1010 1
-DEAL::1011 1
-DEAL::1012 1
-DEAL::1013 1
-DEAL::1014 1
-DEAL::1015 1
-DEAL::1016 1
-DEAL::1017 1
-DEAL::1018 4
+DEAL::919 3
+DEAL::920 3
+DEAL::921 3
+DEAL::922 3
+DEAL::923 3
+DEAL::924 3
+DEAL::925 3
+DEAL::926 3
+DEAL::927 3
+DEAL::928 3
+DEAL::929 3
+DEAL::930 3
+DEAL::931 3
+DEAL::932 3
+DEAL::933 3
+DEAL::934 3
+DEAL::935 3
+DEAL::936 3
+DEAL::937 3
+DEAL::938 3
+DEAL::939 3
+DEAL::940 3
+DEAL::941 3
+DEAL::942 2
+DEAL::943 3
+DEAL::944 3
+DEAL::945 3
+DEAL::946 3
+DEAL::947 3
+DEAL::948 3
+DEAL::949 3
+DEAL::950 2
+DEAL::951 2
+DEAL::952 3
+DEAL::953 3
+DEAL::954 3
+DEAL::955 2
+DEAL::956 3
+DEAL::957 2
+DEAL::958 2
+DEAL::959 2
+DEAL::960 2
+DEAL::961 2
+DEAL::962 2
+DEAL::963 2
+DEAL::964 2
+DEAL::965 2
+DEAL::966 0
+DEAL::967 0
+DEAL::968 0
+DEAL::969 0
+DEAL::970 0
+DEAL::971 0
+DEAL::972 0
+DEAL::973 0
+DEAL::974 0
+DEAL::975 0
+DEAL::976 0
+DEAL::977 0
+DEAL::978 0
+DEAL::979 0
+DEAL::980 0
+DEAL::981 0
+DEAL::982 0
+DEAL::983 0
+DEAL::984 0
+DEAL::985 0
+DEAL::986 0
+DEAL::987 0
+DEAL::988 0
+DEAL::989 0
+DEAL::990 0
+DEAL::991 0
+DEAL::992 0
+DEAL::993 0
+DEAL::994 0
+DEAL::995 0
+DEAL::996 0
+DEAL::997 0
+DEAL::998 0
+DEAL::999 0
+DEAL::1000 0
+DEAL::1001 0
+DEAL::1002 0
+DEAL::1003 0
+DEAL::1004 0
+DEAL::1005 0
+DEAL::1006 0
+DEAL::1007 0
+DEAL::1008 0
+DEAL::1009 4
+DEAL::1010 4
+DEAL::1011 4
+DEAL::1012 4
+DEAL::1013 4
+DEAL::1014 4
+DEAL::1015 4
+DEAL::1016 4
+DEAL::1017 4
+DEAL::1018 1
DEAL::1019 4
-DEAL::1020 1
-DEAL::1021 1
-DEAL::1022 1
-DEAL::1023 1
-DEAL::1024 1
-DEAL::1025 1
-DEAL::1026 1
-DEAL::1027 1
-DEAL::1028 4
+DEAL::1020 4
+DEAL::1021 4
+DEAL::1022 4
+DEAL::1023 4
+DEAL::1024 4
+DEAL::1025 4
+DEAL::1026 4
+DEAL::1027 4
+DEAL::1028 1
DEAL::1029 4
DEAL::1030 4
DEAL::1031 4
DEAL::1032 4
-DEAL::1033 4
-DEAL::1034 4
+DEAL::1033 1
+DEAL::1034 1
DEAL::1035 4
DEAL::1036 4
-DEAL::1037 4
-DEAL::1038 4
-DEAL::1039 4
-DEAL::1040 4
-DEAL::1041 4
-DEAL::1042 4
-DEAL::1043 4
-DEAL::1044 4
-DEAL::1045 3
-DEAL::1046 3
-DEAL::1047 3
-DEAL::1048 3
-DEAL::1049 3
-DEAL::1050 3
-DEAL::1051 3
-DEAL::1052 3
-DEAL::1053 3
-DEAL::1054 3
-DEAL::1055 3
-DEAL::1056 3
-DEAL::1057 3
-DEAL::1058 3
-DEAL::1059 3
-DEAL::1060 3
-DEAL::1061 0
-DEAL::1062 0
-DEAL::1063 0
-DEAL::1064 0
-DEAL::1065 0
-DEAL::1066 0
-DEAL::1067 0
-DEAL::1068 0
-DEAL::1069 0
-DEAL::1070 0
-DEAL::1071 0
-DEAL::1072 0
-DEAL::1073 0
-DEAL::1074 0
-DEAL::1075 0
-DEAL::1076 0
-DEAL::1077 0
-DEAL::1078 0
-DEAL::1079 0
-DEAL::1080 0
-DEAL::1081 0
-DEAL::1082 1
-DEAL::1083 3
-DEAL::1084 1
-DEAL::1085 1
-DEAL::1086 1
-DEAL::1087 1
-DEAL::1088 4
-DEAL::1089 4
-DEAL::1090 4
-DEAL::1091 4
-DEAL::1092 4
-DEAL::1093 3
-DEAL::1094 3
-DEAL::1095 3
-DEAL::1096 3
-DEAL::1097 3
-DEAL::1098 3
-DEAL::1099 3
-DEAL::1100 3
-DEAL::1101 3
-DEAL::1102 3
-DEAL::1103 3
-DEAL::1104 3
-DEAL::1105 3
-DEAL::1106 3
-DEAL::1107 3
-DEAL::1108 3
-DEAL::1109 3
-DEAL::1110 3
-DEAL::1111 3
-DEAL::1112 3
-DEAL::1113 3
-DEAL::1114 3
-DEAL::1115 3
-DEAL::1116 3
-DEAL::1117 2
-DEAL::1118 2
-DEAL::1119 2
-DEAL::1120 2
-DEAL::1121 2
-DEAL::1122 2
-DEAL::1123 3
-DEAL::1124 3
-DEAL::1125 2
-DEAL::1126 2
-DEAL::1127 2
-DEAL::1128 2
-DEAL::1129 2
-DEAL::1130 2
-DEAL::1131 2
-DEAL::1132 2
-DEAL::1133 2
-DEAL::1134 2
-DEAL::1135 0
-DEAL::1136 0
-DEAL::1137 0
-DEAL::1138 0
-DEAL::1139 0
-DEAL::1140 0
-DEAL::1141 0
-DEAL::1142 0
-DEAL::1143 0
-DEAL::1144 0
-DEAL::1145 0
-DEAL::1146 0
-DEAL::1147 0
-DEAL::1148 0
-DEAL::1149 0
-DEAL::1150 0
-DEAL::1151 0
-DEAL::1152 0
-DEAL::1153 0
-DEAL::1154 0
-DEAL::1155 0
-DEAL::1156 0
-DEAL::1157 1
-DEAL::1158 0
-DEAL::1159 0
-DEAL::1160 0
-DEAL::1161 0
-DEAL::1162 1
-DEAL::1163 0
-DEAL::1164 0
-DEAL::1165 0
-DEAL::1166 0
+DEAL::1037 1
+DEAL::1038 1
+DEAL::1039 1
+DEAL::1040 1
+DEAL::1041 1
+DEAL::1042 1
+DEAL::1043 1
+DEAL::1044 1
+DEAL::1045 1
+DEAL::1046 1
+DEAL::1047 1
+DEAL::1048 1
+DEAL::1049 1
+DEAL::1050 1
+DEAL::1051 0
+DEAL::1052 1
+DEAL::1053 1
+DEAL::1054 0
+DEAL::1055 1
+DEAL::1056 1
+DEAL::1057 1
+DEAL::1058 1
+DEAL::1059 1
+DEAL::1060 1
+DEAL::1061 3
+DEAL::1062 3
+DEAL::1063 3
+DEAL::1064 3
+DEAL::1065 3
+DEAL::1066 3
+DEAL::1067 3
+DEAL::1068 3
+DEAL::1069 3
+DEAL::1070 3
+DEAL::1071 3
+DEAL::1072 3
+DEAL::1073 3
+DEAL::1074 3
+DEAL::1075 3
+DEAL::1076 3
+DEAL::1077 3
+DEAL::1078 3
+DEAL::1079 3
+DEAL::1080 3
+DEAL::1081 3
+DEAL::1082 4
+DEAL::1083 1
+DEAL::1084 4
+DEAL::1085 4
+DEAL::1086 4
+DEAL::1087 4
+DEAL::1088 1
+DEAL::1089 1
+DEAL::1090 1
+DEAL::1091 1
+DEAL::1092 1
+DEAL::1093 4
+DEAL::1094 4
+DEAL::1095 1
+DEAL::1096 4
+DEAL::1097 4
+DEAL::1098 1
+DEAL::1099 1
+DEAL::1100 1
+DEAL::1101 1
+DEAL::1102 1
+DEAL::1103 1
+DEAL::1104 1
+DEAL::1105 1
+DEAL::1106 1
+DEAL::1107 1
+DEAL::1108 1
+DEAL::1109 1
+DEAL::1110 1
+DEAL::1111 1
+DEAL::1112 1
+DEAL::1113 1
+DEAL::1114 1
+DEAL::1115 1
+DEAL::1116 1
+DEAL::1117 0
+DEAL::1118 0
+DEAL::1119 0
+DEAL::1120 0
+DEAL::1121 0
+DEAL::1122 0
+DEAL::1123 0
+DEAL::1124 0
+DEAL::1125 0
+DEAL::1126 0
+DEAL::1127 0
+DEAL::1128 0
+DEAL::1129 0
+DEAL::1130 0
+DEAL::1131 0
+DEAL::1132 0
+DEAL::1133 0
+DEAL::1134 0
+DEAL::1135 3
+DEAL::1136 3
+DEAL::1137 3
+DEAL::1138 3
+DEAL::1139 3
+DEAL::1140 3
+DEAL::1141 3
+DEAL::1142 3
+DEAL::1143 3
+DEAL::1144 3
+DEAL::1145 3
+DEAL::1146 3
+DEAL::1147 3
+DEAL::1148 3
+DEAL::1149 3
+DEAL::1150 3
+DEAL::1151 3
+DEAL::1152 3
+DEAL::1153 3
+DEAL::1154 3
+DEAL::1155 3
+DEAL::1156 3
+DEAL::1157 3
+DEAL::1158 3
+DEAL::1159 3
+DEAL::1160 3
+DEAL::1161 3
+DEAL::1162 3
+DEAL::1163 3
+DEAL::1164 3
+DEAL::1165 3
+DEAL::1166 3
DEAL::1167 4
DEAL::1168 4
DEAL::1169 4
DEAL::1183 4
DEAL::1184 4
DEAL::1185 4
-DEAL::1186 4
-DEAL::1187 4
-DEAL::1188 4
-DEAL::1189 4
-DEAL::1190 4
-DEAL::1191 4
-DEAL::1192 4
-DEAL::1193 4
-DEAL::1194 4
-DEAL::1195 4
-DEAL::1196 4
-DEAL::1197 4
-DEAL::1198 4
-DEAL::1199 4
-DEAL::1200 4
-DEAL::1201 4
-DEAL::1202 4
-DEAL::1203 4
-DEAL::1204 4
-DEAL::1205 4
-DEAL::1206 4
-DEAL::1207 2
-DEAL::1208 2
-DEAL::1209 2
-DEAL::1210 2
-DEAL::1211 2
-DEAL::1212 2
-DEAL::1213 2
-DEAL::1214 2
-DEAL::1215 2
-DEAL::1216 2
-DEAL::1217 2
-DEAL::1218 2
-DEAL::1219 2
-DEAL::1220 2
-DEAL::1221 0
-DEAL::1222 0
-DEAL::1223 0
-DEAL::1224 0
-DEAL::1225 0
-DEAL::1226 0
-DEAL::1227 0
-DEAL::1228 0
-DEAL::1229 0
-DEAL::1230 0
-DEAL::1231 0
-DEAL::1232 0
-DEAL::1233 0
-DEAL::1234 0
-DEAL::1235 0
-DEAL::1236 0
-DEAL::1237 0
-DEAL::1238 0
-DEAL::1239 0
-DEAL::1240 0
-DEAL::1241 0
-DEAL::1242 0
-DEAL::1243 0
-DEAL::1244 0
-DEAL::1245 0
-DEAL::1246 0
-DEAL::1247 0
-DEAL::1248 0
-DEAL::1249 0
-DEAL::1250 0
-DEAL::1251 0
-DEAL::1252 0
-DEAL::1253 0
-DEAL::1254 0
-DEAL::1255 0
-DEAL::1256 0
-DEAL::1257 0
-DEAL::1258 0
-DEAL::1259 0
-DEAL::1260 1
-DEAL::1261 1
-DEAL::1262 1
-DEAL::1263 1
-DEAL::1264 1
-DEAL::1265 1
-DEAL::1266 1
-DEAL::1267 1
-DEAL::1268 1
-DEAL::1269 1
-DEAL::1270 1
-DEAL::1271 1
-DEAL::1272 1
-DEAL::1273 1
-DEAL::1274 1
-DEAL::1275 1
-DEAL::1276 1
-DEAL::1277 1
-DEAL::1278 3
-DEAL::1279 3
-DEAL::1280 3
-DEAL::1281 3
-DEAL::1282 3
-DEAL::1283 3
-DEAL::1284 3
-DEAL::1285 3
-DEAL::1286 3
-DEAL::1287 3
-DEAL::1288 3
-DEAL::1289 3
-DEAL::1290 3
-DEAL::1291 3
-DEAL::1292 3
-DEAL::1293 3
-DEAL::1294 3
-DEAL::1295 3
-DEAL::1296 0
-DEAL::1297 0
-DEAL::1298 0
-DEAL::1299 0
-DEAL::1300 0
-DEAL::1301 0
-DEAL::1302 0
-DEAL::1303 0
-DEAL::1304 0
-DEAL::1305 0
-DEAL::1306 0
-DEAL::1307 0
-DEAL::1308 0
-DEAL::1309 0
-DEAL::1310 0
-DEAL::1311 0
-DEAL::1312 0
-DEAL::1313 0
-DEAL::1314 0
-DEAL::1315 0
-DEAL::1316 0
-DEAL::1317 0
-DEAL::1318 1
-DEAL::1319 1
-DEAL::1320 1
-DEAL::1321 1
-DEAL::1322 1
-DEAL::1323 1
-DEAL::1324 1
-DEAL::1325 1
-DEAL::1326 1
-DEAL::1327 1
-DEAL::1328 1
-DEAL::1329 1
-DEAL::1330 1
-DEAL::1331 1
-DEAL::1332 1
-DEAL::1333 1
-DEAL::1334 1
-DEAL::1335 1
-DEAL::1336 1
-DEAL::1337 1
-DEAL::1338 1
-DEAL::1339 1
-DEAL::1340 1
-DEAL::1341 1
-DEAL::1342 1
-DEAL::1343 1
-DEAL::1344 1
-DEAL::1345 1
-DEAL::1346 1
-DEAL::1347 1
-DEAL::1348 1
-DEAL::1349 1
-DEAL::1350 1
-DEAL::1351 4
-DEAL::1352 1
-DEAL::1353 1
-DEAL::1354 1
-DEAL::1355 1
-DEAL::1356 4
-DEAL::1357 4
-DEAL::1358 4
-DEAL::1359 4
-DEAL::1360 4
-DEAL::1361 4
-DEAL::1362 4
-DEAL::1363 4
-DEAL::1364 4
-DEAL::1365 4
-DEAL::1366 4
-DEAL::1367 4
-DEAL::1368 4
-DEAL::1369 4
-DEAL::1370 4
-DEAL::1371 4
-DEAL::1372 4
-DEAL::1373 4
-DEAL::1374 4
-DEAL::1375 4
-DEAL::1376 2
-DEAL::1377 2
-DEAL::1378 2
-DEAL::1379 2
-DEAL::1380 2
-DEAL::1381 2
-DEAL::1382 2
-DEAL::1383 2
-DEAL::1384 2
-DEAL::1385 2
-DEAL::1386 2
-DEAL::1387 2
-DEAL::1388 2
-DEAL::1389 2
-DEAL::1390 2
-DEAL::1391 2
-DEAL::1392 2
-DEAL::1393 2
-DEAL::1394 0
-DEAL::1395 0
-DEAL::1396 0
-DEAL::1397 0
-DEAL::1398 0
-DEAL::1399 0
-DEAL::1400 1
-DEAL::1401 1
-DEAL::1402 0
-DEAL::1403 0
-DEAL::1404 0
-DEAL::1405 0
-DEAL::1406 0
-DEAL::1407 0
-DEAL::1408 0
-DEAL::1409 0
-DEAL::1410 1
-DEAL::1411 0
-DEAL::1412 1
-DEAL::1413 1
-DEAL::1414 0
-DEAL::1415 1
-DEAL::1416 0
-DEAL::1417 0
-DEAL::1418 0
-DEAL::1419 0
-DEAL::1420 1
-DEAL::1421 1
-DEAL::1422 1
-DEAL::1423 1
-DEAL::1424 1
-DEAL::1425 1
-DEAL::1426 1
-DEAL::1427 1
-DEAL::1428 1
-DEAL::1429 1
-DEAL::1430 1
-DEAL::1431 1
-DEAL::1432 1
-DEAL::1433 1
-DEAL::1434 1
-DEAL::1435 1
-DEAL::1436 1
-DEAL::1437 1
-DEAL::1438 1
-DEAL::1439 1
-DEAL::1440 1
-DEAL::1441 1
-DEAL::1442 1
-DEAL::1443 1
-DEAL::1444 1
-DEAL::1445 1
-DEAL::1446 1
-DEAL::1447 1
-DEAL::1448 1
-DEAL::1449 1
-DEAL::1450 1
-DEAL::1451 1
-DEAL::1452 1
-DEAL::1453 3
-DEAL::1454 2
-DEAL::1455 2
-DEAL::1456 3
-DEAL::1457 3
-DEAL::1458 3
-DEAL::1459 2
-DEAL::1460 3
-DEAL::1461 2
-DEAL::1462 3
-DEAL::1463 3
-DEAL::1464 3
-DEAL::1465 3
-DEAL::1466 2
-DEAL::1467 2
-DEAL::1468 2
-DEAL::1469 2
-DEAL::1470 2
-DEAL::1471 2
-DEAL::1472 2
+DEAL::1186 2
+DEAL::1187 2
+DEAL::1188 2
+DEAL::1189 2
+DEAL::1190 2
+DEAL::1191 2
+DEAL::1192 2
+DEAL::1193 2
+DEAL::1194 2
+DEAL::1195 2
+DEAL::1196 2
+DEAL::1197 2
+DEAL::1198 2
+DEAL::1199 2
+DEAL::1200 2
+DEAL::1201 2
+DEAL::1202 2
+DEAL::1203 2
+DEAL::1204 2
+DEAL::1205 2
+DEAL::1206 2
+DEAL::1207 0
+DEAL::1208 0
+DEAL::1209 0
+DEAL::1210 0
+DEAL::1211 0
+DEAL::1212 0
+DEAL::1213 0
+DEAL::1214 0
+DEAL::1215 0
+DEAL::1216 0
+DEAL::1217 0
+DEAL::1218 0
+DEAL::1219 0
+DEAL::1220 0
+DEAL::1221 3
+DEAL::1222 3
+DEAL::1223 3
+DEAL::1224 3
+DEAL::1225 3
+DEAL::1226 3
+DEAL::1227 3
+DEAL::1228 3
+DEAL::1229 3
+DEAL::1230 3
+DEAL::1231 3
+DEAL::1232 3
+DEAL::1233 3
+DEAL::1234 3
+DEAL::1235 3
+DEAL::1236 3
+DEAL::1237 3
+DEAL::1238 3
+DEAL::1239 3
+DEAL::1240 3
+DEAL::1241 3
+DEAL::1242 3
+DEAL::1243 3
+DEAL::1244 3
+DEAL::1245 3
+DEAL::1246 3
+DEAL::1247 3
+DEAL::1248 3
+DEAL::1249 3
+DEAL::1250 3
+DEAL::1251 3
+DEAL::1252 3
+DEAL::1253 3
+DEAL::1254 3
+DEAL::1255 3
+DEAL::1256 3
+DEAL::1257 3
+DEAL::1258 3
+DEAL::1259 3
+DEAL::1260 4
+DEAL::1261 4
+DEAL::1262 4
+DEAL::1263 4
+DEAL::1264 4
+DEAL::1265 4
+DEAL::1266 4
+DEAL::1267 4
+DEAL::1268 4
+DEAL::1269 4
+DEAL::1270 4
+DEAL::1271 4
+DEAL::1272 4
+DEAL::1273 4
+DEAL::1274 4
+DEAL::1275 4
+DEAL::1276 4
+DEAL::1277 4
+DEAL::1278 4
+DEAL::1279 4
+DEAL::1280 4
+DEAL::1281 4
+DEAL::1282 4
+DEAL::1283 4
+DEAL::1284 4
+DEAL::1285 4
+DEAL::1286 4
+DEAL::1287 4
+DEAL::1288 4
+DEAL::1289 4
+DEAL::1290 4
+DEAL::1291 0
+DEAL::1292 4
+DEAL::1293 4
+DEAL::1294 4
+DEAL::1295 4
+DEAL::1296 3
+DEAL::1297 3
+DEAL::1298 3
+DEAL::1299 3
+DEAL::1300 3
+DEAL::1301 3
+DEAL::1302 3
+DEAL::1303 3
+DEAL::1304 3
+DEAL::1305 3
+DEAL::1306 3
+DEAL::1307 3
+DEAL::1308 3
+DEAL::1309 3
+DEAL::1310 3
+DEAL::1311 3
+DEAL::1312 3
+DEAL::1313 3
+DEAL::1314 3
+DEAL::1315 3
+DEAL::1316 3
+DEAL::1317 3
+DEAL::1318 4
+DEAL::1319 4
+DEAL::1320 4
+DEAL::1321 4
+DEAL::1322 4
+DEAL::1323 4
+DEAL::1324 4
+DEAL::1325 4
+DEAL::1326 4
+DEAL::1327 4
+DEAL::1328 4
+DEAL::1329 4
+DEAL::1330 4
+DEAL::1331 4
+DEAL::1332 4
+DEAL::1333 4
+DEAL::1334 4
+DEAL::1335 4
+DEAL::1336 2
+DEAL::1337 2
+DEAL::1338 2
+DEAL::1339 2
+DEAL::1340 2
+DEAL::1341 2
+DEAL::1342 2
+DEAL::1343 2
+DEAL::1344 2
+DEAL::1345 2
+DEAL::1346 2
+DEAL::1347 2
+DEAL::1348 2
+DEAL::1349 2
+DEAL::1350 2
+DEAL::1351 2
+DEAL::1352 2
+DEAL::1353 2
+DEAL::1354 2
+DEAL::1355 2
+DEAL::1356 2
+DEAL::1357 2
+DEAL::1358 2
+DEAL::1359 2
+DEAL::1360 2
+DEAL::1361 2
+DEAL::1362 2
+DEAL::1363 2
+DEAL::1364 2
+DEAL::1365 2
+DEAL::1366 2
+DEAL::1367 2
+DEAL::1368 2
+DEAL::1369 2
+DEAL::1370 2
+DEAL::1371 2
+DEAL::1372 2
+DEAL::1373 2
+DEAL::1374 2
+DEAL::1375 2
+DEAL::1376 0
+DEAL::1377 0
+DEAL::1378 0
+DEAL::1379 0
+DEAL::1380 0
+DEAL::1381 0
+DEAL::1382 0
+DEAL::1383 0
+DEAL::1384 0
+DEAL::1385 0
+DEAL::1386 0
+DEAL::1387 0
+DEAL::1388 0
+DEAL::1389 0
+DEAL::1390 0
+DEAL::1391 0
+DEAL::1392 0
+DEAL::1393 0
+DEAL::1394 2
+DEAL::1395 3
+DEAL::1396 3
+DEAL::1397 3
+DEAL::1398 3
+DEAL::1399 3
+DEAL::1400 3
+DEAL::1401 3
+DEAL::1402 3
+DEAL::1403 3
+DEAL::1404 2
+DEAL::1405 2
+DEAL::1406 2
+DEAL::1407 2
+DEAL::1408 2
+DEAL::1409 3
+DEAL::1410 3
+DEAL::1411 3
+DEAL::1412 3
+DEAL::1413 3
+DEAL::1414 3
+DEAL::1415 3
+DEAL::1416 3
+DEAL::1417 3
+DEAL::1418 3
+DEAL::1419 3
+DEAL::1420 3
+DEAL::1421 3
+DEAL::1422 3
+DEAL::1423 3
+DEAL::1424 3
+DEAL::1425 3
+DEAL::1426 3
+DEAL::1427 3
+DEAL::1428 3
+DEAL::1429 3
+DEAL::1430 3
+DEAL::1431 3
+DEAL::1432 3
+DEAL::1433 3
+DEAL::1434 3
+DEAL::1435 2
+DEAL::1436 2
+DEAL::1437 2
+DEAL::1438 2
+DEAL::1439 2
+DEAL::1440 2
+DEAL::1441 2
+DEAL::1442 2
+DEAL::1443 2
+DEAL::1444 2
+DEAL::1445 2
+DEAL::1446 2
+DEAL::1447 2
+DEAL::1448 2
+DEAL::1449 2
+DEAL::1450 2
+DEAL::1451 2
+DEAL::1452 2
+DEAL::1453 2
+DEAL::1454 0
+DEAL::1455 0
+DEAL::1456 2
+DEAL::1457 2
+DEAL::1458 2
+DEAL::1459 0
+DEAL::1460 2
+DEAL::1461 0
+DEAL::1462 0
+DEAL::1463 0
+DEAL::1464 0
+DEAL::1465 0
+DEAL::1466 0
+DEAL::1467 0
+DEAL::1468 0
+DEAL::1469 0
+DEAL::1470 0
+DEAL::1471 0
+DEAL::1472 0
DEAL::1473 2
-DEAL::1474 2
+DEAL::1474 0
DEAL::1475 2
-DEAL::1476 2
-DEAL::1477 2
-DEAL::1478 2
-DEAL::1479 2
-DEAL::1480 2
-DEAL::1481 2
-DEAL::1482 2
-DEAL::1483 2
-DEAL::1484 2
-DEAL::1485 2
-DEAL::1486 2
-DEAL::1487 2
-DEAL::1488 2
-DEAL::1489 2
-DEAL::1490 2
-DEAL::1491 2
-DEAL::1492 2
-DEAL::1493 2
-DEAL::1494 2
-DEAL::1495 2
-DEAL::1496 2
-DEAL::1497 2
-DEAL::1498 2
-DEAL::1499 2
-DEAL::1500 2
-DEAL::1501 2
-DEAL::1502 2
-DEAL::1503 2
-DEAL::1504 2
-DEAL::1505 2
-DEAL::1506 2
-DEAL::1507 2
-DEAL::1508 2
-DEAL::1509 2
-DEAL::1510 2
-DEAL::1511 2
-DEAL::1512 2
-DEAL::1513 2
-DEAL::1514 2
-DEAL::1515 2
-DEAL::1516 2
-DEAL::1517 2
-DEAL::1518 2
-DEAL::1519 2
-DEAL::1520 2
-DEAL::1521 0
-DEAL::1522 0
-DEAL::1523 0
-DEAL::1524 0
-DEAL::1525 0
-DEAL::1526 0
-DEAL::1527 0
-DEAL::1528 0
-DEAL::1529 0
-DEAL::1530 0
-DEAL::1531 0
-DEAL::1532 0
-DEAL::1533 0
-DEAL::1534 0
-DEAL::1535 0
-DEAL::1536 0
-DEAL::1537 0
-DEAL::1538 0
-DEAL::1539 0
-DEAL::1540 0
-DEAL::1541 1
-DEAL::1542 1
-DEAL::1543 1
-DEAL::1544 1
-DEAL::1545 1
-DEAL::1546 1
-DEAL::1547 1
-DEAL::1548 1
-DEAL::1549 1
-DEAL::1550 1
-DEAL::1551 1
-DEAL::1552 1
-DEAL::1553 1
-DEAL::1554 1
-DEAL::1555 1
-DEAL::1556 1
-DEAL::1557 1
-DEAL::1558 1
-DEAL::1559 1
-DEAL::1560 0
-DEAL::1561 0
-DEAL::1562 0
-DEAL::1563 0
-DEAL::1564 0
-DEAL::1565 0
-DEAL::1566 0
-DEAL::1567 0
-DEAL::1568 0
-DEAL::1569 0
-DEAL::1570 0
-DEAL::1571 0
-DEAL::1572 0
-DEAL::1573 0
-DEAL::1574 0
-DEAL::1575 0
-DEAL::1576 0
-DEAL::1577 0
-DEAL::1578 0
+DEAL::1476 0
+DEAL::1477 0
+DEAL::1478 0
+DEAL::1479 0
+DEAL::1480 0
+DEAL::1481 0
+DEAL::1482 0
+DEAL::1483 0
+DEAL::1484 0
+DEAL::1485 0
+DEAL::1486 0
+DEAL::1487 0
+DEAL::1488 0
+DEAL::1489 0
+DEAL::1490 0
+DEAL::1491 0
+DEAL::1492 0
+DEAL::1493 0
+DEAL::1494 0
+DEAL::1495 0
+DEAL::1496 0
+DEAL::1497 0
+DEAL::1498 0
+DEAL::1499 0
+DEAL::1500 0
+DEAL::1501 0
+DEAL::1502 0
+DEAL::1503 0
+DEAL::1504 0
+DEAL::1505 0
+DEAL::1506 0
+DEAL::1507 0
+DEAL::1508 0
+DEAL::1509 0
+DEAL::1510 0
+DEAL::1511 0
+DEAL::1512 0
+DEAL::1513 0
+DEAL::1514 0
+DEAL::1515 0
+DEAL::1516 0
+DEAL::1517 0
+DEAL::1518 0
+DEAL::1519 0
+DEAL::1520 0
+DEAL::1521 3
+DEAL::1522 3
+DEAL::1523 3
+DEAL::1524 3
+DEAL::1525 3
+DEAL::1526 3
+DEAL::1527 3
+DEAL::1528 3
+DEAL::1529 3
+DEAL::1530 3
+DEAL::1531 3
+DEAL::1532 3
+DEAL::1533 3
+DEAL::1534 3
+DEAL::1535 3
+DEAL::1536 3
+DEAL::1537 3
+DEAL::1538 3
+DEAL::1539 3
+DEAL::1540 3
+DEAL::1541 4
+DEAL::1542 4
+DEAL::1543 4
+DEAL::1544 4
+DEAL::1545 4
+DEAL::1546 4
+DEAL::1547 4
+DEAL::1548 4
+DEAL::1549 4
+DEAL::1550 4
+DEAL::1551 4
+DEAL::1552 4
+DEAL::1553 4
+DEAL::1554 4
+DEAL::1555 4
+DEAL::1556 4
+DEAL::1557 4
+DEAL::1558 4
+DEAL::1559 4
+DEAL::1560 3
+DEAL::1561 3
+DEAL::1562 3
+DEAL::1563 3
+DEAL::1564 3
+DEAL::1565 3
+DEAL::1566 3
+DEAL::1567 3
+DEAL::1568 3
+DEAL::1569 3
+DEAL::1570 3
+DEAL::1571 3
+DEAL::1572 3
+DEAL::1573 3
+DEAL::1574 3
+DEAL::1575 3
+DEAL::1576 3
+DEAL::1577 3
+DEAL::1578 3
DEAL::1579 4
DEAL::1580 4
DEAL::1581 4
DEAL::1594 4
DEAL::1595 4
DEAL::1596 4
-DEAL::1597 4
+DEAL::1597 1
DEAL::1598 4
DEAL::1599 4
DEAL::1600 4
-DEAL::1601 4
+DEAL::1601 1
DEAL::1602 4
-DEAL::1603 4
+DEAL::1603 1
DEAL::1604 4
DEAL::1605 4
DEAL::1606 4
-DEAL::1607 4
-DEAL::1608 4
-DEAL::1609 4
-DEAL::1610 4
-DEAL::1611 4
-DEAL::1612 4
-DEAL::1613 4
-DEAL::1614 4
-DEAL::1615 4
-DEAL::1616 4
-DEAL::1617 3
-DEAL::1618 4
-DEAL::1619 4
-DEAL::1620 4
-DEAL::1621 4
-DEAL::1622 4
-DEAL::1623 4
-DEAL::1624 3
-DEAL::1625 3
-DEAL::1626 3
-DEAL::1627 3
-DEAL::1628 4
-DEAL::1629 4
-DEAL::1630 4
-DEAL::1631 1
-DEAL::1632 1
-DEAL::1633 1
-DEAL::1634 1
-DEAL::1635 1
-DEAL::1636 1
-DEAL::1637 1
-DEAL::1638 1
-DEAL::1639 1
-DEAL::1640 1
-DEAL::1641 1
-DEAL::1642 1
-DEAL::1643 1
-DEAL::1644 1
-DEAL::1645 1
-DEAL::1646 1
-DEAL::1647 1
-DEAL::1648 4
-DEAL::1649 4
-DEAL::1650 4
-DEAL::1651 4
-DEAL::1652 4
-DEAL::1653 4
-DEAL::1654 4
-DEAL::1655 4
-DEAL::1656 4
-DEAL::1657 4
-DEAL::1658 4
-DEAL::1659 4
-DEAL::1660 4
-DEAL::1661 4
-DEAL::1662 4
-DEAL::1663 4
-DEAL::1664 4
-DEAL::1665 4
-DEAL::1666 4
-DEAL::1667 4
-DEAL::1668 4
-DEAL::1669 4
-DEAL::1670 3
-DEAL::1671 4
-DEAL::1672 4
-DEAL::1673 4
-DEAL::1674 4
-DEAL::1675 4
-DEAL::1676 4
-DEAL::1677 4
-DEAL::1678 4
-DEAL::1679 4
-DEAL::1680 4
-DEAL::1681 4
-DEAL::1682 4
-DEAL::1683 4
-DEAL::1684 4
-DEAL::1685 4
-DEAL::1686 4
-DEAL::1687 4
-DEAL::1688 4
-DEAL::1689 4
-DEAL::1690 4
-DEAL::1691 4
-DEAL::1692 4
-DEAL::1693 4
-DEAL::1694 4
-DEAL::1695 4
-DEAL::1696 4
-DEAL::1697 4
-DEAL::1698 4
-DEAL::1699 4
-DEAL::1700 4
-DEAL::1701 4
-DEAL::1702 4
-DEAL::1703 0
-DEAL::1704 0
-DEAL::1705 1
-DEAL::1706 0
-DEAL::1707 0
-DEAL::1708 0
-DEAL::1709 0
-DEAL::1710 0
-DEAL::1711 1
-DEAL::1712 0
-DEAL::1713 0
-DEAL::1714 0
-DEAL::1715 0
-DEAL::1716 1
-DEAL::1717 1
-DEAL::1718 1
-DEAL::1719 0
-DEAL::1720 1
-DEAL::1721 0
-DEAL::1722 0
-DEAL::1723 0
-DEAL::1724 0
-DEAL::1725 1
-DEAL::1726 0
-DEAL::1727 0
-DEAL::1728 0
-DEAL::1729 0
-DEAL::1730 1
-DEAL::1731 1
-DEAL::1732 1
-DEAL::1733 1
-DEAL::1734 1
-DEAL::1735 1
-DEAL::1736 1
-DEAL::1737 1
-DEAL::1738 1
-DEAL::1739 1
-DEAL::1740 1
-DEAL::1741 1
-DEAL::1742 1
-DEAL::1743 1
-DEAL::1744 1
-DEAL::1745 1
-DEAL::1746 1
-DEAL::1747 1
-DEAL::1748 1
-DEAL::1749 1
-DEAL::1750 1
-DEAL::1751 1
-DEAL::1752 1
-DEAL::1753 1
-DEAL::1754 1
-DEAL::1755 1
-DEAL::1756 1
-DEAL::1757 1
-DEAL::1758 1
-DEAL::1759 1
-DEAL::1760 1
-DEAL::1761 1
-DEAL::1762 1
-DEAL::1763 1
-DEAL::1764 1
-DEAL::1765 1
-DEAL::1766 1
-DEAL::1767 1
-DEAL::1768 1
-DEAL::1769 1
-DEAL::1770 1
-DEAL::1771 1
-DEAL::1772 1
-DEAL::1773 1
-DEAL::1774 1
-DEAL::1775 1
-DEAL::1776 1
-DEAL::1777 1
-DEAL::1778 1
-DEAL::1779 1
-DEAL::1780 1
-DEAL::1781 1
-DEAL::1782 4
-DEAL::1783 4
-DEAL::1784 1
-DEAL::1785 1
-DEAL::1786 1
-DEAL::1787 1
-DEAL::1788 1
-DEAL::1789 4
-DEAL::1790 1
-DEAL::1791 2
-DEAL::1792 2
-DEAL::1793 2
-DEAL::1794 2
-DEAL::1795 2
-DEAL::1796 2
-DEAL::1797 2
-DEAL::1798 2
-DEAL::1799 2
-DEAL::1800 2
-DEAL::1801 2
-DEAL::1802 2
-DEAL::1803 2
-DEAL::1804 2
-DEAL::1805 2
-DEAL::1806 2
-DEAL::1807 2
-DEAL::1808 4
-DEAL::1809 4
-DEAL::1810 4
-DEAL::1811 4
-DEAL::1812 4
-DEAL::1813 4
-DEAL::1814 4
-DEAL::1815 4
-DEAL::1816 4
-DEAL::1817 4
-DEAL::1818 4
-DEAL::1819 4
-DEAL::1820 4
-DEAL::1821 4
-DEAL::1822 4
-DEAL::1823 4
-DEAL::1824 4
-DEAL::1825 2
-DEAL::1826 2
-DEAL::1827 2
-DEAL::1828 2
-DEAL::1829 2
-DEAL::1830 2
-DEAL::1831 2
-DEAL::1832 2
-DEAL::1833 2
-DEAL::1834 2
-DEAL::1835 2
-DEAL::1836 2
-DEAL::1837 2
-DEAL::1838 2
-DEAL::1839 2
-DEAL::1840 2
-DEAL::1841 2
-DEAL::1842 2
-DEAL::1843 2
-DEAL::1844 2
-DEAL::1845 2
-DEAL::1846 2
-DEAL::1847 2
-DEAL::1848 2
-DEAL::1849 2
-DEAL::1850 2
+DEAL::1607 1
+DEAL::1608 1
+DEAL::1609 1
+DEAL::1610 1
+DEAL::1611 1
+DEAL::1612 1
+DEAL::1613 1
+DEAL::1614 1
+DEAL::1615 1
+DEAL::1616 1
+DEAL::1617 1
+DEAL::1618 1
+DEAL::1619 1
+DEAL::1620 1
+DEAL::1621 1
+DEAL::1622 1
+DEAL::1623 1
+DEAL::1624 1
+DEAL::1625 1
+DEAL::1626 1
+DEAL::1627 1
+DEAL::1628 1
+DEAL::1629 1
+DEAL::1630 1
+DEAL::1631 2
+DEAL::1632 2
+DEAL::1633 2
+DEAL::1634 2
+DEAL::1635 2
+DEAL::1636 2
+DEAL::1637 2
+DEAL::1638 2
+DEAL::1639 2
+DEAL::1640 2
+DEAL::1641 2
+DEAL::1642 2
+DEAL::1643 2
+DEAL::1644 2
+DEAL::1645 2
+DEAL::1646 2
+DEAL::1647 2
+DEAL::1648 1
+DEAL::1649 1
+DEAL::1650 1
+DEAL::1651 1
+DEAL::1652 1
+DEAL::1653 1
+DEAL::1654 1
+DEAL::1655 1
+DEAL::1656 1
+DEAL::1657 1
+DEAL::1658 1
+DEAL::1659 1
+DEAL::1660 1
+DEAL::1661 1
+DEAL::1662 1
+DEAL::1663 1
+DEAL::1664 1
+DEAL::1665 1
+DEAL::1666 0
+DEAL::1667 0
+DEAL::1668 0
+DEAL::1669 0
+DEAL::1670 1
+DEAL::1671 0
+DEAL::1672 0
+DEAL::1673 0
+DEAL::1674 0
+DEAL::1675 0
+DEAL::1676 0
+DEAL::1677 0
+DEAL::1678 0
+DEAL::1679 0
+DEAL::1680 0
+DEAL::1681 0
+DEAL::1682 0
+DEAL::1683 0
+DEAL::1684 0
+DEAL::1685 1
+DEAL::1686 0
+DEAL::1687 0
+DEAL::1688 0
+DEAL::1689 0
+DEAL::1690 0
+DEAL::1691 0
+DEAL::1692 0
+DEAL::1693 0
+DEAL::1694 0
+DEAL::1695 0
+DEAL::1696 0
+DEAL::1697 0
+DEAL::1698 1
+DEAL::1699 0
+DEAL::1700 0
+DEAL::1701 0
+DEAL::1702 0
+DEAL::1703 2
+DEAL::1704 2
+DEAL::1705 2
+DEAL::1706 2
+DEAL::1707 2
+DEAL::1708 2
+DEAL::1709 2
+DEAL::1710 2
+DEAL::1711 2
+DEAL::1712 2
+DEAL::1713 2
+DEAL::1714 2
+DEAL::1715 2
+DEAL::1716 2
+DEAL::1717 2
+DEAL::1718 2
+DEAL::1719 2
+DEAL::1720 2
+DEAL::1721 2
+DEAL::1722 2
+DEAL::1723 2
+DEAL::1724 2
+DEAL::1725 2
+DEAL::1726 2
+DEAL::1727 2
+DEAL::1728 2
+DEAL::1729 2
+DEAL::1730 2
+DEAL::1731 2
+DEAL::1732 2
+DEAL::1733 2
+DEAL::1734 2
+DEAL::1735 3
+DEAL::1736 4
+DEAL::1737 3
+DEAL::1738 3
+DEAL::1739 3
+DEAL::1740 4
+DEAL::1741 3
+DEAL::1742 4
+DEAL::1743 4
+DEAL::1744 2
+DEAL::1745 4
+DEAL::1746 4
+DEAL::1747 4
+DEAL::1748 4
+DEAL::1749 4
+DEAL::1750 4
+DEAL::1751 2
+DEAL::1752 2
+DEAL::1753 2
+DEAL::1754 2
+DEAL::1755 2
+DEAL::1756 2
+DEAL::1757 2
+DEAL::1758 2
+DEAL::1759 2
+DEAL::1760 2
+DEAL::1761 2
+DEAL::1762 2
+DEAL::1763 2
+DEAL::1764 2
+DEAL::1765 2
+DEAL::1766 2
+DEAL::1767 2
+DEAL::1768 2
+DEAL::1769 2
+DEAL::1770 2
+DEAL::1771 4
+DEAL::1772 4
+DEAL::1773 4
+DEAL::1774 4
+DEAL::1775 4
+DEAL::1776 4
+DEAL::1777 4
+DEAL::1778 4
+DEAL::1779 4
+DEAL::1780 4
+DEAL::1781 4
+DEAL::1782 4
+DEAL::1783 4
+DEAL::1784 4
+DEAL::1785 4
+DEAL::1786 4
+DEAL::1787 4
+DEAL::1788 4
+DEAL::1789 4
+DEAL::1790 4
+DEAL::1791 2
+DEAL::1792 2
+DEAL::1793 2
+DEAL::1794 2
+DEAL::1795 2
+DEAL::1796 2
+DEAL::1797 2
+DEAL::1798 2
+DEAL::1799 2
+DEAL::1800 2
+DEAL::1801 2
+DEAL::1802 2
+DEAL::1803 2
+DEAL::1804 0
+DEAL::1805 2
+DEAL::1806 2
+DEAL::1807 2
+DEAL::1808 2
+DEAL::1809 2
+DEAL::1810 2
+DEAL::1811 2
+DEAL::1812 2
+DEAL::1813 2
+DEAL::1814 2
+DEAL::1815 2
+DEAL::1816 2
+DEAL::1817 2
+DEAL::1818 2
+DEAL::1819 2
+DEAL::1820 2
+DEAL::1821 2
+DEAL::1822 2
+DEAL::1823 2
+DEAL::1824 2
+DEAL::1825 2
+DEAL::1826 2
+DEAL::1827 2
+DEAL::1828 2
+DEAL::1829 2
+DEAL::1830 2
+DEAL::1831 2
+DEAL::1832 2
+DEAL::1833 2
+DEAL::1834 2
+DEAL::1835 0
+DEAL::1836 2
+DEAL::1837 2
+DEAL::1838 2
+DEAL::1839 2
+DEAL::1840 2
+DEAL::1841 2
+DEAL::1842 2
+DEAL::1843 0
+DEAL::1844 2
+DEAL::1845 2
+DEAL::1846 2
+DEAL::1847 2
+DEAL::1848 2
+DEAL::1849 2
+DEAL::1850 2
DEAL::1851 2
DEAL::1852 2
DEAL::1853 2
DEAL::1860 2
DEAL::1861 2
DEAL::1862 2
-DEAL::1863 2
-DEAL::1864 3
-DEAL::1865 3
-DEAL::1866 2
-DEAL::1867 3
-DEAL::1868 3
-DEAL::1869 3
-DEAL::1870 2
-DEAL::1871 2
-DEAL::1872 2
-DEAL::1873 2
-DEAL::1874 2
-DEAL::1875 2
-DEAL::1876 2
-DEAL::1877 0
-DEAL::1878 0
-DEAL::1879 0
-DEAL::1880 0
-DEAL::1881 0
-DEAL::1882 0
-DEAL::1883 0
-DEAL::1884 0
-DEAL::1885 0
-DEAL::1886 0
-DEAL::1887 0
-DEAL::1888 0
-DEAL::1889 0
-DEAL::1890 3
-DEAL::1891 3
-DEAL::1892 3
-DEAL::1893 3
-DEAL::1894 3
-DEAL::1895 3
-DEAL::1896 3
-DEAL::1897 3
-DEAL::1898 3
-DEAL::1899 3
-DEAL::1900 3
-DEAL::1901 3
-DEAL::1902 3
-DEAL::1903 3
-DEAL::1904 3
+DEAL::1863 0
+DEAL::1864 0
+DEAL::1865 0
+DEAL::1866 0
+DEAL::1867 0
+DEAL::1868 0
+DEAL::1869 0
+DEAL::1870 0
+DEAL::1871 0
+DEAL::1872 0
+DEAL::1873 0
+DEAL::1874 0
+DEAL::1875 0
+DEAL::1876 0
+DEAL::1877 3
+DEAL::1878 3
+DEAL::1879 3
+DEAL::1880 3
+DEAL::1881 3
+DEAL::1882 3
+DEAL::1883 3
+DEAL::1884 3
+DEAL::1885 3
+DEAL::1886 3
+DEAL::1887 3
+DEAL::1888 3
+DEAL::1889 3
+DEAL::1890 1
+DEAL::1891 1
+DEAL::1892 1
+DEAL::1893 1
+DEAL::1894 1
+DEAL::1895 1
+DEAL::1896 1
+DEAL::1897 1
+DEAL::1898 1
+DEAL::1899 1
+DEAL::1900 1
+DEAL::1901 1
+DEAL::1902 1
+DEAL::1903 1
+DEAL::1904 1
DEAL::1905 4
DEAL::1906 4
DEAL::1907 4
DEAL::1909 4
DEAL::1910 4
DEAL::1911 4
-DEAL::1912 4
+DEAL::1912 1
DEAL::1913 4
DEAL::1914 4
DEAL::1915 4
DEAL::1916 4
DEAL::1917 4
-DEAL::1918 4
-DEAL::1919 4
-DEAL::1920 4
-DEAL::1921 4
-DEAL::1922 4
-DEAL::1923 4
-DEAL::1924 4
-DEAL::1925 4
-DEAL::1926 4
-DEAL::1927 4
-DEAL::1928 4
-DEAL::1929 4
-DEAL::1930 4
-DEAL::1931 4
-DEAL::1932 4
-DEAL::1933 4
-DEAL::1934 4
-DEAL::1935 4
-DEAL::1936 4
-DEAL::1937 4
-DEAL::1938 4
-DEAL::1939 4
-DEAL::1940 4
-DEAL::1941 4
-DEAL::1942 4
-DEAL::1943 4
-DEAL::1944 4
-DEAL::1945 4
-DEAL::1946 4
-DEAL::1947 2
-DEAL::1948 2
-DEAL::1949 2
-DEAL::1950 2
-DEAL::1951 2
-DEAL::1952 2
-DEAL::1953 2
-DEAL::1954 2
-DEAL::1955 2
-DEAL::1956 2
-DEAL::1957 2
-DEAL::1958 2
-DEAL::1959 2
-DEAL::1960 2
-DEAL::1961 2
-DEAL::1962 2
-DEAL::1963 2
-DEAL::1964 2
-DEAL::1965 4
-DEAL::1966 2
-DEAL::1967 2
-DEAL::1968 2
-DEAL::1969 4
-DEAL::1970 4
-DEAL::1971 4
-DEAL::1972 4
-DEAL::1973 4
-DEAL::1974 2
-DEAL::1975 2
-DEAL::1976 2
-DEAL::1977 2
-DEAL::1978 2
-DEAL::1979 4
-DEAL::1980 4
-DEAL::1981 4
-DEAL::1982 0
-DEAL::1983 0
-DEAL::1984 0
-DEAL::1985 0
-DEAL::1986 0
-DEAL::1987 0
-DEAL::1988 0
-DEAL::1989 0
-DEAL::1990 0
-DEAL::1991 0
-DEAL::1992 0
-DEAL::1993 0
-DEAL::1994 0
-DEAL::1995 0
-DEAL::1996 0
-DEAL::1997 0
-DEAL::1998 0
-DEAL::1999 0
-DEAL::2000 0
-DEAL::2001 0
-DEAL::2002 0
-DEAL::2003 0
-DEAL::2004 0
-DEAL::2005 0
-DEAL::2006 0
-DEAL::2007 0
-DEAL::2008 0
-DEAL::2009 0
-DEAL::2010 0
-DEAL::2011 0
-DEAL::2012 0
-DEAL::2013 0
-DEAL::2014 0
-DEAL::2015 0
-DEAL::2016 0
-DEAL::2017 0
-DEAL::2018 1
-DEAL::2019 1
-DEAL::2020 1
-DEAL::2021 1
-DEAL::2022 1
-DEAL::2023 1
-DEAL::2024 1
-DEAL::2025 1
-DEAL::2026 1
-DEAL::2027 1
-DEAL::2028 3
-DEAL::2029 1
-DEAL::2030 1
-DEAL::2031 1
-DEAL::2032 1
-DEAL::2033 1
-DEAL::2034 3
-DEAL::2035 3
-DEAL::2036 3
-DEAL::2037 3
-DEAL::2038 3
-DEAL::2039 3
-DEAL::2040 3
-DEAL::2041 3
-DEAL::2042 3
-DEAL::2043 3
-DEAL::2044 3
-DEAL::2045 3
-DEAL::2046 3
-DEAL::2047 3
-DEAL::2048 3
-DEAL::2049 3
-DEAL::2050 3
-DEAL::2051 3
-DEAL::2052 3
-DEAL::2053 3
-DEAL::2054 3
-DEAL::2055 3
-DEAL::2056 3
-DEAL::2057 3
-DEAL::2058 2
-DEAL::2059 3
-DEAL::2060 3
-DEAL::2061 3
-DEAL::2062 3
-DEAL::2063 0
-DEAL::2064 0
-DEAL::2065 0
-DEAL::2066 0
-DEAL::2067 0
-DEAL::2068 0
-DEAL::2069 0
-DEAL::2070 0
-DEAL::2071 0
-DEAL::2072 0
-DEAL::2073 0
-DEAL::2074 0
-DEAL::2075 0
-DEAL::2076 0
-DEAL::2077 0
-DEAL::2078 0
-DEAL::2079 0
-DEAL::2080 0
-DEAL::2081 0
-DEAL::2082 0
-DEAL::2083 0
-DEAL::2084 0
-DEAL::2085 0
-DEAL::2086 0
-DEAL::2087 0
-DEAL::2088 0
-DEAL::2089 0
-DEAL::2090 0
-DEAL::2091 0
-DEAL::2092 0
-DEAL::2093 1
-DEAL::2094 1
-DEAL::2095 1
-DEAL::2096 1
-DEAL::2097 1
-DEAL::2098 1
-DEAL::2099 1
-DEAL::2100 1
-DEAL::2101 1
-DEAL::2102 1
-DEAL::2103 1
-DEAL::2104 1
-DEAL::2105 1
-DEAL::2106 1
-DEAL::2107 1
-DEAL::2108 1
-DEAL::2109 1
-DEAL::2110 1
-DEAL::2111 1
-DEAL::2112 4
-DEAL::2113 4
-DEAL::2114 4
-DEAL::2115 4
-DEAL::2116 4
-DEAL::2117 4
-DEAL::2118 4
+DEAL::1918 1
+DEAL::1919 1
+DEAL::1920 1
+DEAL::1921 1
+DEAL::1922 1
+DEAL::1923 1
+DEAL::1924 1
+DEAL::1925 1
+DEAL::1926 1
+DEAL::1927 1
+DEAL::1928 1
+DEAL::1929 1
+DEAL::1930 1
+DEAL::1931 2
+DEAL::1932 2
+DEAL::1933 2
+DEAL::1934 2
+DEAL::1935 2
+DEAL::1936 2
+DEAL::1937 2
+DEAL::1938 2
+DEAL::1939 2
+DEAL::1940 2
+DEAL::1941 2
+DEAL::1942 2
+DEAL::1943 2
+DEAL::1944 2
+DEAL::1945 2
+DEAL::1946 2
+DEAL::1947 0
+DEAL::1948 0
+DEAL::1949 0
+DEAL::1950 0
+DEAL::1951 0
+DEAL::1952 0
+DEAL::1953 0
+DEAL::1954 0
+DEAL::1955 0
+DEAL::1956 0
+DEAL::1957 0
+DEAL::1958 0
+DEAL::1959 0
+DEAL::1960 0
+DEAL::1961 0
+DEAL::1962 0
+DEAL::1963 0
+DEAL::1964 0
+DEAL::1965 0
+DEAL::1966 0
+DEAL::1967 0
+DEAL::1968 0
+DEAL::1969 0
+DEAL::1970 0
+DEAL::1971 0
+DEAL::1972 0
+DEAL::1973 0
+DEAL::1974 0
+DEAL::1975 0
+DEAL::1976 0
+DEAL::1977 0
+DEAL::1978 0
+DEAL::1979 0
+DEAL::1980 0
+DEAL::1981 0
+DEAL::1982 3
+DEAL::1983 3
+DEAL::1984 3
+DEAL::1985 3
+DEAL::1986 3
+DEAL::1987 3
+DEAL::1988 3
+DEAL::1989 3
+DEAL::1990 3
+DEAL::1991 3
+DEAL::1992 3
+DEAL::1993 3
+DEAL::1994 3
+DEAL::1995 3
+DEAL::1996 3
+DEAL::1997 3
+DEAL::1998 3
+DEAL::1999 3
+DEAL::2000 3
+DEAL::2001 3
+DEAL::2002 3
+DEAL::2003 3
+DEAL::2004 3
+DEAL::2005 3
+DEAL::2006 3
+DEAL::2007 3
+DEAL::2008 3
+DEAL::2009 3
+DEAL::2010 3
+DEAL::2011 3
+DEAL::2012 3
+DEAL::2013 3
+DEAL::2014 3
+DEAL::2015 3
+DEAL::2016 3
+DEAL::2017 3
+DEAL::2018 4
+DEAL::2019 4
+DEAL::2020 4
+DEAL::2021 4
+DEAL::2022 4
+DEAL::2023 4
+DEAL::2024 4
+DEAL::2025 4
+DEAL::2026 4
+DEAL::2027 4
+DEAL::2028 4
+DEAL::2029 4
+DEAL::2030 4
+DEAL::2031 4
+DEAL::2032 4
+DEAL::2033 4
+DEAL::2034 4
+DEAL::2035 4
+DEAL::2036 4
+DEAL::2037 4
+DEAL::2038 4
+DEAL::2039 4
+DEAL::2040 4
+DEAL::2041 4
+DEAL::2042 4
+DEAL::2043 4
+DEAL::2044 4
+DEAL::2045 4
+DEAL::2046 4
+DEAL::2047 4
+DEAL::2048 0
+DEAL::2049 0
+DEAL::2050 0
+DEAL::2051 0
+DEAL::2052 0
+DEAL::2053 0
+DEAL::2054 0
+DEAL::2055 0
+DEAL::2056 0
+DEAL::2057 0
+DEAL::2058 0
+DEAL::2059 0
+DEAL::2060 0
+DEAL::2061 0
+DEAL::2062 0
+DEAL::2063 3
+DEAL::2064 3
+DEAL::2065 3
+DEAL::2066 3
+DEAL::2067 3
+DEAL::2068 3
+DEAL::2069 3
+DEAL::2070 3
+DEAL::2071 3
+DEAL::2072 3
+DEAL::2073 3
+DEAL::2074 3
+DEAL::2075 3
+DEAL::2076 3
+DEAL::2077 3
+DEAL::2078 3
+DEAL::2079 3
+DEAL::2080 3
+DEAL::2081 3
+DEAL::2082 3
+DEAL::2083 3
+DEAL::2084 3
+DEAL::2085 3
+DEAL::2086 3
+DEAL::2087 3
+DEAL::2088 3
+DEAL::2089 3
+DEAL::2090 3
+DEAL::2091 3
+DEAL::2092 3
+DEAL::2093 4
+DEAL::2094 4
+DEAL::2095 4
+DEAL::2096 4
+DEAL::2097 4
+DEAL::2098 4
+DEAL::2099 4
+DEAL::2100 4
+DEAL::2101 4
+DEAL::2102 4
+DEAL::2103 4
+DEAL::2104 4
+DEAL::2105 4
+DEAL::2106 4
+DEAL::2107 4
+DEAL::2108 4
+DEAL::2109 4
+DEAL::2110 4
+DEAL::2111 4
+DEAL::2112 2
+DEAL::2113 2
+DEAL::2114 2
+DEAL::2115 2
+DEAL::2116 2
+DEAL::2117 2
+DEAL::2118 2
DEAL::2119 2
-DEAL::2120 4
-DEAL::2121 4
-DEAL::2122 4
-DEAL::2123 4
-DEAL::2124 4
+DEAL::2120 2
+DEAL::2121 2
+DEAL::2122 2
+DEAL::2123 2
+DEAL::2124 2
DEAL::2125 2
DEAL::2126 2
DEAL::2127 2
-DEAL::2128 2
-DEAL::2129 2
-DEAL::2130 2
-DEAL::2131 2
-DEAL::2132 2
-DEAL::2133 2
-DEAL::2134 2
-DEAL::2135 2
-DEAL::2136 2
-DEAL::2137 2
-DEAL::2138 2
-DEAL::2139 2
-DEAL::2140 2
-DEAL::2141 2
-DEAL::2142 2
-DEAL::2143 2
-DEAL::2144 2
-DEAL::2145 2
-DEAL::2146 1
-DEAL::2147 1
-DEAL::2148 1
-DEAL::2149 1
-DEAL::2150 1
-DEAL::2151 1
-DEAL::2152 1
-DEAL::2153 1
-DEAL::2154 1
-DEAL::2155 1
-DEAL::2156 1
-DEAL::2157 1
-DEAL::2158 1
-DEAL::2159 1
-DEAL::2160 1
-DEAL::2161 1
-DEAL::2162 1
-DEAL::2163 1
-DEAL::2164 1
-DEAL::2165 1
-DEAL::2166 1
-DEAL::2167 1
-DEAL::2168 1
-DEAL::2169 1
-DEAL::2170 1
-DEAL::2171 1
-DEAL::2172 1
-DEAL::2173 1
-DEAL::2174 1
-DEAL::2175 1
-DEAL::2176 1
-DEAL::2177 1
-DEAL::2178 1
-DEAL::2179 1
-DEAL::2180 1
-DEAL::2181 1
-DEAL::2182 1
-DEAL::2183 1
-DEAL::2184 1
-DEAL::2185 1
-DEAL::2186 1
-DEAL::2187 1
-DEAL::2188 1
-DEAL::2189 1
-DEAL::2190 1
-DEAL::2191 1
-DEAL::2192 1
-DEAL::2193 1
-DEAL::2194 1
-DEAL::2195 1
-DEAL::2196 1
-DEAL::2197 1
-DEAL::2198 1
-DEAL::2199 1
-DEAL::2200 1
-DEAL::2201 1
-DEAL::2202 1
-DEAL::2203 1
-DEAL::2204 1
-DEAL::2205 1
+DEAL::2128 0
+DEAL::2129 0
+DEAL::2130 0
+DEAL::2131 0
+DEAL::2132 0
+DEAL::2133 0
+DEAL::2134 0
+DEAL::2135 0
+DEAL::2136 0
+DEAL::2137 0
+DEAL::2138 0
+DEAL::2139 0
+DEAL::2140 0
+DEAL::2141 0
+DEAL::2142 0
+DEAL::2143 0
+DEAL::2144 0
+DEAL::2145 0
+DEAL::2146 2
+DEAL::2147 3
+DEAL::2148 3
+DEAL::2149 3
+DEAL::2150 2
+DEAL::2151 3
+DEAL::2152 2
+DEAL::2153 2
+DEAL::2154 2
+DEAL::2155 2
+DEAL::2156 2
+DEAL::2157 2
+DEAL::2158 2
+DEAL::2159 2
+DEAL::2160 4
+DEAL::2161 2
+DEAL::2162 2
+DEAL::2163 4
+DEAL::2164 4
+DEAL::2165 4
+DEAL::2166 4
+DEAL::2167 2
+DEAL::2168 2
+DEAL::2169 2
+DEAL::2170 2
+DEAL::2171 2
+DEAL::2172 4
+DEAL::2173 4
+DEAL::2174 2
+DEAL::2175 2
+DEAL::2176 2
+DEAL::2177 2
+DEAL::2178 4
+DEAL::2179 4
+DEAL::2180 4
+DEAL::2181 4
+DEAL::2182 4
+DEAL::2183 2
+DEAL::2184 4
+DEAL::2185 2
+DEAL::2186 4
+DEAL::2187 4
+DEAL::2188 4
+DEAL::2189 2
+DEAL::2190 2
+DEAL::2191 2
+DEAL::2192 2
+DEAL::2193 2
+DEAL::2194 2
+DEAL::2195 2
+DEAL::2196 2
+DEAL::2197 2
+DEAL::2198 2
+DEAL::2199 2
+DEAL::2200 2
+DEAL::2201 2
+DEAL::2202 2
+DEAL::2203 2
+DEAL::2204 2
+DEAL::2205 2
DEAL::2206 2
DEAL::2207 2
-DEAL::2208 2
+DEAL::2208 0
DEAL::2209 2
DEAL::2210 2
DEAL::2211 2
DEAL::2212 2
DEAL::2213 2
DEAL::2214 2
-DEAL::2215 2
+DEAL::2215 0
DEAL::2216 2
DEAL::2217 2
-DEAL::2218 2
+DEAL::2218 0
DEAL::2219 2
-DEAL::2220 2
-DEAL::2221 2
+DEAL::2220 0
+DEAL::2221 0
DEAL::2222 2
DEAL::2223 2
DEAL::2224 2
DEAL::2237 2
DEAL::2238 2
DEAL::2239 2
-DEAL::2240 2
-DEAL::2241 2
-DEAL::2242 2
-DEAL::2243 2
-DEAL::2244 2
-DEAL::2245 2
-DEAL::2246 2
-DEAL::2247 2
-DEAL::2248 2
-DEAL::2249 2
-DEAL::2250 2
-DEAL::2251 2
-DEAL::2252 2
-DEAL::2253 0
-DEAL::2254 0
-DEAL::2255 0
-DEAL::2256 0
-DEAL::2257 0
-DEAL::2258 0
-DEAL::2259 0
-DEAL::2260 0
-DEAL::2261 0
-DEAL::2262 0
-DEAL::2263 0
-DEAL::2264 0
-DEAL::2265 0
-DEAL::2266 0
-DEAL::2267 0
-DEAL::2268 0
-DEAL::2269 0
-DEAL::2270 0
-DEAL::2271 0
-DEAL::2272 0
-DEAL::2273 0
-DEAL::2274 0
-DEAL::2275 0
-DEAL::2276 0
-DEAL::2277 0
-DEAL::2278 0
-DEAL::2279 0
-DEAL::2280 0
-DEAL::2281 0
-DEAL::2282 0
-DEAL::2283 0
-DEAL::2284 0
-DEAL::2285 0
-DEAL::2286 0
-DEAL::2287 0
-DEAL::2288 1
-DEAL::2289 1
-DEAL::2290 1
-DEAL::2291 1
-DEAL::2292 1
-DEAL::2293 1
-DEAL::2294 1
-DEAL::2295 1
-DEAL::2296 1
-DEAL::2297 1
-DEAL::2298 1
-DEAL::2299 1
-DEAL::2300 1
-DEAL::2301 1
-DEAL::2302 1
-DEAL::2303 1
-DEAL::2304 1
-DEAL::2305 1
-DEAL::2306 1
-DEAL::2307 1
-DEAL::2308 1
-DEAL::2309 1
-DEAL::2310 1
-DEAL::2311 1
-DEAL::2312 1
-DEAL::2313 1
-DEAL::2314 1
-DEAL::2315 1
-DEAL::2316 1
-DEAL::2317 1
-DEAL::2318 1
-DEAL::2319 1
-DEAL::2320 1
-DEAL::2321 1
-DEAL::2322 1
-DEAL::2323 1
-DEAL::2324 0
-DEAL::2325 0
-DEAL::2326 0
-DEAL::2327 0
-DEAL::2328 0
-DEAL::2329 0
-DEAL::2330 0
-DEAL::2331 0
-DEAL::2332 0
-DEAL::2333 0
-DEAL::2334 0
-DEAL::2335 0
-DEAL::2336 0
-DEAL::2337 0
-DEAL::2338 0
-DEAL::2339 0
-DEAL::2340 0
-DEAL::2341 0
-DEAL::2342 0
-DEAL::2343 0
-DEAL::2344 0
+DEAL::2240 0
+DEAL::2241 0
+DEAL::2242 0
+DEAL::2243 0
+DEAL::2244 0
+DEAL::2245 0
+DEAL::2246 0
+DEAL::2247 0
+DEAL::2248 0
+DEAL::2249 0
+DEAL::2250 0
+DEAL::2251 0
+DEAL::2252 0
+DEAL::2253 3
+DEAL::2254 3
+DEAL::2255 3
+DEAL::2256 3
+DEAL::2257 3
+DEAL::2258 3
+DEAL::2259 3
+DEAL::2260 3
+DEAL::2261 3
+DEAL::2262 3
+DEAL::2263 3
+DEAL::2264 3
+DEAL::2265 3
+DEAL::2266 3
+DEAL::2267 3
+DEAL::2268 3
+DEAL::2269 3
+DEAL::2270 3
+DEAL::2271 3
+DEAL::2272 3
+DEAL::2273 3
+DEAL::2274 3
+DEAL::2275 3
+DEAL::2276 3
+DEAL::2277 3
+DEAL::2278 3
+DEAL::2279 3
+DEAL::2280 3
+DEAL::2281 3
+DEAL::2282 3
+DEAL::2283 3
+DEAL::2284 3
+DEAL::2285 3
+DEAL::2286 3
+DEAL::2287 3
+DEAL::2288 4
+DEAL::2289 4
+DEAL::2290 4
+DEAL::2291 4
+DEAL::2292 4
+DEAL::2293 4
+DEAL::2294 4
+DEAL::2295 4
+DEAL::2296 4
+DEAL::2297 4
+DEAL::2298 4
+DEAL::2299 4
+DEAL::2300 4
+DEAL::2301 4
+DEAL::2302 4
+DEAL::2303 4
+DEAL::2304 4
+DEAL::2305 4
+DEAL::2306 4
+DEAL::2307 4
+DEAL::2308 4
+DEAL::2309 4
+DEAL::2310 4
+DEAL::2311 4
+DEAL::2312 4
+DEAL::2313 4
+DEAL::2314 4
+DEAL::2315 4
+DEAL::2316 4
+DEAL::2317 4
+DEAL::2318 4
+DEAL::2319 4
+DEAL::2320 4
+DEAL::2321 4
+DEAL::2322 4
+DEAL::2323 4
+DEAL::2324 4
+DEAL::2325 3
+DEAL::2326 4
+DEAL::2327 3
+DEAL::2328 3
+DEAL::2329 3
+DEAL::2330 3
+DEAL::2331 3
+DEAL::2332 4
+DEAL::2333 4
+DEAL::2334 4
+DEAL::2335 4
+DEAL::2336 4
+DEAL::2337 4
+DEAL::2338 3
+DEAL::2339 4
+DEAL::2340 3
+DEAL::2341 3
+DEAL::2342 4
+DEAL::2343 4
+DEAL::2344 4
DEAL::2345 4
DEAL::2346 4
DEAL::2347 4
DEAL::2362 4
DEAL::2363 4
DEAL::2364 4
-DEAL::2365 4
+DEAL::2365 1
DEAL::2366 4
DEAL::2367 4
DEAL::2368 4
DEAL::2370 4
DEAL::2371 4
DEAL::2372 4
-DEAL::2373 4
-DEAL::2374 4
-DEAL::2375 4
-DEAL::2376 4
-DEAL::2377 4
-DEAL::2378 4
-DEAL::2379 4
-DEAL::2380 4
-DEAL::2381 4
-DEAL::2382 4
-DEAL::2383 4
-DEAL::2384 4
-DEAL::2385 4
-DEAL::2386 4
-DEAL::2387 4
-DEAL::2388 4
-DEAL::2389 4
-DEAL::2390 4
-DEAL::2391 4
-DEAL::2392 4
-DEAL::2393 4
-DEAL::2394 4
-DEAL::2395 4
-DEAL::2396 4
-DEAL::2397 4
-DEAL::2398 4
-DEAL::2399 4
-DEAL::2400 1
-DEAL::2401 1
-DEAL::2402 1
-DEAL::2403 1
-DEAL::2404 1
-DEAL::2405 1
-DEAL::2406 1
-DEAL::2407 1
-DEAL::2408 1
-DEAL::2409 1
-DEAL::2410 1
-DEAL::2411 1
-DEAL::2412 1
-DEAL::2413 1
-DEAL::2414 1
-DEAL::2415 1
-DEAL::2416 1
-DEAL::2417 1
-DEAL::2418 1
-DEAL::2419 4
-DEAL::2420 4
-DEAL::2421 1
-DEAL::2422 1
-DEAL::2423 1
-DEAL::2424 1
-DEAL::2425 1
-DEAL::2426 1
-DEAL::2427 1
-DEAL::2428 1
-DEAL::2429 4
-DEAL::2430 4
-DEAL::2431 4
-DEAL::2432 4
-DEAL::2433 4
-DEAL::2434 4
-DEAL::2435 4
-DEAL::2436 4
-DEAL::2437 4
-DEAL::2438 4
-DEAL::2439 4
-DEAL::2440 4
-DEAL::2441 4
-DEAL::2442 4
-DEAL::2443 4
-DEAL::2444 4
-DEAL::2445 4
-DEAL::2446 4
-DEAL::2447 4
-DEAL::2448 4
-DEAL::2449 4
-DEAL::2450 4
-DEAL::2451 4
-DEAL::2452 4
-DEAL::2453 4
-DEAL::2454 4
-DEAL::2455 4
-DEAL::2456 3
-DEAL::2457 4
-DEAL::2458 3
-DEAL::2459 3
-DEAL::2460 3
-DEAL::2461 3
-DEAL::2462 4
-DEAL::2463 4
-DEAL::2464 4
-DEAL::2465 4
-DEAL::2466 4
-DEAL::2467 4
-DEAL::2468 3
-DEAL::2469 4
-DEAL::2470 3
-DEAL::2471 3
-DEAL::2472 4
-DEAL::2473 4
-DEAL::2474 4
-DEAL::2475 3
-DEAL::2476 3
-DEAL::2477 3
-DEAL::2478 3
-DEAL::2479 3
-DEAL::2480 3
-DEAL::2481 3
-DEAL::2482 4
-DEAL::2483 3
-DEAL::2484 3
-DEAL::2485 4
-DEAL::2486 3
-DEAL::2487 3
-DEAL::2488 3
-DEAL::2489 4
-DEAL::2490 4
-DEAL::2491 3
-DEAL::2492 4
-DEAL::2493 3
-DEAL::2494 3
-DEAL::2495 3
-DEAL::2496 3
-DEAL::2497 3
-DEAL::2498 3
-DEAL::2499 3
-DEAL::2500 3
-DEAL::2501 3
-DEAL::2502 4
-DEAL::2503 4
-DEAL::2504 4
-DEAL::2505 4
-DEAL::2506 4
-DEAL::2507 4
-DEAL::2508 4
-DEAL::2509 2
-DEAL::2510 2
-DEAL::2511 2
-DEAL::2512 2
-DEAL::2513 2
-DEAL::2514 2
-DEAL::2515 2
-DEAL::2516 2
-DEAL::2517 2
-DEAL::2518 2
-DEAL::2519 2
-DEAL::2520 2
-DEAL::2521 2
-DEAL::2522 2
-DEAL::2523 2
-DEAL::2524 2
-DEAL::2525 2
-DEAL::2526 2
-DEAL::2527 2
-DEAL::2528 4
-DEAL::2529 4
-DEAL::2530 4
-DEAL::2531 4
-DEAL::2532 4
-DEAL::2533 4
-DEAL::2534 4
-DEAL::2535 4
-DEAL::2536 4
-DEAL::2537 4
-DEAL::2538 4
-DEAL::2539 4
-DEAL::2540 4
-DEAL::2541 4
-DEAL::2542 4
-DEAL::2543 4
-DEAL::2544 4
-DEAL::2545 4
-DEAL::2546 4
-DEAL::2547 0
-DEAL::2548 1
-DEAL::2549 1
-DEAL::2550 1
-DEAL::2551 1
-DEAL::2552 1
-DEAL::2553 1
-DEAL::2554 1
-DEAL::2555 1
-DEAL::2556 0
-DEAL::2557 1
-DEAL::2558 1
-DEAL::2559 1
-DEAL::2560 1
-DEAL::2561 1
-DEAL::2562 1
-DEAL::2563 1
-DEAL::2564 1
-DEAL::2565 1
-DEAL::2566 1
-DEAL::2567 1
-DEAL::2568 1
-DEAL::2569 1
-DEAL::2570 1
-DEAL::2571 1
-DEAL::2572 1
-DEAL::2573 1
-DEAL::2574 1
-DEAL::2575 1
-DEAL::2576 1
-DEAL::2577 1
-DEAL::2578 1
-DEAL::2579 1
-DEAL::2580 1
-DEAL::2581 1
-DEAL::2582 1
-DEAL::2583 1
-DEAL::2584 1
-DEAL::2585 1
-DEAL::2586 1
-DEAL::2587 1
-DEAL::2588 1
-DEAL::2589 1
-DEAL::2590 1
-DEAL::2591 1
-DEAL::2592 1
-DEAL::2593 1
-DEAL::2594 1
-DEAL::2595 1
-DEAL::2596 1
-DEAL::2597 1
-DEAL::2598 1
-DEAL::2599 1
-DEAL::2600 1
-DEAL::2601 1
-DEAL::2602 1
-DEAL::2603 1
-DEAL::2604 1
-DEAL::2605 1
-DEAL::2606 1
-DEAL::2607 1
-DEAL::2608 1
-DEAL::2609 1
-DEAL::2610 1
-DEAL::2611 1
-DEAL::2612 1
-DEAL::2613 1
-DEAL::2614 1
-DEAL::2615 1
-DEAL::2616 1
-DEAL::2617 1
-DEAL::2618 1
-DEAL::2619 1
-DEAL::2620 1
-DEAL::2621 1
-DEAL::2622 1
-DEAL::2623 1
-DEAL::2624 1
-DEAL::2625 1
-DEAL::2626 1
-DEAL::2627 1
-DEAL::2628 1
-DEAL::2629 1
-DEAL::2630 1
-DEAL::2631 1
-DEAL::2632 1
-DEAL::2633 1
-DEAL::2634 1
-DEAL::2635 1
-DEAL::2636 1
-DEAL::2637 1
-DEAL::2638 1
-DEAL::2639 1
-DEAL::2640 1
-DEAL::2641 1
-DEAL::2642 1
-DEAL::2643 1
-DEAL::2644 1
-DEAL::2645 1
-DEAL::2646 1
-DEAL::2647 2
-DEAL::2648 2
-DEAL::2649 2
-DEAL::2650 2
-DEAL::2651 2
-DEAL::2652 2
-DEAL::2653 2
-DEAL::2654 2
-DEAL::2655 2
-DEAL::2656 2
-DEAL::2657 2
-DEAL::2658 2
-DEAL::2659 2
-DEAL::2660 2
-DEAL::2661 2
-DEAL::2662 2
-DEAL::2663 2
-DEAL::2664 2
-DEAL::2665 2
-DEAL::2666 2
-DEAL::2667 2
-DEAL::2668 2
-DEAL::2669 2
-DEAL::2670 2
-DEAL::2671 2
-DEAL::2672 2
-DEAL::2673 2
-DEAL::2674 2
-DEAL::2675 2
-DEAL::2676 2
-DEAL::2677 2
-DEAL::2678 2
-DEAL::2679 2
-DEAL::2680 2
-DEAL::2681 2
-DEAL::2682 4
-DEAL::2683 4
-DEAL::2684 4
-DEAL::2685 4
-DEAL::2686 2
-DEAL::2687 4
-DEAL::2688 4
-DEAL::2689 4
-DEAL::2690 4
-DEAL::2691 4
-DEAL::2692 4
-DEAL::2693 4
-DEAL::2694 4
-DEAL::2695 2
-DEAL::2696 4
-DEAL::2697 4
-DEAL::2698 4
-DEAL::2699 4
-DEAL::2700 4
-DEAL::2701 4
-DEAL::2702 4
-DEAL::2703 4
-DEAL::2704 4
-DEAL::2705 4
-DEAL::2706 4
-DEAL::2707 4
-DEAL::2708 4
-DEAL::2709 4
-DEAL::2710 4
-DEAL::2711 4
-DEAL::2712 4
-DEAL::2713 4
-DEAL::2714 4
-DEAL::2715 4
-DEAL::2716 4
-DEAL::2717 4
-DEAL::2718 4
-DEAL::2719 4
-DEAL::2720 4
-DEAL::2721 2
-DEAL::2722 2
-DEAL::2723 2
-DEAL::2724 2
-DEAL::2725 2
+DEAL::2373 1
+DEAL::2374 1
+DEAL::2375 1
+DEAL::2376 1
+DEAL::2377 1
+DEAL::2378 1
+DEAL::2379 1
+DEAL::2380 1
+DEAL::2381 1
+DEAL::2382 1
+DEAL::2383 1
+DEAL::2384 1
+DEAL::2385 1
+DEAL::2386 1
+DEAL::2387 1
+DEAL::2388 1
+DEAL::2389 1
+DEAL::2390 1
+DEAL::2391 1
+DEAL::2392 1
+DEAL::2393 1
+DEAL::2394 1
+DEAL::2395 1
+DEAL::2396 1
+DEAL::2397 1
+DEAL::2398 1
+DEAL::2399 1
+DEAL::2400 2
+DEAL::2401 2
+DEAL::2402 2
+DEAL::2403 2
+DEAL::2404 2
+DEAL::2405 2
+DEAL::2406 2
+DEAL::2407 2
+DEAL::2408 2
+DEAL::2409 2
+DEAL::2410 2
+DEAL::2411 2
+DEAL::2412 2
+DEAL::2413 2
+DEAL::2414 2
+DEAL::2415 2
+DEAL::2416 2
+DEAL::2417 2
+DEAL::2418 2
+DEAL::2419 2
+DEAL::2420 2
+DEAL::2421 2
+DEAL::2422 2
+DEAL::2423 2
+DEAL::2424 2
+DEAL::2425 2
+DEAL::2426 2
+DEAL::2427 2
+DEAL::2428 2
+DEAL::2429 2
+DEAL::2430 2
+DEAL::2431 2
+DEAL::2432 2
+DEAL::2433 2
+DEAL::2434 2
+DEAL::2435 2
+DEAL::2436 2
+DEAL::2437 1
+DEAL::2438 1
+DEAL::2439 1
+DEAL::2440 1
+DEAL::2441 1
+DEAL::2442 1
+DEAL::2443 1
+DEAL::2444 1
+DEAL::2445 1
+DEAL::2446 1
+DEAL::2447 1
+DEAL::2448 1
+DEAL::2449 1
+DEAL::2450 1
+DEAL::2451 1
+DEAL::2452 1
+DEAL::2453 1
+DEAL::2454 1
+DEAL::2455 1
+DEAL::2456 1
+DEAL::2457 1
+DEAL::2458 1
+DEAL::2459 1
+DEAL::2460 1
+DEAL::2461 1
+DEAL::2462 1
+DEAL::2463 1
+DEAL::2464 1
+DEAL::2465 1
+DEAL::2466 1
+DEAL::2467 1
+DEAL::2468 1
+DEAL::2469 1
+DEAL::2470 1
+DEAL::2471 1
+DEAL::2472 1
+DEAL::2473 1
+DEAL::2474 1
+DEAL::2475 1
+DEAL::2476 1
+DEAL::2477 1
+DEAL::2478 1
+DEAL::2479 1
+DEAL::2480 1
+DEAL::2481 1
+DEAL::2482 1
+DEAL::2483 1
+DEAL::2484 1
+DEAL::2485 1
+DEAL::2486 1
+DEAL::2487 1
+DEAL::2488 1
+DEAL::2489 1
+DEAL::2490 1
+DEAL::2491 1
+DEAL::2492 1
+DEAL::2493 1
+DEAL::2494 1
+DEAL::2495 1
+DEAL::2496 1
+DEAL::2497 1
+DEAL::2498 1
+DEAL::2499 1
+DEAL::2500 1
+DEAL::2501 1
+DEAL::2502 1
+DEAL::2503 1
+DEAL::2504 1
+DEAL::2505 1
+DEAL::2506 1
+DEAL::2507 1
+DEAL::2508 1
+DEAL::2509 0
+DEAL::2510 0
+DEAL::2511 0
+DEAL::2512 0
+DEAL::2513 0
+DEAL::2514 0
+DEAL::2515 0
+DEAL::2516 0
+DEAL::2517 0
+DEAL::2518 0
+DEAL::2519 0
+DEAL::2520 0
+DEAL::2521 0
+DEAL::2522 0
+DEAL::2523 0
+DEAL::2524 0
+DEAL::2525 0
+DEAL::2526 0
+DEAL::2527 0
+DEAL::2528 1
+DEAL::2529 0
+DEAL::2530 1
+DEAL::2531 1
+DEAL::2532 1
+DEAL::2533 1
+DEAL::2534 1
+DEAL::2535 1
+DEAL::2536 1
+DEAL::2537 1
+DEAL::2538 1
+DEAL::2539 1
+DEAL::2540 0
+DEAL::2541 0
+DEAL::2542 0
+DEAL::2543 0
+DEAL::2544 0
+DEAL::2545 0
+DEAL::2546 0
+DEAL::2547 4
+DEAL::2548 4
+DEAL::2549 3
+DEAL::2550 3
+DEAL::2551 3
+DEAL::2552 3
+DEAL::2553 3
+DEAL::2554 4
+DEAL::2555 4
+DEAL::2556 4
+DEAL::2557 4
+DEAL::2558 4
+DEAL::2559 4
+DEAL::2560 3
+DEAL::2561 4
+DEAL::2562 4
+DEAL::2563 4
+DEAL::2564 4
+DEAL::2565 4
+DEAL::2566 4
+DEAL::2567 4
+DEAL::2568 4
+DEAL::2569 4
+DEAL::2570 4
+DEAL::2571 4
+DEAL::2572 4
+DEAL::2573 4
+DEAL::2574 4
+DEAL::2575 4
+DEAL::2576 4
+DEAL::2577 4
+DEAL::2578 4
+DEAL::2579 4
+DEAL::2580 4
+DEAL::2581 4
+DEAL::2582 4
+DEAL::2583 4
+DEAL::2584 4
+DEAL::2585 4
+DEAL::2586 4
+DEAL::2587 4
+DEAL::2588 4
+DEAL::2589 4
+DEAL::2590 4
+DEAL::2591 4
+DEAL::2592 4
+DEAL::2593 2
+DEAL::2594 2
+DEAL::2595 2
+DEAL::2596 2
+DEAL::2597 2
+DEAL::2598 2
+DEAL::2599 2
+DEAL::2600 2
+DEAL::2601 2
+DEAL::2602 2
+DEAL::2603 2
+DEAL::2604 2
+DEAL::2605 2
+DEAL::2606 2
+DEAL::2607 2
+DEAL::2608 2
+DEAL::2609 2
+DEAL::2610 2
+DEAL::2611 2
+DEAL::2612 2
+DEAL::2613 2
+DEAL::2614 2
+DEAL::2615 2
+DEAL::2616 2
+DEAL::2617 2
+DEAL::2618 2
+DEAL::2619 2
+DEAL::2620 2
+DEAL::2621 2
+DEAL::2622 2
+DEAL::2623 2
+DEAL::2624 2
+DEAL::2625 2
+DEAL::2626 4
+DEAL::2627 4
+DEAL::2628 4
+DEAL::2629 4
+DEAL::2630 4
+DEAL::2631 4
+DEAL::2632 4
+DEAL::2633 4
+DEAL::2634 4
+DEAL::2635 4
+DEAL::2636 4
+DEAL::2637 4
+DEAL::2638 4
+DEAL::2639 4
+DEAL::2640 4
+DEAL::2641 4
+DEAL::2642 4
+DEAL::2643 4
+DEAL::2644 4
+DEAL::2645 4
+DEAL::2646 4
+DEAL::2647 2
+DEAL::2648 2
+DEAL::2649 2
+DEAL::2650 2
+DEAL::2651 2
+DEAL::2652 2
+DEAL::2653 2
+DEAL::2654 2
+DEAL::2655 2
+DEAL::2656 2
+DEAL::2657 2
+DEAL::2658 2
+DEAL::2659 2
+DEAL::2660 2
+DEAL::2661 2
+DEAL::2662 2
+DEAL::2663 2
+DEAL::2664 2
+DEAL::2665 2
+DEAL::2666 2
+DEAL::2667 0
+DEAL::2668 2
+DEAL::2669 2
+DEAL::2670 2
+DEAL::2671 2
+DEAL::2672 2
+DEAL::2673 2
+DEAL::2674 0
+DEAL::2675 2
+DEAL::2676 0
+DEAL::2677 0
+DEAL::2678 0
+DEAL::2679 0
+DEAL::2680 0
+DEAL::2681 0
+DEAL::2682 2
+DEAL::2683 2
+DEAL::2684 2
+DEAL::2685 2
+DEAL::2686 2
+DEAL::2687 2
+DEAL::2688 2
+DEAL::2689 2
+DEAL::2690 2
+DEAL::2691 2
+DEAL::2692 2
+DEAL::2693 2
+DEAL::2694 2
+DEAL::2695 2
+DEAL::2696 2
+DEAL::2697 2
+DEAL::2698 2
+DEAL::2699 2
+DEAL::2700 2
+DEAL::2701 2
+DEAL::2702 2
+DEAL::2703 2
+DEAL::2704 2
+DEAL::2705 2
+DEAL::2706 2
+DEAL::2707 2
+DEAL::2708 2
+DEAL::2709 2
+DEAL::2710 2
+DEAL::2711 2
+DEAL::2712 2
+DEAL::2713 2
+DEAL::2714 2
+DEAL::2715 2
+DEAL::2716 2
+DEAL::2717 2
+DEAL::2718 2
+DEAL::2719 2
+DEAL::2720 2
+DEAL::2721 2
+DEAL::2722 2
+DEAL::2723 2
+DEAL::2724 2
+DEAL::2725 2
DEAL::2726 2
-DEAL::2727 2
+DEAL::2727 0
DEAL::2728 2
DEAL::2729 2
DEAL::2730 2
DEAL::2731 2
-DEAL::2732 2
-DEAL::2733 2
-DEAL::2734 2
-DEAL::2735 2
-DEAL::2736 2
-DEAL::2737 2
+DEAL::2732 0
+DEAL::2733 0
+DEAL::2734 0
+DEAL::2735 0
+DEAL::2736 0
+DEAL::2737 0
DEAL::2738 2
DEAL::2739 2
-DEAL::2740 2
-DEAL::2741 2
-DEAL::2742 2
-DEAL::2743 2
-DEAL::2744 2
-DEAL::2745 2
-DEAL::2746 2
-DEAL::2747 2
-DEAL::2748 2
-DEAL::2749 2
-DEAL::2750 2
-DEAL::2751 2
-DEAL::2752 2
-DEAL::2753 2
-DEAL::2754 2
-DEAL::2755 2
-DEAL::2756 2
-DEAL::2757 2
-DEAL::2758 2
-DEAL::2759 2
-DEAL::2760 2
-DEAL::2761 2
-DEAL::2762 2
-DEAL::2763 2
-DEAL::2764 2
-DEAL::2765 2
-DEAL::2766 2
-DEAL::2767 2
-DEAL::2768 2
-DEAL::2769 2
-DEAL::2770 2
-DEAL::2771 2
-DEAL::2772 2
-DEAL::2773 2
-DEAL::2774 2
-DEAL::2775 2
-DEAL::2776 2
-DEAL::2777 2
-DEAL::2778 2
-DEAL::2779 2
-DEAL::2780 0
-DEAL::2781 0
-DEAL::2782 0
-DEAL::2783 0
-DEAL::2784 0
-DEAL::2785 0
-DEAL::2786 0
-DEAL::2787 0
-DEAL::2788 0
-DEAL::2789 0
-DEAL::2790 0
-DEAL::2791 0
-DEAL::2792 0
-DEAL::2793 0
-DEAL::2794 0
-DEAL::2795 0
-DEAL::2796 4
-DEAL::2797 4
-DEAL::2798 4
-DEAL::2799 4
-DEAL::2800 4
-DEAL::2801 4
-DEAL::2802 4
-DEAL::2803 4
-DEAL::2804 4
-DEAL::2805 4
-DEAL::2806 4
-DEAL::2807 4
-DEAL::2808 4
-DEAL::2809 4
-DEAL::2810 4
-DEAL::2811 4
-DEAL::2812 3
-DEAL::2813 3
-DEAL::2814 3
-DEAL::2815 3
-DEAL::2816 3
-DEAL::2817 3
-DEAL::2818 3
-DEAL::2819 3
-DEAL::2820 3
-DEAL::2821 3
-DEAL::2822 3
-DEAL::2823 3
-DEAL::2824 3
-DEAL::2825 3
-DEAL::2826 3
-DEAL::2827 3
-DEAL::2828 3
-DEAL::2829 3
-DEAL::2830 3
-DEAL::2831 3
-DEAL::2832 3
-DEAL::2833 3
-DEAL::2834 3
-DEAL::2835 3
-DEAL::2836 3
-DEAL::2837 3
-DEAL::2838 3
-DEAL::2839 3
-DEAL::2840 4
-DEAL::2841 4
-DEAL::2842 4
-DEAL::2843 4
-DEAL::2844 4
-DEAL::2845 4
-DEAL::2846 4
-DEAL::2847 4
-DEAL::2848 4
-DEAL::2849 4
-DEAL::2850 4
-DEAL::2851 4
-DEAL::2852 4
-DEAL::2853 4
-DEAL::2854 4
-DEAL::2855 4
-DEAL::2856 4
-DEAL::2857 4
-DEAL::2858 4
-DEAL::2859 2
-DEAL::2860 2
-DEAL::2861 2
-DEAL::2862 2
-DEAL::2863 2
-DEAL::2864 2
-DEAL::2865 2
-DEAL::2866 2
-DEAL::2867 2
-DEAL::2868 2
-DEAL::2869 2
-DEAL::2870 2
-DEAL::2871 2
-DEAL::2872 2
-DEAL::2873 2
-DEAL::2874 4
-DEAL::2875 4
-DEAL::2876 4
-DEAL::2877 4
-DEAL::2878 4
-DEAL::2879 4
-DEAL::2880 4
-DEAL::2881 4
-DEAL::2882 4
-DEAL::2883 4
-DEAL::2884 4
-DEAL::2885 4
-DEAL::2886 4
-DEAL::2887 4
-DEAL::2888 4
-DEAL::2889 4
-DEAL::2890 4
-DEAL::2891 4
-DEAL::2892 4
-DEAL::2893 4
-DEAL::2894 4
-DEAL::2895 0
-DEAL::2896 0
-DEAL::2897 0
-DEAL::2898 0
-DEAL::2899 0
-DEAL::2900 0
-DEAL::2901 1
-DEAL::2902 1
-DEAL::2903 1
-DEAL::2904 0
-DEAL::2905 0
-DEAL::2906 0
-DEAL::2907 0
-DEAL::2908 0
-DEAL::2909 1
-DEAL::2910 1
-DEAL::2911 0
-DEAL::2912 1
-DEAL::2913 0
-DEAL::2914 0
-DEAL::2915 0
-DEAL::2916 0
-DEAL::2917 1
-DEAL::2918 0
-DEAL::2919 0
-DEAL::2920 1
-DEAL::2921 0
-DEAL::2922 1
-DEAL::2923 1
-DEAL::2924 1
-DEAL::2925 1
-DEAL::2926 1
-DEAL::2927 1
+DEAL::2740 0
+DEAL::2741 0
+DEAL::2742 0
+DEAL::2743 0
+DEAL::2744 0
+DEAL::2745 0
+DEAL::2746 0
+DEAL::2747 0
+DEAL::2748 0
+DEAL::2749 0
+DEAL::2750 0
+DEAL::2751 0
+DEAL::2752 0
+DEAL::2753 0
+DEAL::2754 0
+DEAL::2755 0
+DEAL::2756 0
+DEAL::2757 0
+DEAL::2758 0
+DEAL::2759 0
+DEAL::2760 0
+DEAL::2761 0
+DEAL::2762 0
+DEAL::2763 0
+DEAL::2764 0
+DEAL::2765 0
+DEAL::2766 0
+DEAL::2767 0
+DEAL::2768 0
+DEAL::2769 0
+DEAL::2770 0
+DEAL::2771 0
+DEAL::2772 0
+DEAL::2773 0
+DEAL::2774 0
+DEAL::2775 0
+DEAL::2776 0
+DEAL::2777 0
+DEAL::2778 0
+DEAL::2779 0
+DEAL::2780 3
+DEAL::2781 4
+DEAL::2782 3
+DEAL::2783 3
+DEAL::2784 3
+DEAL::2785 4
+DEAL::2786 3
+DEAL::2787 3
+DEAL::2788 3
+DEAL::2789 3
+DEAL::2790 3
+DEAL::2791 3
+DEAL::2792 4
+DEAL::2793 4
+DEAL::2794 4
+DEAL::2795 4
+DEAL::2796 1
+DEAL::2797 1
+DEAL::2798 1
+DEAL::2799 1
+DEAL::2800 1
+DEAL::2801 1
+DEAL::2802 1
+DEAL::2803 1
+DEAL::2804 1
+DEAL::2805 1
+DEAL::2806 1
+DEAL::2807 1
+DEAL::2808 1
+DEAL::2809 1
+DEAL::2810 1
+DEAL::2811 1
+DEAL::2812 1
+DEAL::2813 1
+DEAL::2814 1
+DEAL::2815 1
+DEAL::2816 1
+DEAL::2817 1
+DEAL::2818 1
+DEAL::2819 1
+DEAL::2820 1
+DEAL::2821 1
+DEAL::2822 1
+DEAL::2823 1
+DEAL::2824 1
+DEAL::2825 1
+DEAL::2826 1
+DEAL::2827 1
+DEAL::2828 1
+DEAL::2829 1
+DEAL::2830 1
+DEAL::2831 1
+DEAL::2832 1
+DEAL::2833 1
+DEAL::2834 1
+DEAL::2835 1
+DEAL::2836 1
+DEAL::2837 1
+DEAL::2838 1
+DEAL::2839 1
+DEAL::2840 1
+DEAL::2841 1
+DEAL::2842 1
+DEAL::2843 1
+DEAL::2844 1
+DEAL::2845 1
+DEAL::2846 1
+DEAL::2847 1
+DEAL::2848 1
+DEAL::2849 1
+DEAL::2850 1
+DEAL::2851 1
+DEAL::2852 1
+DEAL::2853 1
+DEAL::2854 1
+DEAL::2855 1
+DEAL::2856 1
+DEAL::2857 1
+DEAL::2858 1
+DEAL::2859 0
+DEAL::2860 0
+DEAL::2861 0
+DEAL::2862 0
+DEAL::2863 0
+DEAL::2864 0
+DEAL::2865 0
+DEAL::2866 0
+DEAL::2867 0
+DEAL::2868 0
+DEAL::2869 0
+DEAL::2870 0
+DEAL::2871 0
+DEAL::2872 0
+DEAL::2873 0
+DEAL::2874 0
+DEAL::2875 0
+DEAL::2876 0
+DEAL::2877 0
+DEAL::2878 0
+DEAL::2879 0
+DEAL::2880 0
+DEAL::2881 0
+DEAL::2882 0
+DEAL::2883 0
+DEAL::2884 0
+DEAL::2885 0
+DEAL::2886 0
+DEAL::2887 0
+DEAL::2888 0
+DEAL::2889 0
+DEAL::2890 0
+DEAL::2891 0
+DEAL::2892 0
+DEAL::2893 0
+DEAL::2894 0
+DEAL::2895 2
+DEAL::2896 2
+DEAL::2897 2
+DEAL::2898 2
+DEAL::2899 2
+DEAL::2900 2
+DEAL::2901 2
+DEAL::2902 2
+DEAL::2903 2
+DEAL::2904 2
+DEAL::2905 2
+DEAL::2906 2
+DEAL::2907 2
+DEAL::2908 2
+DEAL::2909 2
+DEAL::2910 2
+DEAL::2911 2
+DEAL::2912 2
+DEAL::2913 2
+DEAL::2914 2
+DEAL::2915 2
+DEAL::2916 2
+DEAL::2917 2
+DEAL::2918 2
+DEAL::2919 2
+DEAL::2920 2
+DEAL::2921 2
+DEAL::2922 2
+DEAL::2923 2
+DEAL::2924 2
+DEAL::2925 2
+DEAL::2926 2
+DEAL::2927 2
DEAL::2928 4
DEAL::2929 4
DEAL::2930 4
DEAL::2967 4
DEAL::2968 2
DEAL::2969 2
-DEAL::2970 2
+DEAL::2970 0
DEAL::2971 2
DEAL::2972 2
-DEAL::2973 2
-DEAL::2974 2
-DEAL::2975 2
-DEAL::2976 2
+DEAL::2973 0
+DEAL::2974 0
+DEAL::2975 0
+DEAL::2976 0
DEAL::2977 2
DEAL::2978 2
DEAL::2979 2
DEAL::2980 2
-DEAL::2981 2
-DEAL::2982 2
-DEAL::2983 2
-DEAL::2984 3
-DEAL::2985 3
-DEAL::2986 3
-DEAL::2987 3
-DEAL::2988 3
-DEAL::2989 3
-DEAL::2990 3
-DEAL::2991 3
-DEAL::2992 1
-DEAL::2993 1
+DEAL::2981 0
+DEAL::2982 0
+DEAL::2983 0
+DEAL::2984 1
+DEAL::2985 1
+DEAL::2986 1
+DEAL::2987 1
+DEAL::2988 1
+DEAL::2989 1
+DEAL::2990 1
+DEAL::2991 1
+DEAL::2992 4
+DEAL::2993 4
DEAL::2994 4
-DEAL::2995 1
-DEAL::2996 1
+DEAL::2995 4
+DEAL::2996 4
DEAL::2997 4
-DEAL::2998 1
-DEAL::2999 1
-DEAL::3000 1
-DEAL::3001 0
-DEAL::3002 0
-DEAL::3003 0
-DEAL::3004 0
-DEAL::3005 0
-DEAL::3006 0
-DEAL::3007 0
-DEAL::3008 0
-DEAL::3009 0
-DEAL::3010 0
-DEAL::3011 0
-DEAL::3012 0
-DEAL::3013 0
-DEAL::3014 0
-DEAL::3015 0
-DEAL::3016 0
-DEAL::3017 0
-DEAL::3018 0
-DEAL::3019 0
-DEAL::3020 0
-DEAL::3021 3
-DEAL::3022 3
-DEAL::3023 3
-DEAL::3024 3
-DEAL::3025 3
-DEAL::3026 3
-DEAL::3027 3
-DEAL::3028 3
-DEAL::3029 3
-DEAL::3030 3
-DEAL::3031 3
-DEAL::3032 3
-DEAL::3033 3
-DEAL::3034 3
-DEAL::3035 3
-DEAL::3036 3
-DEAL::3037 3
-DEAL::3038 3
-DEAL::3039 3
-DEAL::3040 3
-DEAL::3041 3
-DEAL::3042 3
-DEAL::3043 3
-DEAL::3044 3
-DEAL::3045 3
-DEAL::3046 2
-DEAL::3047 2
-DEAL::3048 2
-DEAL::3049 2
-DEAL::3050 2
-DEAL::3051 2
-DEAL::3052 2
-DEAL::3053 2
-DEAL::3054 2
-DEAL::3055 2
-DEAL::3056 2
-DEAL::3057 2
-DEAL::3058 2
-DEAL::3059 2
-DEAL::3060 2
-DEAL::3061 2
-DEAL::3062 2
-DEAL::3063 2
-DEAL::3064 2
-DEAL::3065 2
-DEAL::3066 2
-DEAL::3067 0
-DEAL::3068 0
-DEAL::3069 0
-DEAL::3070 0
-DEAL::3071 0
-DEAL::3072 0
-DEAL::3073 0
-DEAL::3074 0
-DEAL::3075 4
-DEAL::3076 4
-DEAL::3077 4
-DEAL::3078 4
-DEAL::3079 4
-DEAL::3080 4
-DEAL::3081 4
-DEAL::3082 4
-DEAL::3083 4
-DEAL::3084 4
-DEAL::3085 4
-DEAL::3086 4
-DEAL::3087 4
-DEAL::3088 4
-DEAL::3089 4
-DEAL::3090 4
-DEAL::3091 4
-DEAL::3092 4
-DEAL::3093 4
-DEAL::3094 3
-DEAL::3095 3
-DEAL::3096 3
-DEAL::3097 3
-DEAL::3098 3
-DEAL::3099 3
-DEAL::3100 3
-DEAL::3101 3
-DEAL::3102 3
-DEAL::3103 3
-DEAL::3104 3
-DEAL::3105 3
-DEAL::3106 3
-DEAL::3107 3
-DEAL::3108 3
-DEAL::3109 3
-DEAL::3110 3
-DEAL::3111 3
-DEAL::3112 3
-DEAL::3113 3
+DEAL::2998 4
+DEAL::2999 4
+DEAL::3000 4
+DEAL::3001 3
+DEAL::3002 3
+DEAL::3003 3
+DEAL::3004 3
+DEAL::3005 3
+DEAL::3006 3
+DEAL::3007 3
+DEAL::3008 3
+DEAL::3009 3
+DEAL::3010 3
+DEAL::3011 3
+DEAL::3012 3
+DEAL::3013 3
+DEAL::3014 3
+DEAL::3015 3
+DEAL::3016 3
+DEAL::3017 3
+DEAL::3018 3
+DEAL::3019 3
+DEAL::3020 3
+DEAL::3021 1
+DEAL::3022 1
+DEAL::3023 1
+DEAL::3024 1
+DEAL::3025 1
+DEAL::3026 1
+DEAL::3027 1
+DEAL::3028 1
+DEAL::3029 1
+DEAL::3030 1
+DEAL::3031 1
+DEAL::3032 1
+DEAL::3033 1
+DEAL::3034 1
+DEAL::3035 1
+DEAL::3036 1
+DEAL::3037 1
+DEAL::3038 1
+DEAL::3039 1
+DEAL::3040 1
+DEAL::3041 1
+DEAL::3042 1
+DEAL::3043 1
+DEAL::3044 1
+DEAL::3045 1
+DEAL::3046 0
+DEAL::3047 0
+DEAL::3048 0
+DEAL::3049 0
+DEAL::3050 0
+DEAL::3051 0
+DEAL::3052 0
+DEAL::3053 0
+DEAL::3054 0
+DEAL::3055 0
+DEAL::3056 0
+DEAL::3057 0
+DEAL::3058 0
+DEAL::3059 0
+DEAL::3060 0
+DEAL::3061 0
+DEAL::3062 0
+DEAL::3063 0
+DEAL::3064 0
+DEAL::3065 0
+DEAL::3066 0
+DEAL::3067 3
+DEAL::3068 3
+DEAL::3069 3
+DEAL::3070 3
+DEAL::3071 3
+DEAL::3072 3
+DEAL::3073 3
+DEAL::3074 3
+DEAL::3075 2
+DEAL::3076 2
+DEAL::3077 2
+DEAL::3078 2
+DEAL::3079 2
+DEAL::3080 2
+DEAL::3081 2
+DEAL::3082 2
+DEAL::3083 2
+DEAL::3084 2
+DEAL::3085 2
+DEAL::3086 2
+DEAL::3087 2
+DEAL::3088 2
+DEAL::3089 2
+DEAL::3090 2
+DEAL::3091 2
+DEAL::3092 2
+DEAL::3093 2
+DEAL::3094 1
+DEAL::3095 1
+DEAL::3096 1
+DEAL::3097 1
+DEAL::3098 1
+DEAL::3099 1
+DEAL::3100 1
+DEAL::3101 1
+DEAL::3102 1
+DEAL::3103 1
+DEAL::3104 1
+DEAL::3105 1
+DEAL::3106 1
+DEAL::3107 1
+DEAL::3108 1
+DEAL::3109 1
+DEAL::3110 1
+DEAL::3111 1
+DEAL::3112 1
+DEAL::3113 1
DEAL::3114 4
DEAL::3115 4
DEAL::3116 4
DEAL::3119 4
DEAL::3120 4
DEAL::3121 4
-DEAL::3122 1
+DEAL::3122 4
DEAL::3123 4
-DEAL::3124 1
+DEAL::3124 4
DEAL::3125 4
DEAL::3126 4
DEAL::3127 4
DEAL::3129 4
DEAL::3130 4
DEAL::3131 4
-DEAL::3132 0
-DEAL::3133 0
-DEAL::3134 0
-DEAL::3135 0
-DEAL::3136 0
-DEAL::3137 0
-DEAL::3138 0
-DEAL::3139 0
-DEAL::3140 0
-DEAL::3141 0
-DEAL::3142 0
-DEAL::3143 0
-DEAL::3144 0
-DEAL::3145 0
-DEAL::3146 0
-DEAL::3147 0
-DEAL::3148 0
-DEAL::3149 3
-DEAL::3150 3
-DEAL::3151 3
-DEAL::3152 3
-DEAL::3153 3
-DEAL::3154 3
-DEAL::3155 3
-DEAL::3156 3
-DEAL::3157 3
-DEAL::3158 3
-DEAL::3159 3
-DEAL::3160 3
-DEAL::3161 3
-DEAL::3162 3
-DEAL::3163 3
-DEAL::3164 3
-DEAL::3165 3
-DEAL::3166 3
-DEAL::3167 3
-DEAL::3168 3
-DEAL::3169 3
-DEAL::3170 3
-DEAL::3171 3
-DEAL::3172 3
-DEAL::3173 3
-DEAL::3174 3
-DEAL::3175 3
-DEAL::3176 3
-DEAL::3177 3
-DEAL::3178 3
-DEAL::3179 3
-DEAL::3180 3
-DEAL::3181 3
-DEAL::3182 3
-DEAL::3183 3
-DEAL::3184 3
-DEAL::3185 3
-DEAL::3186 3
-DEAL::3187 3
-DEAL::3188 3
-DEAL::3189 0
-DEAL::3190 0
-DEAL::3191 0
-DEAL::3192 0
-DEAL::3193 0
-DEAL::3194 0
-DEAL::3195 0
-DEAL::3196 0
-DEAL::3197 0
-DEAL::3198 0
-DEAL::3199 0
-DEAL::3200 0
-DEAL::3201 0
-DEAL::3202 0
-DEAL::3203 0
-DEAL::3204 0
-DEAL::3205 0
-DEAL::3206 0
-DEAL::3207 0
-DEAL::3208 4
-DEAL::3209 4
-DEAL::3210 4
-DEAL::3211 4
-DEAL::3212 4
-DEAL::3213 4
-DEAL::3214 4
-DEAL::3215 4
-DEAL::3216 4
-DEAL::3217 4
-DEAL::3218 4
-DEAL::3219 4
-DEAL::3220 4
-DEAL::3221 4
-DEAL::3222 4
-DEAL::3223 4
-DEAL::3224 4
-DEAL::3225 4
-DEAL::3226 2
-DEAL::3227 2
-DEAL::3228 2
-DEAL::3229 2
-DEAL::3230 2
-DEAL::3231 2
-DEAL::3232 2
-DEAL::3233 2
-DEAL::3234 2
-DEAL::3235 2
-DEAL::3236 2
-DEAL::3237 2
-DEAL::3238 2
-DEAL::3239 2
-DEAL::3240 2
-DEAL::3241 2
-DEAL::3242 2
-DEAL::3243 2
-DEAL::3244 1
-DEAL::3245 1
-DEAL::3246 1
-DEAL::3247 1
-DEAL::3248 1
-DEAL::3249 1
-DEAL::3250 1
-DEAL::3251 1
-DEAL::3252 1
-DEAL::3253 1
-DEAL::3254 1
-DEAL::3255 1
-DEAL::3256 1
-DEAL::3257 1
+DEAL::3132 3
+DEAL::3133 3
+DEAL::3134 3
+DEAL::3135 3
+DEAL::3136 3
+DEAL::3137 3
+DEAL::3138 3
+DEAL::3139 3
+DEAL::3140 3
+DEAL::3141 3
+DEAL::3142 3
+DEAL::3143 3
+DEAL::3144 3
+DEAL::3145 3
+DEAL::3146 3
+DEAL::3147 3
+DEAL::3148 3
+DEAL::3149 1
+DEAL::3150 1
+DEAL::3151 1
+DEAL::3152 1
+DEAL::3153 1
+DEAL::3154 1
+DEAL::3155 1
+DEAL::3156 1
+DEAL::3157 1
+DEAL::3158 1
+DEAL::3159 1
+DEAL::3160 1
+DEAL::3161 1
+DEAL::3162 1
+DEAL::3163 1
+DEAL::3164 1
+DEAL::3165 1
+DEAL::3166 1
+DEAL::3167 1
+DEAL::3168 1
+DEAL::3169 1
+DEAL::3170 1
+DEAL::3171 1
+DEAL::3172 1
+DEAL::3173 1
+DEAL::3174 1
+DEAL::3175 1
+DEAL::3176 1
+DEAL::3177 1
+DEAL::3178 1
+DEAL::3179 0
+DEAL::3180 0
+DEAL::3181 0
+DEAL::3182 0
+DEAL::3183 0
+DEAL::3184 0
+DEAL::3185 0
+DEAL::3186 0
+DEAL::3187 0
+DEAL::3188 0
+DEAL::3189 3
+DEAL::3190 3
+DEAL::3191 3
+DEAL::3192 3
+DEAL::3193 3
+DEAL::3194 3
+DEAL::3195 3
+DEAL::3196 3
+DEAL::3197 3
+DEAL::3198 3
+DEAL::3199 3
+DEAL::3200 3
+DEAL::3201 3
+DEAL::3202 3
+DEAL::3203 3
+DEAL::3204 3
+DEAL::3205 3
+DEAL::3206 3
+DEAL::3207 3
+DEAL::3208 2
+DEAL::3209 2
+DEAL::3210 2
+DEAL::3211 2
+DEAL::3212 2
+DEAL::3213 2
+DEAL::3214 2
+DEAL::3215 2
+DEAL::3216 2
+DEAL::3217 2
+DEAL::3218 2
+DEAL::3219 2
+DEAL::3220 2
+DEAL::3221 2
+DEAL::3222 2
+DEAL::3223 2
+DEAL::3224 2
+DEAL::3225 2
+DEAL::3226 0
+DEAL::3227 0
+DEAL::3228 0
+DEAL::3229 0
+DEAL::3230 0
+DEAL::3231 0
+DEAL::3232 0
+DEAL::3233 0
+DEAL::3234 0
+DEAL::3235 0
+DEAL::3236 0
+DEAL::3237 0
+DEAL::3238 0
+DEAL::3239 0
+DEAL::3240 0
+DEAL::3241 0
+DEAL::3242 0
+DEAL::3243 0
+DEAL::3244 4
+DEAL::3245 4
+DEAL::3246 4
+DEAL::3247 4
+DEAL::3248 4
+DEAL::3249 4
+DEAL::3250 4
+DEAL::3251 4
+DEAL::3252 4
+DEAL::3253 4
+DEAL::3254 4
+DEAL::3255 4
+DEAL::3256 4
+DEAL::3257 4
DEAL::3258 4
-DEAL::3259 1
-DEAL::3260 1
-DEAL::3261 1
-DEAL::3262 1
-DEAL::3263 3
-DEAL::3264 3
-DEAL::3265 4
-DEAL::3266 3
-DEAL::3267 3
-DEAL::3268 3
-DEAL::3269 3
-DEAL::3270 3
-DEAL::3271 3
-DEAL::3272 3
-DEAL::3273 3
-DEAL::3274 3
-DEAL::3275 3
-DEAL::3276 4
-DEAL::3277 3
-DEAL::3278 4
-DEAL::3279 3
-DEAL::3280 3
-DEAL::3281 4
-DEAL::3282 4
-DEAL::3283 4
-DEAL::3284 0
-DEAL::3285 0
-DEAL::3286 0
-DEAL::3287 0
-DEAL::3288 0
-DEAL::3289 0
-DEAL::3290 0
-DEAL::3291 0
-DEAL::3292 0
-DEAL::3293 0
-DEAL::3294 0
-DEAL::3295 0
-DEAL::3296 0
-DEAL::3297 0
-DEAL::3298 0
-DEAL::3299 0
-DEAL::3300 0
-DEAL::3301 0
-DEAL::3302 3
-DEAL::3303 3
-DEAL::3304 3
-DEAL::3305 3
-DEAL::3306 3
-DEAL::3307 3
-DEAL::3308 3
-DEAL::3309 3
-DEAL::3310 3
-DEAL::3311 3
-DEAL::3312 3
-DEAL::3313 3
-DEAL::3314 3
-DEAL::3315 3
-DEAL::3316 3
-DEAL::3317 3
-DEAL::3318 3
-DEAL::3319 3
-DEAL::3320 3
-DEAL::3321 3
-DEAL::3322 3
-DEAL::3323 3
-DEAL::3324 3
-DEAL::3325 3
-DEAL::3326 3
-DEAL::3327 3
-DEAL::3328 3
-DEAL::3329 3
-DEAL::3330 3
-DEAL::3331 3
-DEAL::3332 3
-DEAL::3333 3
-DEAL::3334 3
-DEAL::3335 3
-DEAL::3336 3
-DEAL::3337 3
-DEAL::3338 2
-DEAL::3339 2
-DEAL::3340 2
-DEAL::3341 2
-DEAL::3342 2
-DEAL::3343 2
-DEAL::3344 2
-DEAL::3345 2
-DEAL::3346 2
-DEAL::3347 2
-DEAL::3348 2
-DEAL::3349 2
-DEAL::3350 2
-DEAL::3351 2
-DEAL::3352 2
-DEAL::3353 2
-DEAL::3354 2
-DEAL::3355 2
+DEAL::3259 4
+DEAL::3260 4
+DEAL::3261 4
+DEAL::3262 4
+DEAL::3263 0
+DEAL::3264 0
+DEAL::3265 0
+DEAL::3266 0
+DEAL::3267 0
+DEAL::3268 0
+DEAL::3269 0
+DEAL::3270 0
+DEAL::3271 0
+DEAL::3272 0
+DEAL::3273 0
+DEAL::3274 0
+DEAL::3275 0
+DEAL::3276 0
+DEAL::3277 0
+DEAL::3278 0
+DEAL::3279 0
+DEAL::3280 0
+DEAL::3281 0
+DEAL::3282 0
+DEAL::3283 0
+DEAL::3284 3
+DEAL::3285 3
+DEAL::3286 3
+DEAL::3287 3
+DEAL::3288 3
+DEAL::3289 3
+DEAL::3290 3
+DEAL::3291 3
+DEAL::3292 3
+DEAL::3293 3
+DEAL::3294 3
+DEAL::3295 3
+DEAL::3296 3
+DEAL::3297 3
+DEAL::3298 3
+DEAL::3299 3
+DEAL::3300 3
+DEAL::3301 3
+DEAL::3302 1
+DEAL::3303 1
+DEAL::3304 1
+DEAL::3305 1
+DEAL::3306 1
+DEAL::3307 1
+DEAL::3308 1
+DEAL::3309 1
+DEAL::3310 1
+DEAL::3311 1
+DEAL::3312 1
+DEAL::3313 1
+DEAL::3314 1
+DEAL::3315 1
+DEAL::3316 1
+DEAL::3317 1
+DEAL::3318 1
+DEAL::3319 1
+DEAL::3320 1
+DEAL::3321 1
+DEAL::3322 1
+DEAL::3323 1
+DEAL::3324 1
+DEAL::3325 1
+DEAL::3326 1
+DEAL::3327 1
+DEAL::3328 1
+DEAL::3329 1
+DEAL::3330 1
+DEAL::3331 1
+DEAL::3332 1
+DEAL::3333 1
+DEAL::3334 1
+DEAL::3335 1
+DEAL::3336 1
+DEAL::3337 1
+DEAL::3338 0
+DEAL::3339 0
+DEAL::3340 0
+DEAL::3341 0
+DEAL::3342 0
+DEAL::3343 0
+DEAL::3344 0
+DEAL::3345 0
+DEAL::3346 0
+DEAL::3347 0
+DEAL::3348 0
+DEAL::3349 0
+DEAL::3350 0
+DEAL::3351 0
+DEAL::3352 0
+DEAL::3353 0
+DEAL::3354 0
+DEAL::3355 0
DEAL::3356 4
-DEAL::3357 4
+DEAL::3357 1
DEAL::3358 4
DEAL::3359 4
DEAL::3360 4
DEAL::3366 4
DEAL::3367 4
DEAL::3368 4
-DEAL::3369 4
+DEAL::3369 1
DEAL::3370 4
DEAL::3371 4
DEAL::3372 4
DEAL::3373 4
-DEAL::3374 4
-DEAL::3375 4
-DEAL::3376 4
-DEAL::3377 4
-DEAL::3378 4
-DEAL::3379 4
-DEAL::3380 4
-DEAL::3381 4
-DEAL::3382 4
-DEAL::3383 4
-DEAL::3384 4
-DEAL::3385 4
-DEAL::3386 4
-DEAL::3387 4
-DEAL::3388 4
-DEAL::3389 4
-DEAL::3390 4
-DEAL::3391 4
-DEAL::3392 4
-DEAL::3393 4
-DEAL::3394 4
-DEAL::3395 0
-DEAL::3396 0
-DEAL::3397 0
-DEAL::3398 0
-DEAL::3399 0
-DEAL::3400 0
-DEAL::3401 0
-DEAL::3402 0
-DEAL::3403 0
-DEAL::3404 0
-DEAL::3405 0
-DEAL::3406 0
-DEAL::3407 0
-DEAL::3408 0
-DEAL::3409 0
-DEAL::3410 0
-DEAL::3411 0
-DEAL::3412 0
-DEAL::3413 0
-DEAL::3414 0
-DEAL::3415 0
-DEAL::3416 0
-DEAL::3417 0
-DEAL::3418 0
-DEAL::3419 0
-DEAL::3420 0
-DEAL::3421 0
-DEAL::3422 0
-DEAL::3423 0
-DEAL::3424 0
-DEAL::3425 0
-DEAL::3426 0
-DEAL::3427 0
-DEAL::3428 0
-DEAL::3429 0
-DEAL::3430 0
-DEAL::3431 0
-DEAL::3432 0
-DEAL::3433 0
-DEAL::3434 0
-DEAL::3435 0
-DEAL::3436 0
-DEAL::3437 0
-DEAL::3438 0
-DEAL::3439 0
-DEAL::3440 0
-DEAL::3441 0
-DEAL::3442 0
-DEAL::3443 0
-DEAL::3444 0
-DEAL::3445 0
-DEAL::3446 0
-DEAL::3447 0
-DEAL::3448 3
-DEAL::3449 3
-DEAL::3450 3
-DEAL::3451 3
-DEAL::3452 3
-DEAL::3453 3
-DEAL::3454 3
-DEAL::3455 3
-DEAL::3456 3
-DEAL::3457 3
-DEAL::3458 3
-DEAL::3459 3
-DEAL::3460 3
-DEAL::3461 3
-DEAL::3462 3
-DEAL::3463 3
-DEAL::3464 3
-DEAL::3465 3
-DEAL::3466 3
-DEAL::3467 3
-DEAL::3468 3
-DEAL::3469 3
-DEAL::3470 3
-DEAL::3471 3
-DEAL::3472 3
-DEAL::3473 3
-DEAL::3474 3
-DEAL::3475 3
-DEAL::3476 3
-DEAL::3477 3
-DEAL::3478 3
-DEAL::3479 3
-DEAL::3480 3
-DEAL::3481 0
-DEAL::3482 0
-DEAL::3483 0
-DEAL::3484 0
-DEAL::3485 0
-DEAL::3486 0
-DEAL::3487 0
-DEAL::3488 0
-DEAL::3489 0
-DEAL::3490 0
-DEAL::3491 0
-DEAL::3492 0
-DEAL::3493 0
-DEAL::3494 0
-DEAL::3495 0
-DEAL::3496 0
-DEAL::3497 0
-DEAL::3498 0
-DEAL::3499 0
-DEAL::3500 0
-DEAL::3501 0
-DEAL::3502 1
-DEAL::3503 1
-DEAL::3504 1
-DEAL::3505 1
-DEAL::3506 1
-DEAL::3507 1
-DEAL::3508 1
-DEAL::3509 1
-DEAL::3510 1
-DEAL::3511 1
-DEAL::3512 1
-DEAL::3513 1
-DEAL::3514 1
-DEAL::3515 1
-DEAL::3516 1
-DEAL::3517 1
-DEAL::3518 1
-DEAL::3519 1
+DEAL::3374 2
+DEAL::3375 2
+DEAL::3376 2
+DEAL::3377 2
+DEAL::3378 2
+DEAL::3379 2
+DEAL::3380 2
+DEAL::3381 2
+DEAL::3382 2
+DEAL::3383 2
+DEAL::3384 2
+DEAL::3385 2
+DEAL::3386 2
+DEAL::3387 2
+DEAL::3388 2
+DEAL::3389 2
+DEAL::3390 2
+DEAL::3391 2
+DEAL::3392 2
+DEAL::3393 2
+DEAL::3394 2
+DEAL::3395 3
+DEAL::3396 3
+DEAL::3397 3
+DEAL::3398 3
+DEAL::3399 3
+DEAL::3400 3
+DEAL::3401 3
+DEAL::3402 3
+DEAL::3403 3
+DEAL::3404 3
+DEAL::3405 3
+DEAL::3406 3
+DEAL::3407 3
+DEAL::3408 3
+DEAL::3409 3
+DEAL::3410 3
+DEAL::3411 3
+DEAL::3412 3
+DEAL::3413 3
+DEAL::3414 3
+DEAL::3415 3
+DEAL::3416 3
+DEAL::3417 3
+DEAL::3418 3
+DEAL::3419 3
+DEAL::3420 3
+DEAL::3421 3
+DEAL::3422 3
+DEAL::3423 3
+DEAL::3424 3
+DEAL::3425 3
+DEAL::3426 3
+DEAL::3427 3
+DEAL::3428 3
+DEAL::3429 3
+DEAL::3430 3
+DEAL::3431 3
+DEAL::3432 3
+DEAL::3433 3
+DEAL::3434 3
+DEAL::3435 3
+DEAL::3436 3
+DEAL::3437 3
+DEAL::3438 3
+DEAL::3439 3
+DEAL::3440 3
+DEAL::3441 3
+DEAL::3442 3
+DEAL::3443 3
+DEAL::3444 3
+DEAL::3445 3
+DEAL::3446 3
+DEAL::3447 3
+DEAL::3448 1
+DEAL::3449 1
+DEAL::3450 1
+DEAL::3451 1
+DEAL::3452 1
+DEAL::3453 1
+DEAL::3454 1
+DEAL::3455 1
+DEAL::3456 1
+DEAL::3457 1
+DEAL::3458 1
+DEAL::3459 1
+DEAL::3460 1
+DEAL::3461 1
+DEAL::3462 1
+DEAL::3463 1
+DEAL::3464 1
+DEAL::3465 1
+DEAL::3466 1
+DEAL::3467 1
+DEAL::3468 1
+DEAL::3469 1
+DEAL::3470 1
+DEAL::3471 1
+DEAL::3472 1
+DEAL::3473 1
+DEAL::3474 1
+DEAL::3475 1
+DEAL::3476 1
+DEAL::3477 1
+DEAL::3478 1
+DEAL::3479 1
+DEAL::3480 1
+DEAL::3481 3
+DEAL::3482 3
+DEAL::3483 3
+DEAL::3484 3
+DEAL::3485 3
+DEAL::3486 3
+DEAL::3487 3
+DEAL::3488 3
+DEAL::3489 3
+DEAL::3490 3
+DEAL::3491 3
+DEAL::3492 3
+DEAL::3493 3
+DEAL::3494 3
+DEAL::3495 3
+DEAL::3496 3
+DEAL::3497 3
+DEAL::3498 3
+DEAL::3499 3
+DEAL::3500 3
+DEAL::3501 3
+DEAL::3502 2
+DEAL::3503 2
+DEAL::3504 2
+DEAL::3505 2
+DEAL::3506 2
+DEAL::3507 2
+DEAL::3508 2
+DEAL::3509 2
+DEAL::3510 2
+DEAL::3511 2
+DEAL::3512 2
+DEAL::3513 2
+DEAL::3514 2
+DEAL::3515 2
+DEAL::3516 2
+DEAL::3517 2
+DEAL::3518 2
+DEAL::3519 2
DEAL::3520 2
DEAL::3521 2
DEAL::3522 2
DEAL::3535 2
DEAL::3536 2
DEAL::3537 2
-DEAL::3538 1
-DEAL::3539 1
-DEAL::3540 1
-DEAL::3541 1
-DEAL::3542 1
-DEAL::3543 1
-DEAL::3544 1
-DEAL::3545 1
-DEAL::3546 1
-DEAL::3547 1
-DEAL::3548 1
-DEAL::3549 1
-DEAL::3550 1
-DEAL::3551 1
-DEAL::3552 1
-DEAL::3553 1
-DEAL::3554 1
-DEAL::3555 1
-DEAL::3556 1
-DEAL::3557 1
-DEAL::3558 1
-DEAL::3559 3
-DEAL::3560 3
-DEAL::3561 3
-DEAL::3562 3
-DEAL::3563 3
-DEAL::3564 3
-DEAL::3565 3
-DEAL::3566 3
-DEAL::3567 3
-DEAL::3568 3
-DEAL::3569 3
-DEAL::3570 3
-DEAL::3571 3
-DEAL::3572 3
-DEAL::3573 3
-DEAL::3574 3
-DEAL::3575 3
-DEAL::3576 3
-DEAL::3577 2
-DEAL::3578 2
-DEAL::3579 2
-DEAL::3580 2
-DEAL::3581 2
-DEAL::3582 2
-DEAL::3583 2
-DEAL::3584 2
-DEAL::3585 2
-DEAL::3586 2
-DEAL::3587 2
-DEAL::3588 2
-DEAL::3589 2
-DEAL::3590 2
-DEAL::3591 2
-DEAL::3592 2
-DEAL::3593 2
-DEAL::3594 2
-DEAL::3595 2
-DEAL::3596 2
-DEAL::3597 2
-DEAL::3598 2
-DEAL::3599 2
-DEAL::3600 2
-DEAL::3601 2
-DEAL::3602 2
-DEAL::3603 2
-DEAL::3604 2
-DEAL::3605 2
-DEAL::3606 2
-DEAL::3607 2
-DEAL::3608 2
-DEAL::3609 2
-DEAL::3610 2
-DEAL::3611 2
-DEAL::3612 2
-DEAL::3613 2
-DEAL::3614 2
-DEAL::3615 2
-DEAL::3616 3
-DEAL::3617 3
-DEAL::3618 3
-DEAL::3619 3
-DEAL::3620 3
-DEAL::3621 3
-DEAL::3622 3
-DEAL::3623 3
-DEAL::3624 3
-DEAL::3625 3
-DEAL::3626 3
-DEAL::3627 3
-DEAL::3628 3
-DEAL::3629 3
-DEAL::3630 3
-DEAL::3631 3
-DEAL::3632 3
-DEAL::3633 3
-DEAL::3634 3
-DEAL::3635 3
-DEAL::3636 1
+DEAL::3538 3
+DEAL::3539 3
+DEAL::3540 3
+DEAL::3541 3
+DEAL::3542 3
+DEAL::3543 3
+DEAL::3544 3
+DEAL::3545 3
+DEAL::3546 3
+DEAL::3547 3
+DEAL::3548 3
+DEAL::3549 3
+DEAL::3550 3
+DEAL::3551 3
+DEAL::3552 3
+DEAL::3553 3
+DEAL::3554 3
+DEAL::3555 3
+DEAL::3556 3
+DEAL::3557 3
+DEAL::3558 3
+DEAL::3559 4
+DEAL::3560 4
+DEAL::3561 4
+DEAL::3562 4
+DEAL::3563 4
+DEAL::3564 4
+DEAL::3565 4
+DEAL::3566 4
+DEAL::3567 4
+DEAL::3568 4
+DEAL::3569 2
+DEAL::3570 4
+DEAL::3571 4
+DEAL::3572 4
+DEAL::3573 4
+DEAL::3574 4
+DEAL::3575 4
+DEAL::3576 4
+DEAL::3577 0
+DEAL::3578 0
+DEAL::3579 0
+DEAL::3580 0
+DEAL::3581 0
+DEAL::3582 0
+DEAL::3583 0
+DEAL::3584 0
+DEAL::3585 0
+DEAL::3586 0
+DEAL::3587 0
+DEAL::3588 0
+DEAL::3589 0
+DEAL::3590 0
+DEAL::3591 0
+DEAL::3592 0
+DEAL::3593 0
+DEAL::3594 0
+DEAL::3595 0
+DEAL::3596 0
+DEAL::3597 0
+DEAL::3598 0
+DEAL::3599 0
+DEAL::3600 0
+DEAL::3601 0
+DEAL::3602 0
+DEAL::3603 0
+DEAL::3604 0
+DEAL::3605 0
+DEAL::3606 0
+DEAL::3607 0
+DEAL::3608 0
+DEAL::3609 0
+DEAL::3610 0
+DEAL::3611 0
+DEAL::3612 0
+DEAL::3613 0
+DEAL::3614 0
+DEAL::3615 0
+DEAL::3616 1
+DEAL::3617 0
+DEAL::3618 0
+DEAL::3619 1
+DEAL::3620 1
+DEAL::3621 1
+DEAL::3622 1
+DEAL::3623 1
+DEAL::3624 1
+DEAL::3625 1
+DEAL::3626 1
+DEAL::3627 1
+DEAL::3628 0
+DEAL::3629 0
+DEAL::3630 0
+DEAL::3631 0
+DEAL::3632 0
+DEAL::3633 0
+DEAL::3634 0
+DEAL::3635 0
+DEAL::3636 4
DEAL::3637 4
DEAL::3638 4
DEAL::3639 4
DEAL::3641 4
DEAL::3642 4
DEAL::3643 4
-DEAL::3644 1
+DEAL::3644 4
DEAL::3645 4
DEAL::3646 4
DEAL::3647 4
DEAL::3652 4
DEAL::3653 4
DEAL::3654 4
-DEAL::3655 0
-DEAL::3656 0
-DEAL::3657 0
-DEAL::3658 0
-DEAL::3659 0
-DEAL::3660 0
-DEAL::3661 0
-DEAL::3662 0
-DEAL::3663 0
-DEAL::3664 0
-DEAL::3665 0
-DEAL::3666 0
-DEAL::3667 0
-DEAL::3668 0
-DEAL::3669 0
-DEAL::3670 0
-DEAL::3671 0
-DEAL::3672 0
-DEAL::3673 0
-DEAL::3674 0
-DEAL::3675 3
-DEAL::3676 3
-DEAL::3677 3
-DEAL::3678 3
-DEAL::3679 3
-DEAL::3680 3
-DEAL::3681 3
-DEAL::3682 3
-DEAL::3683 3
-DEAL::3684 3
-DEAL::3685 3
-DEAL::3686 3
-DEAL::3687 3
-DEAL::3688 3
-DEAL::3689 3
-DEAL::3690 3
-DEAL::3691 3
-DEAL::3692 3
-DEAL::3693 3
-DEAL::3694 3
-DEAL::3695 3
-DEAL::3696 3
-DEAL::3697 3
-DEAL::3698 3
-DEAL::3699 3
-DEAL::3700 3
-DEAL::3701 3
-DEAL::3702 3
-DEAL::3703 3
-DEAL::3704 3
-DEAL::3705 3
-DEAL::3706 3
-DEAL::3707 3
-DEAL::3708 3
-DEAL::3709 3
-DEAL::3710 3
-DEAL::3711 3
-DEAL::3712 2
-DEAL::3713 2
-DEAL::3714 2
-DEAL::3715 2
-DEAL::3716 2
-DEAL::3717 2
-DEAL::3718 2
-DEAL::3719 2
-DEAL::3720 3
-DEAL::3721 3
-DEAL::3722 2
-DEAL::3723 3
-DEAL::3724 2
-DEAL::3725 2
-DEAL::3726 2
-DEAL::3727 2
-DEAL::3728 2
-DEAL::3729 2
-DEAL::3730 2
-DEAL::3731 3
-DEAL::3732 3
-DEAL::3733 3
-DEAL::3734 3
-DEAL::3735 3
-DEAL::3736 3
-DEAL::3737 3
-DEAL::3738 3
-DEAL::3739 3
-DEAL::3740 3
-DEAL::3741 3
-DEAL::3742 3
-DEAL::3743 3
-DEAL::3744 3
-DEAL::3745 3
-DEAL::3746 3
-DEAL::3747 3
-DEAL::3748 3
-DEAL::3749 0
-DEAL::3750 0
-DEAL::3751 0
-DEAL::3752 0
-DEAL::3753 0
-DEAL::3754 0
-DEAL::3755 0
-DEAL::3756 0
-DEAL::3757 0
-DEAL::3758 0
-DEAL::3759 0
-DEAL::3760 0
-DEAL::3761 0
-DEAL::3762 0
-DEAL::3763 0
-DEAL::3764 0
-DEAL::3765 0
-DEAL::3766 0
-DEAL::3767 0
-DEAL::3768 4
-DEAL::3769 4
-DEAL::3770 4
-DEAL::3771 4
-DEAL::3772 4
-DEAL::3773 4
-DEAL::3774 4
-DEAL::3775 4
-DEAL::3776 4
-DEAL::3777 4
-DEAL::3778 4
-DEAL::3779 4
-DEAL::3780 4
-DEAL::3781 4
-DEAL::3782 4
-DEAL::3783 4
-DEAL::3784 4
-DEAL::3785 4
-DEAL::3786 2
-DEAL::3787 2
-DEAL::3788 2
-DEAL::3789 2
-DEAL::3790 2
-DEAL::3791 2
-DEAL::3792 2
-DEAL::3793 2
-DEAL::3794 2
-DEAL::3795 2
-DEAL::3796 2
-DEAL::3797 2
-DEAL::3798 2
-DEAL::3799 2
-DEAL::3800 2
-DEAL::3801 2
-DEAL::3802 2
-DEAL::3803 2
-DEAL::3804 2
-DEAL::3805 2
-DEAL::3806 2
-DEAL::3807 2
-DEAL::3808 2
-DEAL::3809 2
-DEAL::3810 2
-DEAL::3811 2
-DEAL::3812 2
-DEAL::3813 2
-DEAL::3814 2
-DEAL::3815 2
-DEAL::3816 2
-DEAL::3817 2
-DEAL::3818 2
-DEAL::3819 2
-DEAL::3820 2
-DEAL::3821 2
-DEAL::3822 2
-DEAL::3823 2
-DEAL::3824 1
-DEAL::3825 1
-DEAL::3826 1
-DEAL::3827 1
-DEAL::3828 1
-DEAL::3829 1
-DEAL::3830 1
-DEAL::3831 1
-DEAL::3832 1
-DEAL::3833 1
-DEAL::3834 1
-DEAL::3835 1
-DEAL::3836 1
-DEAL::3837 1
-DEAL::3838 1
-DEAL::3839 1
-DEAL::3840 1
-DEAL::3841 1
-DEAL::3842 1
-DEAL::3843 1
-DEAL::3844 1
-DEAL::3845 1
-DEAL::3846 1
-DEAL::3847 1
-DEAL::3848 1
-DEAL::3849 1
-DEAL::3850 1
-DEAL::3851 1
-DEAL::3852 1
-DEAL::3853 1
-DEAL::3854 1
-DEAL::3855 1
-DEAL::3856 1
-DEAL::3857 1
-DEAL::3858 1
-DEAL::3859 1
-DEAL::3860 1
-DEAL::3861 1
-DEAL::3862 1
-DEAL::3863 1
-DEAL::3864 1
-DEAL::3865 1
-DEAL::3866 1
-DEAL::3867 1
-DEAL::3868 1
-DEAL::3869 1
-DEAL::3870 1
-DEAL::3871 1
-DEAL::3872 1
-DEAL::3873 1
-DEAL::3874 1
-DEAL::3875 1
-DEAL::3876 0
-DEAL::3877 0
-DEAL::3878 0
-DEAL::3879 0
-DEAL::3880 0
-DEAL::3881 0
-DEAL::3882 0
-DEAL::3883 0
-DEAL::3884 0
-DEAL::3885 0
-DEAL::3886 0
-DEAL::3887 0
-DEAL::3888 0
-DEAL::3889 0
-DEAL::3890 0
-DEAL::3891 0
-DEAL::3892 0
-DEAL::3893 0
-DEAL::3894 0
-DEAL::3895 0
-DEAL::3896 0
-DEAL::3897 0
-DEAL::3898 0
-DEAL::3899 0
-DEAL::3900 0
-DEAL::3901 0
-DEAL::3902 0
-DEAL::3903 0
-DEAL::3904 0
-DEAL::3905 0
-DEAL::3906 0
-DEAL::3907 0
-DEAL::3908 0
-DEAL::3909 0
-DEAL::3910 0
-DEAL::3911 0
-DEAL::3912 0
-DEAL::3913 0
-DEAL::3914 0
-DEAL::3915 0
-DEAL::3916 0
-DEAL::3917 0
-DEAL::3918 0
-DEAL::3919 0
-DEAL::3920 0
-DEAL::3921 0
-DEAL::3922 0
-DEAL::3923 0
-DEAL::3924 0
-DEAL::3925 0
-DEAL::3926 3
-DEAL::3927 3
-DEAL::3928 3
-DEAL::3929 3
-DEAL::3930 3
-DEAL::3931 3
-DEAL::3932 3
-DEAL::3933 3
-DEAL::3934 3
-DEAL::3935 3
-DEAL::3936 3
-DEAL::3937 3
-DEAL::3938 3
-DEAL::3939 3
-DEAL::3940 3
-DEAL::3941 3
-DEAL::3942 3
-DEAL::3943 3
-DEAL::3944 3
-DEAL::3945 3
-DEAL::3946 3
-DEAL::3947 3
-DEAL::3948 3
-DEAL::3949 3
-DEAL::3950 3
-DEAL::3951 3
-DEAL::3952 3
-DEAL::3953 3
-DEAL::3954 3
-DEAL::3955 3
-DEAL::3956 3
-DEAL::3957 3
-DEAL::3958 2
-DEAL::3959 2
-DEAL::3960 2
-DEAL::3961 2
-DEAL::3962 2
-DEAL::3963 2
-DEAL::3964 2
-DEAL::3965 2
-DEAL::3966 2
-DEAL::3967 2
-DEAL::3968 2
-DEAL::3969 2
-DEAL::3970 2
-DEAL::3971 2
-DEAL::3972 2
-DEAL::3973 2
-DEAL::3974 2
-DEAL::3975 2
-DEAL::3976 2
-DEAL::3977 2
-DEAL::3978 2
-DEAL::3979 2
-DEAL::3980 2
-DEAL::3981 2
-DEAL::3982 2
-DEAL::3983 2
-DEAL::3984 2
-DEAL::3985 2
-DEAL::3986 2
-DEAL::3987 2
-DEAL::3988 2
-DEAL::3989 2
-DEAL::3990 2
-DEAL::3991 2
-DEAL::3992 2
-DEAL::3993 2
-DEAL::3994 2
-DEAL::3995 2
-DEAL::3996 0
-DEAL::3997 0
-DEAL::3998 0
-DEAL::3999 0
-DEAL::4000 0
-DEAL::4001 0
-DEAL::4002 0
-DEAL::4003 0
-DEAL::4004 0
-DEAL::4005 0
-DEAL::4006 0
-DEAL::4007 0
-DEAL::4008 0
-DEAL::4009 0
-DEAL::4010 0
-DEAL::4011 0
-DEAL::4012 0
-DEAL::4013 0
-DEAL::4014 0
-DEAL::4015 0
-DEAL::4016 0
-DEAL::4017 0
-DEAL::4018 0
-DEAL::4019 0
-DEAL::4020 0
-DEAL::4021 0
-DEAL::4022 0
-DEAL::4023 0
-DEAL::4024 0
-DEAL::4025 0
-DEAL::4026 0
-DEAL::4027 0
-DEAL::4028 0
-DEAL::4029 0
-DEAL::4030 0
-DEAL::4031 0
-DEAL::4032 0
-DEAL::4033 0
-DEAL::4034 0
-DEAL::4035 0
-DEAL::4036 4
-DEAL::4037 4
-DEAL::4038 4
-DEAL::4039 4
-DEAL::4040 4
-DEAL::4041 4
-DEAL::4042 4
-DEAL::4043 4
-DEAL::4044 4
-DEAL::4045 4
-DEAL::4046 4
-DEAL::4047 4
-DEAL::4048 4
-DEAL::4049 4
-DEAL::4050 4
-DEAL::4051 4
-DEAL::4052 4
-DEAL::4053 4
-DEAL::4054 4
-DEAL::4055 4
-DEAL::4056 4
-DEAL::4057 4
-DEAL::4058 4
-DEAL::4059 4
-DEAL::4060 4
-DEAL::4061 4
-DEAL::4062 4
-DEAL::4063 4
-DEAL::4064 4
-DEAL::4065 4
-DEAL::4066 4
-DEAL::4067 4
-DEAL::4068 4
-DEAL::4069 4
-DEAL::4070 4
-DEAL::4071 4
-DEAL::4072 4
-DEAL::4073 4
-DEAL::4074 4
-DEAL::4075 4
-DEAL::4076 4
-DEAL::4077 4
-DEAL::4078 4
-DEAL::4079 4
-DEAL::4080 4
-DEAL::4081 4
-DEAL::4082 4
-DEAL::4083 4
-DEAL::4084 4
-DEAL::4085 4
-DEAL::4086 4
-DEAL::4087 4
-DEAL::4088 4
-DEAL::4089 4
-DEAL::4090 4
-DEAL::4091 4
-DEAL::4092 4
-DEAL::4093 4
-DEAL::4094 2
-DEAL::4095 2
-DEAL::4096 2
-DEAL::4097 2
-DEAL::4098 2
-DEAL::4099 2
-DEAL::4100 2
-DEAL::4101 2
-DEAL::4102 2
-DEAL::4103 2
-DEAL::4104 2
-DEAL::4105 2
-DEAL::4106 2
-DEAL::4107 2
-DEAL::4108 2
-DEAL::4109 2
-DEAL::4110 2
-DEAL::4111 2
-DEAL::4112 2
-DEAL::4113 2
-DEAL::4114 2
-DEAL::4115 0
-DEAL::4116 0
-DEAL::4117 0
-DEAL::4118 0
-DEAL::4119 0
-DEAL::4120 0
-DEAL::4121 0
-DEAL::4122 0
-DEAL::4123 0
-DEAL::4124 0
-DEAL::4125 0
-DEAL::4126 0
-DEAL::4127 0
-DEAL::4128 0
-DEAL::4129 0
-DEAL::4130 0
-DEAL::4131 0
-DEAL::4132 0
-DEAL::4133 0
-DEAL::4134 0
-DEAL::4135 0
-DEAL::4136 0
-DEAL::4137 0
-DEAL::4138 0
-DEAL::4139 0
-DEAL::4140 0
-DEAL::4141 0
-DEAL::4142 0
-DEAL::4143 0
-DEAL::4144 0
-DEAL::4145 0
-DEAL::4146 0
-DEAL::4147 0
-DEAL::4148 0
-DEAL::4149 0
-DEAL::4150 0
-DEAL::4151 0
-DEAL::4152 0
-DEAL::4153 0
-DEAL::4154 3
-DEAL::4155 3
-DEAL::4156 3
-DEAL::4157 3
-DEAL::4158 3
-DEAL::4159 3
-DEAL::4160 3
-DEAL::4161 3
-DEAL::4162 3
-DEAL::4163 3
-DEAL::4164 3
-DEAL::4165 3
-DEAL::4166 3
-DEAL::4167 3
-DEAL::4168 3
-DEAL::4169 3
-DEAL::4170 3
-DEAL::4171 3
-DEAL::4172 3
-DEAL::4173 3
-DEAL::4174 3
-DEAL::4175 3
-DEAL::4176 3
-DEAL::4177 3
-DEAL::4178 3
-DEAL::4179 3
-DEAL::4180 3
-DEAL::4181 3
-DEAL::4182 3
-DEAL::4183 3
-DEAL::4184 3
-DEAL::4185 3
-DEAL::4186 3
-DEAL::4187 3
-DEAL::4188 3
-DEAL::4189 3
-DEAL::4190 3
-DEAL::4191 3
-DEAL::4192 3
-DEAL::4193 3
-DEAL::4194 3
-DEAL::4195 3
-DEAL::4196 3
-DEAL::4197 3
-DEAL::4198 3
-DEAL::4199 3
-DEAL::4200 3
-DEAL::4201 3
-DEAL::4202 3
-DEAL::4203 3
-DEAL::4204 3
-DEAL::4205 3
-DEAL::4206 3
-DEAL::4207 3
-DEAL::4208 3
-DEAL::4209 3
-DEAL::4210 3
-DEAL::4211 3
-DEAL::4212 3
-DEAL::4213 3
-DEAL::4214 3
-DEAL::4215 3
-DEAL::4216 3
-DEAL::4217 3
-DEAL::4218 3
-DEAL::4219 3
-DEAL::4220 3
-DEAL::4221 3
-DEAL::4222 3
-DEAL::4223 3
-DEAL::4224 0
-DEAL::4225 0
-DEAL::4226 0
-DEAL::4227 0
-DEAL::4228 0
-DEAL::4229 0
-DEAL::4230 0
-DEAL::4231 0
-DEAL::4232 0
-DEAL::4233 0
-DEAL::4234 0
-DEAL::4235 0
-DEAL::4236 0
-DEAL::4237 0
-DEAL::4238 0
-DEAL::4239 0
-DEAL::4240 0
-DEAL::4241 0
-DEAL::4242 0
-DEAL::4243 0
-DEAL::4244 0
-DEAL::4245 1
-DEAL::4246 1
-DEAL::4247 1
-DEAL::4248 1
-DEAL::4249 1
-DEAL::4250 1
-DEAL::4251 1
-DEAL::4252 1
-DEAL::4253 1
-DEAL::4254 1
-DEAL::4255 1
-DEAL::4256 1
-DEAL::4257 1
-DEAL::4258 1
-DEAL::4259 1
-DEAL::4260 1
-DEAL::4261 1
-DEAL::4262 1
-DEAL::4263 1
-DEAL::4264 1
-DEAL::4265 1
-DEAL::4266 1
-DEAL::4267 1
-DEAL::4268 1
-DEAL::4269 1
-DEAL::4270 1
-DEAL::4271 1
-DEAL::4272 1
-DEAL::4273 1
-DEAL::4274 1
-DEAL::4275 1
-DEAL::4276 1
-DEAL::4277 1
-DEAL::4278 1
-DEAL::4279 1
-DEAL::4280 1
-DEAL::4281 1
-DEAL::4282 1
-DEAL::4283 1
-DEAL::4284 1
-DEAL::4285 1
-DEAL::4286 1
-DEAL::4287 1
-DEAL::4288 1
-DEAL::4289 1
-DEAL::4290 1
-DEAL::4291 1
-DEAL::4292 1
-DEAL::4293 1
-DEAL::4294 1
-DEAL::4295 1
-DEAL::4296 1
-DEAL::4297 1
+DEAL::3655 3
+DEAL::3656 3
+DEAL::3657 3
+DEAL::3658 3
+DEAL::3659 3
+DEAL::3660 3
+DEAL::3661 3
+DEAL::3662 3
+DEAL::3663 3
+DEAL::3664 3
+DEAL::3665 3
+DEAL::3666 3
+DEAL::3667 3
+DEAL::3668 3
+DEAL::3669 3
+DEAL::3670 3
+DEAL::3671 3
+DEAL::3672 3
+DEAL::3673 3
+DEAL::3674 3
+DEAL::3675 1
+DEAL::3676 4
+DEAL::3677 1
+DEAL::3678 4
+DEAL::3679 4
+DEAL::3680 4
+DEAL::3681 4
+DEAL::3682 4
+DEAL::3683 1
+DEAL::3684 1
+DEAL::3685 1
+DEAL::3686 1
+DEAL::3687 1
+DEAL::3688 1
+DEAL::3689 4
+DEAL::3690 1
+DEAL::3691 4
+DEAL::3692 4
+DEAL::3693 1
+DEAL::3694 1
+DEAL::3695 1
+DEAL::3696 1
+DEAL::3697 1
+DEAL::3698 1
+DEAL::3699 1
+DEAL::3700 1
+DEAL::3701 1
+DEAL::3702 1
+DEAL::3703 1
+DEAL::3704 1
+DEAL::3705 1
+DEAL::3706 1
+DEAL::3707 1
+DEAL::3708 1
+DEAL::3709 1
+DEAL::3710 1
+DEAL::3711 1
+DEAL::3712 0
+DEAL::3713 0
+DEAL::3714 0
+DEAL::3715 0
+DEAL::3716 0
+DEAL::3717 0
+DEAL::3718 0
+DEAL::3719 0
+DEAL::3720 0
+DEAL::3721 0
+DEAL::3722 0
+DEAL::3723 0
+DEAL::3724 0
+DEAL::3725 0
+DEAL::3726 0
+DEAL::3727 0
+DEAL::3728 0
+DEAL::3729 0
+DEAL::3730 0
+DEAL::3731 1
+DEAL::3732 0
+DEAL::3733 0
+DEAL::3734 0
+DEAL::3735 1
+DEAL::3736 0
+DEAL::3737 0
+DEAL::3738 0
+DEAL::3739 1
+DEAL::3740 0
+DEAL::3741 1
+DEAL::3742 0
+DEAL::3743 0
+DEAL::3744 0
+DEAL::3745 0
+DEAL::3746 0
+DEAL::3747 0
+DEAL::3748 0
+DEAL::3749 3
+DEAL::3750 3
+DEAL::3751 3
+DEAL::3752 3
+DEAL::3753 3
+DEAL::3754 3
+DEAL::3755 3
+DEAL::3756 3
+DEAL::3757 3
+DEAL::3758 3
+DEAL::3759 3
+DEAL::3760 3
+DEAL::3761 3
+DEAL::3762 3
+DEAL::3763 3
+DEAL::3764 3
+DEAL::3765 3
+DEAL::3766 3
+DEAL::3767 3
+DEAL::3768 2
+DEAL::3769 2
+DEAL::3770 2
+DEAL::3771 2
+DEAL::3772 2
+DEAL::3773 2
+DEAL::3774 2
+DEAL::3775 2
+DEAL::3776 2
+DEAL::3777 2
+DEAL::3778 2
+DEAL::3779 2
+DEAL::3780 2
+DEAL::3781 2
+DEAL::3782 2
+DEAL::3783 2
+DEAL::3784 2
+DEAL::3785 2
+DEAL::3786 0
+DEAL::3787 0
+DEAL::3788 0
+DEAL::3789 0
+DEAL::3790 0
+DEAL::3791 0
+DEAL::3792 0
+DEAL::3793 0
+DEAL::3794 0
+DEAL::3795 0
+DEAL::3796 0
+DEAL::3797 0
+DEAL::3798 0
+DEAL::3799 0
+DEAL::3800 0
+DEAL::3801 0
+DEAL::3802 0
+DEAL::3803 0
+DEAL::3804 0
+DEAL::3805 0
+DEAL::3806 0
+DEAL::3807 0
+DEAL::3808 0
+DEAL::3809 0
+DEAL::3810 0
+DEAL::3811 0
+DEAL::3812 0
+DEAL::3813 0
+DEAL::3814 0
+DEAL::3815 0
+DEAL::3816 0
+DEAL::3817 0
+DEAL::3818 0
+DEAL::3819 0
+DEAL::3820 0
+DEAL::3821 0
+DEAL::3822 0
+DEAL::3823 0
+DEAL::3824 4
+DEAL::3825 4
+DEAL::3826 4
+DEAL::3827 4
+DEAL::3828 4
+DEAL::3829 4
+DEAL::3830 4
+DEAL::3831 4
+DEAL::3832 4
+DEAL::3833 4
+DEAL::3834 4
+DEAL::3835 4
+DEAL::3836 4
+DEAL::3837 4
+DEAL::3838 4
+DEAL::3839 4
+DEAL::3840 4
+DEAL::3841 4
+DEAL::3842 4
+DEAL::3843 4
+DEAL::3844 4
+DEAL::3845 4
+DEAL::3846 4
+DEAL::3847 4
+DEAL::3848 4
+DEAL::3849 4
+DEAL::3850 4
+DEAL::3851 4
+DEAL::3852 4
+DEAL::3853 4
+DEAL::3854 4
+DEAL::3855 4
+DEAL::3856 4
+DEAL::3857 4
+DEAL::3858 4
+DEAL::3859 4
+DEAL::3860 4
+DEAL::3861 4
+DEAL::3862 4
+DEAL::3863 4
+DEAL::3864 4
+DEAL::3865 4
+DEAL::3866 4
+DEAL::3867 4
+DEAL::3868 4
+DEAL::3869 4
+DEAL::3870 4
+DEAL::3871 4
+DEAL::3872 4
+DEAL::3873 4
+DEAL::3874 4
+DEAL::3875 4
+DEAL::3876 3
+DEAL::3877 3
+DEAL::3878 3
+DEAL::3879 3
+DEAL::3880 3
+DEAL::3881 3
+DEAL::3882 3
+DEAL::3883 3
+DEAL::3884 3
+DEAL::3885 3
+DEAL::3886 3
+DEAL::3887 3
+DEAL::3888 3
+DEAL::3889 3
+DEAL::3890 3
+DEAL::3891 3
+DEAL::3892 3
+DEAL::3893 3
+DEAL::3894 3
+DEAL::3895 3
+DEAL::3896 3
+DEAL::3897 3
+DEAL::3898 3
+DEAL::3899 3
+DEAL::3900 3
+DEAL::3901 3
+DEAL::3902 3
+DEAL::3903 3
+DEAL::3904 3
+DEAL::3905 3
+DEAL::3906 3
+DEAL::3907 3
+DEAL::3908 3
+DEAL::3909 3
+DEAL::3910 3
+DEAL::3911 3
+DEAL::3912 3
+DEAL::3913 3
+DEAL::3914 3
+DEAL::3915 3
+DEAL::3916 3
+DEAL::3917 3
+DEAL::3918 3
+DEAL::3919 3
+DEAL::3920 3
+DEAL::3921 3
+DEAL::3922 3
+DEAL::3923 3
+DEAL::3924 3
+DEAL::3925 3
+DEAL::3926 1
+DEAL::3927 1
+DEAL::3928 1
+DEAL::3929 1
+DEAL::3930 1
+DEAL::3931 1
+DEAL::3932 1
+DEAL::3933 1
+DEAL::3934 1
+DEAL::3935 1
+DEAL::3936 1
+DEAL::3937 1
+DEAL::3938 1
+DEAL::3939 1
+DEAL::3940 1
+DEAL::3941 1
+DEAL::3942 1
+DEAL::3943 1
+DEAL::3944 1
+DEAL::3945 1
+DEAL::3946 1
+DEAL::3947 1
+DEAL::3948 1
+DEAL::3949 1
+DEAL::3950 1
+DEAL::3951 1
+DEAL::3952 1
+DEAL::3953 1
+DEAL::3954 1
+DEAL::3955 1
+DEAL::3956 1
+DEAL::3957 1
+DEAL::3958 0
+DEAL::3959 0
+DEAL::3960 0
+DEAL::3961 0
+DEAL::3962 0
+DEAL::3963 0
+DEAL::3964 0
+DEAL::3965 0
+DEAL::3966 0
+DEAL::3967 0
+DEAL::3968 0
+DEAL::3969 0
+DEAL::3970 0
+DEAL::3971 0
+DEAL::3972 0
+DEAL::3973 0
+DEAL::3974 0
+DEAL::3975 0
+DEAL::3976 0
+DEAL::3977 0
+DEAL::3978 0
+DEAL::3979 0
+DEAL::3980 0
+DEAL::3981 0
+DEAL::3982 0
+DEAL::3983 0
+DEAL::3984 0
+DEAL::3985 0
+DEAL::3986 0
+DEAL::3987 0
+DEAL::3988 0
+DEAL::3989 0
+DEAL::3990 0
+DEAL::3991 0
+DEAL::3992 0
+DEAL::3993 0
+DEAL::3994 0
+DEAL::3995 0
+DEAL::3996 3
+DEAL::3997 3
+DEAL::3998 3
+DEAL::3999 3
+DEAL::4000 3
+DEAL::4001 3
+DEAL::4002 3
+DEAL::4003 3
+DEAL::4004 3
+DEAL::4005 3
+DEAL::4006 3
+DEAL::4007 3
+DEAL::4008 3
+DEAL::4009 3
+DEAL::4010 3
+DEAL::4011 3
+DEAL::4012 3
+DEAL::4013 3
+DEAL::4014 3
+DEAL::4015 3
+DEAL::4016 3
+DEAL::4017 3
+DEAL::4018 3
+DEAL::4019 3
+DEAL::4020 3
+DEAL::4021 3
+DEAL::4022 3
+DEAL::4023 3
+DEAL::4024 3
+DEAL::4025 3
+DEAL::4026 3
+DEAL::4027 3
+DEAL::4028 3
+DEAL::4029 3
+DEAL::4030 3
+DEAL::4031 3
+DEAL::4032 3
+DEAL::4033 3
+DEAL::4034 3
+DEAL::4035 3
+DEAL::4036 4
+DEAL::4037 4
+DEAL::4038 1
+DEAL::4039 4
+DEAL::4040 4
+DEAL::4041 4
+DEAL::4042 1
+DEAL::4043 4
+DEAL::4044 4
+DEAL::4045 1
+DEAL::4046 4
+DEAL::4047 1
+DEAL::4048 1
+DEAL::4049 1
+DEAL::4050 1
+DEAL::4051 1
+DEAL::4052 1
+DEAL::4053 1
+DEAL::4054 1
+DEAL::4055 1
+DEAL::4056 1
+DEAL::4057 1
+DEAL::4058 1
+DEAL::4059 1
+DEAL::4060 1
+DEAL::4061 1
+DEAL::4062 1
+DEAL::4063 1
+DEAL::4064 1
+DEAL::4065 1
+DEAL::4066 1
+DEAL::4067 1
+DEAL::4068 1
+DEAL::4069 1
+DEAL::4070 1
+DEAL::4071 1
+DEAL::4072 1
+DEAL::4073 1
+DEAL::4074 2
+DEAL::4075 2
+DEAL::4076 2
+DEAL::4077 2
+DEAL::4078 2
+DEAL::4079 2
+DEAL::4080 2
+DEAL::4081 2
+DEAL::4082 2
+DEAL::4083 2
+DEAL::4084 2
+DEAL::4085 2
+DEAL::4086 2
+DEAL::4087 2
+DEAL::4088 2
+DEAL::4089 2
+DEAL::4090 2
+DEAL::4091 2
+DEAL::4092 2
+DEAL::4093 2
+DEAL::4094 0
+DEAL::4095 0
+DEAL::4096 0
+DEAL::4097 0
+DEAL::4098 0
+DEAL::4099 0
+DEAL::4100 0
+DEAL::4101 0
+DEAL::4102 0
+DEAL::4103 0
+DEAL::4104 0
+DEAL::4105 0
+DEAL::4106 0
+DEAL::4107 0
+DEAL::4108 0
+DEAL::4109 0
+DEAL::4110 0
+DEAL::4111 0
+DEAL::4112 0
+DEAL::4113 0
+DEAL::4114 0
+DEAL::4115 3
+DEAL::4116 3
+DEAL::4117 3
+DEAL::4118 3
+DEAL::4119 3
+DEAL::4120 3
+DEAL::4121 3
+DEAL::4122 3
+DEAL::4123 3
+DEAL::4124 3
+DEAL::4125 3
+DEAL::4126 3
+DEAL::4127 3
+DEAL::4128 3
+DEAL::4129 3
+DEAL::4130 3
+DEAL::4131 3
+DEAL::4132 3
+DEAL::4133 3
+DEAL::4134 3
+DEAL::4135 3
+DEAL::4136 3
+DEAL::4137 3
+DEAL::4138 3
+DEAL::4139 3
+DEAL::4140 3
+DEAL::4141 3
+DEAL::4142 3
+DEAL::4143 3
+DEAL::4144 3
+DEAL::4145 3
+DEAL::4146 3
+DEAL::4147 3
+DEAL::4148 3
+DEAL::4149 3
+DEAL::4150 3
+DEAL::4151 3
+DEAL::4152 3
+DEAL::4153 3
+DEAL::4154 4
+DEAL::4155 4
+DEAL::4156 4
+DEAL::4157 4
+DEAL::4158 4
+DEAL::4159 4
+DEAL::4160 4
+DEAL::4161 4
+DEAL::4162 4
+DEAL::4163 4
+DEAL::4164 4
+DEAL::4165 4
+DEAL::4166 4
+DEAL::4167 4
+DEAL::4168 4
+DEAL::4169 4
+DEAL::4170 4
+DEAL::4171 4
+DEAL::4172 4
+DEAL::4173 4
+DEAL::4174 4
+DEAL::4175 1
+DEAL::4176 1
+DEAL::4177 1
+DEAL::4178 4
+DEAL::4179 1
+DEAL::4180 4
+DEAL::4181 1
+DEAL::4182 4
+DEAL::4183 1
+DEAL::4184 1
+DEAL::4185 1
+DEAL::4186 1
+DEAL::4187 1
+DEAL::4188 1
+DEAL::4189 1
+DEAL::4190 1
+DEAL::4191 1
+DEAL::4192 0
+DEAL::4193 0
+DEAL::4194 0
+DEAL::4195 1
+DEAL::4196 0
+DEAL::4197 0
+DEAL::4198 0
+DEAL::4199 1
+DEAL::4200 1
+DEAL::4201 1
+DEAL::4202 1
+DEAL::4203 0
+DEAL::4204 0
+DEAL::4205 0
+DEAL::4206 0
+DEAL::4207 0
+DEAL::4208 1
+DEAL::4209 1
+DEAL::4210 0
+DEAL::4211 0
+DEAL::4212 0
+DEAL::4213 0
+DEAL::4214 0
+DEAL::4215 0
+DEAL::4216 1
+DEAL::4217 1
+DEAL::4218 0
+DEAL::4219 0
+DEAL::4220 0
+DEAL::4221 0
+DEAL::4222 1
+DEAL::4223 1
+DEAL::4224 3
+DEAL::4225 3
+DEAL::4226 3
+DEAL::4227 3
+DEAL::4228 3
+DEAL::4229 3
+DEAL::4230 3
+DEAL::4231 3
+DEAL::4232 3
+DEAL::4233 3
+DEAL::4234 3
+DEAL::4235 3
+DEAL::4236 3
+DEAL::4237 3
+DEAL::4238 3
+DEAL::4239 3
+DEAL::4240 3
+DEAL::4241 3
+DEAL::4242 3
+DEAL::4243 3
+DEAL::4244 3
+DEAL::4245 4
+DEAL::4246 4
+DEAL::4247 4
+DEAL::4248 4
+DEAL::4249 4
+DEAL::4250 4
+DEAL::4251 4
+DEAL::4252 4
+DEAL::4253 4
+DEAL::4254 4
+DEAL::4255 4
+DEAL::4256 4
+DEAL::4257 4
+DEAL::4258 4
+DEAL::4259 4
+DEAL::4260 4
+DEAL::4261 4
+DEAL::4262 4
+DEAL::4263 4
+DEAL::4264 4
+DEAL::4265 4
+DEAL::4266 4
+DEAL::4267 4
+DEAL::4268 4
+DEAL::4269 4
+DEAL::4270 4
+DEAL::4271 4
+DEAL::4272 4
+DEAL::4273 4
+DEAL::4274 4
+DEAL::4275 4
+DEAL::4276 4
+DEAL::4277 4
+DEAL::4278 4
+DEAL::4279 2
+DEAL::4280 2
+DEAL::4281 2
+DEAL::4282 2
+DEAL::4283 2
+DEAL::4284 2
+DEAL::4285 2
+DEAL::4286 2
+DEAL::4287 2
+DEAL::4288 2
+DEAL::4289 2
+DEAL::4290 2
+DEAL::4291 2
+DEAL::4292 2
+DEAL::4293 2
+DEAL::4294 2
+DEAL::4295 2
+DEAL::4296 2
+DEAL::4297 2
DEAL::4298 2
DEAL::4299 2
DEAL::4300 2
DEAL::4314 2
DEAL::4315 2
DEAL::4316 2
-DEAL::4317 1
-DEAL::4318 1
-DEAL::4319 1
-DEAL::4320 1
-DEAL::4321 1
-DEAL::4322 1
-DEAL::4323 1
-DEAL::4324 1
-DEAL::4325 1
-DEAL::4326 1
-DEAL::4327 1
-DEAL::4328 1
-DEAL::4329 1
-DEAL::4330 1
-DEAL::4331 1
-DEAL::4332 1
-DEAL::4333 1
-DEAL::4334 1
-DEAL::4335 1
-DEAL::4336 1
-DEAL::4337 1
-DEAL::4338 3
-DEAL::4339 3
-DEAL::4340 3
-DEAL::4341 3
-DEAL::4342 3
-DEAL::4343 3
-DEAL::4344 3
-DEAL::4345 3
-DEAL::4346 3
-DEAL::4347 3
-DEAL::4348 3
-DEAL::4349 3
-DEAL::4350 3
-DEAL::4351 3
-DEAL::4352 3
-DEAL::4353 3
-DEAL::4354 3
-DEAL::4355 3
-DEAL::4356 3
-DEAL::4357 3
-DEAL::4358 3
-DEAL::4359 3
-DEAL::4360 3
-DEAL::4361 3
-DEAL::4362 3
-DEAL::4363 3
-DEAL::4364 3
-DEAL::4365 3
-DEAL::4366 3
-DEAL::4367 3
-DEAL::4368 3
-DEAL::4369 3
-DEAL::4370 3
-DEAL::4371 3
-DEAL::4372 3
-DEAL::4373 3
-DEAL::4374 3
-DEAL::4375 3
-DEAL::4376 2
-DEAL::4377 2
-DEAL::4378 2
-DEAL::4379 2
-DEAL::4380 2
-DEAL::4381 2
-DEAL::4382 2
-DEAL::4383 2
-DEAL::4384 2
-DEAL::4385 2
-DEAL::4386 2
-DEAL::4387 2
-DEAL::4388 2
-DEAL::4389 2
-DEAL::4390 2
-DEAL::4391 2
-DEAL::4392 2
-DEAL::4393 2
-DEAL::4394 2
-DEAL::4395 2
-DEAL::4396 2
-DEAL::4397 2
-DEAL::4398 2
-DEAL::4399 2
-DEAL::4400 2
-DEAL::4401 2
-DEAL::4402 2
-DEAL::4403 2
-DEAL::4404 2
-DEAL::4405 2
-DEAL::4406 2
-DEAL::4407 2
-DEAL::4408 2
-DEAL::4409 2
-DEAL::4410 2
-DEAL::4411 2
-DEAL::4412 2
-DEAL::4413 2
-DEAL::4414 2
-DEAL::4415 2
-DEAL::4416 2
-DEAL::4417 2
-DEAL::4418 2
-DEAL::4419 2
-DEAL::4420 2
-DEAL::4421 2
-DEAL::4422 2
-DEAL::4423 2
-DEAL::4424 2
-DEAL::4425 2
-DEAL::4426 2
-DEAL::4427 2
-DEAL::4428 2
-DEAL::4429 2
-DEAL::4430 2
-DEAL::4431 2
-DEAL::4432 2
-DEAL::4433 2
-DEAL::4434 2
-DEAL::4435 2
-DEAL::4436 2
-DEAL::4437 2
-DEAL::4438 2
-DEAL::4439 2
-DEAL::4440 2
-DEAL::4441 2
-DEAL::4442 2
-DEAL::4443 2
-DEAL::4444 2
-DEAL::4445 2
-DEAL::4446 2
-DEAL::4447 2
-DEAL::4448 2
-DEAL::4449 2
-DEAL::4450 2
-DEAL::4451 2
-DEAL::4452 2
+DEAL::4317 3
+DEAL::4318 2
+DEAL::4319 2
+DEAL::4320 3
+DEAL::4321 3
+DEAL::4322 3
+DEAL::4323 3
+DEAL::4324 3
+DEAL::4325 3
+DEAL::4326 3
+DEAL::4327 3
+DEAL::4328 3
+DEAL::4329 3
+DEAL::4330 2
+DEAL::4331 2
+DEAL::4332 2
+DEAL::4333 2
+DEAL::4334 2
+DEAL::4335 2
+DEAL::4336 2
+DEAL::4337 2
+DEAL::4338 2
+DEAL::4339 2
+DEAL::4340 4
+DEAL::4341 2
+DEAL::4342 4
+DEAL::4343 2
+DEAL::4344 2
+DEAL::4345 2
+DEAL::4346 4
+DEAL::4347 4
+DEAL::4348 4
+DEAL::4349 4
+DEAL::4350 4
+DEAL::4351 2
+DEAL::4352 4
+DEAL::4353 2
+DEAL::4354 2
+DEAL::4355 4
+DEAL::4356 4
+DEAL::4357 2
+DEAL::4358 2
+DEAL::4359 2
+DEAL::4360 2
+DEAL::4361 2
+DEAL::4362 2
+DEAL::4363 2
+DEAL::4364 2
+DEAL::4365 2
+DEAL::4366 2
+DEAL::4367 2
+DEAL::4368 2
+DEAL::4369 2
+DEAL::4370 2
+DEAL::4371 2
+DEAL::4372 2
+DEAL::4373 2
+DEAL::4374 2
+DEAL::4375 2
+DEAL::4376 0
+DEAL::4377 0
+DEAL::4378 0
+DEAL::4379 0
+DEAL::4380 0
+DEAL::4381 0
+DEAL::4382 0
+DEAL::4383 0
+DEAL::4384 0
+DEAL::4385 0
+DEAL::4386 0
+DEAL::4387 0
+DEAL::4388 0
+DEAL::4389 0
+DEAL::4390 0
+DEAL::4391 0
+DEAL::4392 0
+DEAL::4393 0
+DEAL::4394 0
+DEAL::4395 0
+DEAL::4396 0
+DEAL::4397 0
+DEAL::4398 0
+DEAL::4399 0
+DEAL::4400 0
+DEAL::4401 0
+DEAL::4402 0
+DEAL::4403 0
+DEAL::4404 0
+DEAL::4405 0
+DEAL::4406 0
+DEAL::4407 0
+DEAL::4408 0
+DEAL::4409 0
+DEAL::4410 0
+DEAL::4411 0
+DEAL::4412 0
+DEAL::4413 0
+DEAL::4414 0
+DEAL::4415 0
+DEAL::4416 0
+DEAL::4417 0
+DEAL::4418 0
+DEAL::4419 0
+DEAL::4420 0
+DEAL::4421 0
+DEAL::4422 0
+DEAL::4423 0
+DEAL::4424 0
+DEAL::4425 0
+DEAL::4426 0
+DEAL::4427 0
+DEAL::4428 0
+DEAL::4429 0
+DEAL::4430 0
+DEAL::4431 0
+DEAL::4432 0
+DEAL::4433 0
+DEAL::4434 0
+DEAL::4435 0
+DEAL::4436 0
+DEAL::4437 0
+DEAL::4438 0
+DEAL::4439 0
+DEAL::4440 0
+DEAL::4441 0
+DEAL::4442 0
+DEAL::4443 0
+DEAL::4444 0
+DEAL::4445 0
+DEAL::4446 0
+DEAL::4447 0
+DEAL::4448 0
+DEAL::4449 0
+DEAL::4450 0
+DEAL::4451 0
+DEAL::4452 0
DEAL::4453 4
-DEAL::4454 1
+DEAL::4454 4
DEAL::4455 4
-DEAL::4456 1
-DEAL::4457 1
-DEAL::4458 1
-DEAL::4459 1
-DEAL::4460 1
+DEAL::4456 4
+DEAL::4457 4
+DEAL::4458 4
+DEAL::4459 4
+DEAL::4460 4
DEAL::4461 4
DEAL::4462 4
DEAL::4463 4
DEAL::4464 4
DEAL::4465 4
DEAL::4466 4
-DEAL::4467 1
+DEAL::4467 4
DEAL::4468 4
-DEAL::4469 1
-DEAL::4470 1
+DEAL::4469 4
+DEAL::4470 4
DEAL::4471 4
DEAL::4472 4
DEAL::4473 4
-DEAL::4474 3
-DEAL::4475 3
-DEAL::4476 3
-DEAL::4477 3
-DEAL::4478 3
-DEAL::4479 3
-DEAL::4480 3
-DEAL::4481 3
-DEAL::4482 3
-DEAL::4483 3
-DEAL::4484 3
-DEAL::4485 3
-DEAL::4486 3
-DEAL::4487 3
-DEAL::4488 3
-DEAL::4489 3
-DEAL::4490 3
-DEAL::4491 3
-DEAL::4492 3
-DEAL::4493 3
-DEAL::4494 3
-DEAL::4495 0
-DEAL::4496 0
-DEAL::4497 0
-DEAL::4498 0
-DEAL::4499 0
-DEAL::4500 0
-DEAL::4501 0
-DEAL::4502 0
-DEAL::4503 0
-DEAL::4504 0
-DEAL::4505 0
-DEAL::4506 0
-DEAL::4507 0
-DEAL::4508 0
-DEAL::4509 0
-DEAL::4510 0
-DEAL::4511 0
-DEAL::4512 0
-DEAL::4513 0
-DEAL::4514 0
-DEAL::4515 0
-DEAL::4516 3
-DEAL::4517 3
-DEAL::4518 3
-DEAL::4519 3
-DEAL::4520 3
-DEAL::4521 3
-DEAL::4522 3
-DEAL::4523 3
-DEAL::4524 3
-DEAL::4525 3
-DEAL::4526 3
-DEAL::4527 3
-DEAL::4528 3
-DEAL::4529 3
-DEAL::4530 3
-DEAL::4531 3
-DEAL::4532 3
-DEAL::4533 3
-DEAL::4534 3
-DEAL::4535 3
-DEAL::4536 3
-DEAL::4537 2
-DEAL::4538 2
-DEAL::4539 2
-DEAL::4540 2
-DEAL::4541 2
-DEAL::4542 2
-DEAL::4543 2
-DEAL::4544 2
-DEAL::4545 2
-DEAL::4546 2
-DEAL::4547 2
-DEAL::4548 2
-DEAL::4549 2
-DEAL::4550 2
-DEAL::4551 2
-DEAL::4552 2
-DEAL::4553 2
-DEAL::4554 2
-DEAL::4555 2
-DEAL::4556 2
-DEAL::4557 2
-DEAL::4558 0
-DEAL::4559 0
-DEAL::4560 0
-DEAL::4561 0
-DEAL::4562 0
-DEAL::4563 0
-DEAL::4564 0
-DEAL::4565 0
-DEAL::4566 0
-DEAL::4567 0
-DEAL::4568 0
-DEAL::4569 0
-DEAL::4570 0
-DEAL::4571 0
-DEAL::4572 0
-DEAL::4573 0
-DEAL::4574 0
-DEAL::4575 0
-DEAL::4576 0
-DEAL::4577 0
-DEAL::4578 0
+DEAL::4474 1
+DEAL::4475 1
+DEAL::4476 1
+DEAL::4477 1
+DEAL::4478 1
+DEAL::4479 1
+DEAL::4480 1
+DEAL::4481 1
+DEAL::4482 1
+DEAL::4483 1
+DEAL::4484 1
+DEAL::4485 1
+DEAL::4486 1
+DEAL::4487 1
+DEAL::4488 1
+DEAL::4489 1
+DEAL::4490 1
+DEAL::4491 1
+DEAL::4492 1
+DEAL::4493 1
+DEAL::4494 1
+DEAL::4495 3
+DEAL::4496 3
+DEAL::4497 3
+DEAL::4498 3
+DEAL::4499 3
+DEAL::4500 3
+DEAL::4501 3
+DEAL::4502 3
+DEAL::4503 3
+DEAL::4504 3
+DEAL::4505 3
+DEAL::4506 3
+DEAL::4507 3
+DEAL::4508 3
+DEAL::4509 3
+DEAL::4510 3
+DEAL::4511 3
+DEAL::4512 3
+DEAL::4513 3
+DEAL::4514 3
+DEAL::4515 3
+DEAL::4516 1
+DEAL::4517 1
+DEAL::4518 1
+DEAL::4519 1
+DEAL::4520 1
+DEAL::4521 1
+DEAL::4522 1
+DEAL::4523 1
+DEAL::4524 1
+DEAL::4525 1
+DEAL::4526 1
+DEAL::4527 1
+DEAL::4528 1
+DEAL::4529 1
+DEAL::4530 1
+DEAL::4531 1
+DEAL::4532 1
+DEAL::4533 1
+DEAL::4534 1
+DEAL::4535 1
+DEAL::4536 1
+DEAL::4537 0
+DEAL::4538 0
+DEAL::4539 0
+DEAL::4540 0
+DEAL::4541 0
+DEAL::4542 0
+DEAL::4543 0
+DEAL::4544 0
+DEAL::4545 0
+DEAL::4546 0
+DEAL::4547 0
+DEAL::4548 0
+DEAL::4549 0
+DEAL::4550 0
+DEAL::4551 0
+DEAL::4552 0
+DEAL::4553 0
+DEAL::4554 0
+DEAL::4555 0
+DEAL::4556 0
+DEAL::4557 0
+DEAL::4558 3
+DEAL::4559 3
+DEAL::4560 3
+DEAL::4561 3
+DEAL::4562 3
+DEAL::4563 3
+DEAL::4564 3
+DEAL::4565 3
+DEAL::4566 3
+DEAL::4567 3
+DEAL::4568 3
+DEAL::4569 3
+DEAL::4570 3
+DEAL::4571 3
+DEAL::4572 3
+DEAL::4573 3
+DEAL::4574 3
+DEAL::4575 3
+DEAL::4576 3
+DEAL::4577 3
+DEAL::4578 3
DEAL::4579 4
DEAL::4580 4
DEAL::4581 4
DEAL::4594 4
DEAL::4595 4
DEAL::4596 4
-DEAL::4597 2
-DEAL::4598 2
-DEAL::4599 2
-DEAL::4600 2
-DEAL::4601 2
-DEAL::4602 2
-DEAL::4603 2
-DEAL::4604 2
-DEAL::4605 2
-DEAL::4606 2
-DEAL::4607 2
-DEAL::4608 2
-DEAL::4609 2
-DEAL::4610 2
-DEAL::4611 2
-DEAL::4612 2
-DEAL::4613 2
-DEAL::4614 2
-DEAL::4615 0
-DEAL::4616 0
-DEAL::4617 0
-DEAL::4618 0
-DEAL::4619 0
-DEAL::4620 0
-DEAL::4621 0
-DEAL::4622 0
-DEAL::4623 0
-DEAL::4624 0
-DEAL::4625 0
-DEAL::4626 0
-DEAL::4627 0
-DEAL::4628 0
-DEAL::4629 0
-DEAL::4630 0
-DEAL::4631 0
-DEAL::4632 0
-DEAL::4633 0
-DEAL::4634 0
-DEAL::4635 0
-DEAL::4636 1
-DEAL::4637 1
-DEAL::4638 1
-DEAL::4639 1
-DEAL::4640 1
-DEAL::4641 1
-DEAL::4642 1
-DEAL::4643 1
-DEAL::4644 1
-DEAL::4645 1
-DEAL::4646 1
-DEAL::4647 1
-DEAL::4648 1
-DEAL::4649 1
-DEAL::4650 1
-DEAL::4651 1
-DEAL::4652 1
-DEAL::4653 1
-DEAL::4654 1
-DEAL::4655 1
-DEAL::4656 1
-DEAL::4657 3
-DEAL::4658 3
-DEAL::4659 3
-DEAL::4660 3
-DEAL::4661 3
-DEAL::4662 3
-DEAL::4663 3
-DEAL::4664 3
-DEAL::4665 3
-DEAL::4666 3
-DEAL::4667 3
-DEAL::4668 3
-DEAL::4669 3
-DEAL::4670 3
-DEAL::4671 3
-DEAL::4672 3
-DEAL::4673 3
-DEAL::4674 3
-DEAL::4675 3
-DEAL::4676 3
-DEAL::4677 3
-DEAL::4678 1
-DEAL::4679 1
-DEAL::4680 1
-DEAL::4681 1
-DEAL::4682 1
-DEAL::4683 1
-DEAL::4684 1
-DEAL::4685 1
-DEAL::4686 1
-DEAL::4687 1
-DEAL::4688 1
-DEAL::4689 1
-DEAL::4690 1
-DEAL::4691 1
-DEAL::4692 1
-DEAL::4693 1
-DEAL::4694 1
-DEAL::4695 1
-DEAL::4696 1
-DEAL::4697 1
-DEAL::4698 1
-DEAL::4699 1
-DEAL::4700 4
-DEAL::4701 4
-DEAL::4702 1
-DEAL::4703 1
-DEAL::4704 1
-DEAL::4705 1
-DEAL::4706 1
-DEAL::4707 1
-DEAL::4708 1
-DEAL::4709 1
-DEAL::4710 1
-DEAL::4711 1
-DEAL::4712 4
-DEAL::4713 4
-DEAL::4714 4
-DEAL::4715 4
-DEAL::4716 4
-DEAL::4717 4
-DEAL::4718 4
-DEAL::4719 4
-DEAL::4720 2
-DEAL::4721 2
-DEAL::4722 2
-DEAL::4723 2
-DEAL::4724 2
-DEAL::4725 2
-DEAL::4726 2
-DEAL::4727 2
-DEAL::4728 2
-DEAL::4729 2
-DEAL::4730 2
-DEAL::4731 2
-DEAL::4732 2
-DEAL::4733 2
-DEAL::4734 2
-DEAL::4735 2
-DEAL::4736 2
-DEAL::4737 2
-DEAL::4738 0
-DEAL::4739 0
-DEAL::4740 0
-DEAL::4741 0
-DEAL::4742 1
-DEAL::4743 0
-DEAL::4744 0
-DEAL::4745 0
-DEAL::4746 1
-DEAL::4747 1
-DEAL::4748 1
-DEAL::4749 1
-DEAL::4750 1
-DEAL::4751 0
-DEAL::4752 0
-DEAL::4753 0
-DEAL::4754 0
-DEAL::4755 0
-DEAL::4756 1
-DEAL::4757 1
-DEAL::4758 1
-DEAL::4759 0
-DEAL::4760 0
-DEAL::4761 0
-DEAL::4762 0
-DEAL::4763 0
-DEAL::4764 0
-DEAL::4765 0
-DEAL::4766 0
-DEAL::4767 0
-DEAL::4768 0
-DEAL::4769 0
-DEAL::4770 0
-DEAL::4771 0
-DEAL::4772 0
-DEAL::4773 0
-DEAL::4774 0
-DEAL::4775 0
-DEAL::4776 0
-DEAL::4777 0
-DEAL::4778 1
-DEAL::4779 1
-DEAL::4780 1
-DEAL::4781 1
-DEAL::4782 1
-DEAL::4783 1
-DEAL::4784 1
-DEAL::4785 1
-DEAL::4786 1
-DEAL::4787 1
-DEAL::4788 1
-DEAL::4789 1
-DEAL::4790 1
-DEAL::4791 1
-DEAL::4792 1
-DEAL::4793 1
-DEAL::4794 1
-DEAL::4795 1
-DEAL::4796 1
-DEAL::4797 1
-DEAL::4798 1
-DEAL::4799 1
-DEAL::4800 1
-DEAL::4801 1
-DEAL::4802 1
-DEAL::4803 1
-DEAL::4804 1
-DEAL::4805 1
-DEAL::4806 1
-DEAL::4807 1
-DEAL::4808 1
-DEAL::4809 1
-DEAL::4810 1
-DEAL::4811 1
-DEAL::4812 1
-DEAL::4813 1
-DEAL::4814 1
-DEAL::4815 1
-DEAL::4816 1
-DEAL::4817 1
-DEAL::4818 1
-DEAL::4819 1
-DEAL::4820 2
-DEAL::4821 2
-DEAL::4822 2
-DEAL::4823 2
-DEAL::4824 2
-DEAL::4825 2
-DEAL::4826 2
-DEAL::4827 2
-DEAL::4828 2
-DEAL::4829 2
-DEAL::4830 2
-DEAL::4831 2
-DEAL::4832 2
-DEAL::4833 2
-DEAL::4834 2
-DEAL::4835 2
-DEAL::4836 2
-DEAL::4837 2
-DEAL::4838 2
-DEAL::4839 2
-DEAL::4840 2
-DEAL::4841 2
-DEAL::4842 2
-DEAL::4843 2
-DEAL::4844 2
-DEAL::4845 2
-DEAL::4846 2
-DEAL::4847 2
-DEAL::4848 2
-DEAL::4849 2
-DEAL::4850 2
-DEAL::4851 2
-DEAL::4852 2
-DEAL::4853 2
-DEAL::4854 2
-DEAL::4855 2
-DEAL::4856 2
-DEAL::4857 2
-DEAL::4858 2
-DEAL::4859 0
-DEAL::4860 0
-DEAL::4861 0
-DEAL::4862 0
-DEAL::4863 0
-DEAL::4864 0
-DEAL::4865 0
-DEAL::4866 0
-DEAL::4867 0
-DEAL::4868 0
-DEAL::4869 0
-DEAL::4870 0
-DEAL::4871 0
-DEAL::4872 0
-DEAL::4873 0
-DEAL::4874 0
-DEAL::4875 0
-DEAL::4876 0
-DEAL::4877 1
-DEAL::4878 1
-DEAL::4879 1
-DEAL::4880 1
-DEAL::4881 1
-DEAL::4882 1
-DEAL::4883 1
-DEAL::4884 1
-DEAL::4885 1
-DEAL::4886 1
-DEAL::4887 1
-DEAL::4888 1
-DEAL::4889 1
-DEAL::4890 1
-DEAL::4891 1
-DEAL::4892 1
-DEAL::4893 1
-DEAL::4894 1
-DEAL::4895 1
-DEAL::4896 1
-DEAL::4897 1
+DEAL::4597 0
+DEAL::4598 0
+DEAL::4599 0
+DEAL::4600 0
+DEAL::4601 0
+DEAL::4602 0
+DEAL::4603 0
+DEAL::4604 0
+DEAL::4605 0
+DEAL::4606 0
+DEAL::4607 0
+DEAL::4608 0
+DEAL::4609 0
+DEAL::4610 0
+DEAL::4611 0
+DEAL::4612 0
+DEAL::4613 0
+DEAL::4614 0
+DEAL::4615 3
+DEAL::4616 3
+DEAL::4617 3
+DEAL::4618 3
+DEAL::4619 3
+DEAL::4620 3
+DEAL::4621 3
+DEAL::4622 3
+DEAL::4623 3
+DEAL::4624 3
+DEAL::4625 3
+DEAL::4626 3
+DEAL::4627 3
+DEAL::4628 3
+DEAL::4629 3
+DEAL::4630 3
+DEAL::4631 3
+DEAL::4632 3
+DEAL::4633 3
+DEAL::4634 3
+DEAL::4635 3
+DEAL::4636 4
+DEAL::4637 4
+DEAL::4638 4
+DEAL::4639 4
+DEAL::4640 4
+DEAL::4641 4
+DEAL::4642 4
+DEAL::4643 4
+DEAL::4644 4
+DEAL::4645 4
+DEAL::4646 4
+DEAL::4647 4
+DEAL::4648 4
+DEAL::4649 4
+DEAL::4650 4
+DEAL::4651 4
+DEAL::4652 4
+DEAL::4653 4
+DEAL::4654 4
+DEAL::4655 4
+DEAL::4656 4
+DEAL::4657 4
+DEAL::4658 0
+DEAL::4659 0
+DEAL::4660 4
+DEAL::4661 4
+DEAL::4662 4
+DEAL::4663 4
+DEAL::4664 4
+DEAL::4665 4
+DEAL::4666 4
+DEAL::4667 4
+DEAL::4668 4
+DEAL::4669 4
+DEAL::4670 0
+DEAL::4671 0
+DEAL::4672 0
+DEAL::4673 0
+DEAL::4674 0
+DEAL::4675 0
+DEAL::4676 0
+DEAL::4677 0
+DEAL::4678 4
+DEAL::4679 4
+DEAL::4680 4
+DEAL::4681 4
+DEAL::4682 4
+DEAL::4683 4
+DEAL::4684 4
+DEAL::4685 4
+DEAL::4686 4
+DEAL::4687 4
+DEAL::4688 4
+DEAL::4689 4
+DEAL::4690 4
+DEAL::4691 4
+DEAL::4692 4
+DEAL::4693 4
+DEAL::4694 4
+DEAL::4695 4
+DEAL::4696 4
+DEAL::4697 4
+DEAL::4698 4
+DEAL::4699 2
+DEAL::4700 2
+DEAL::4701 2
+DEAL::4702 2
+DEAL::4703 2
+DEAL::4704 2
+DEAL::4705 2
+DEAL::4706 2
+DEAL::4707 2
+DEAL::4708 2
+DEAL::4709 2
+DEAL::4710 2
+DEAL::4711 2
+DEAL::4712 2
+DEAL::4713 2
+DEAL::4714 2
+DEAL::4715 2
+DEAL::4716 2
+DEAL::4717 2
+DEAL::4718 2
+DEAL::4719 2
+DEAL::4720 0
+DEAL::4721 0
+DEAL::4722 0
+DEAL::4723 0
+DEAL::4724 0
+DEAL::4725 0
+DEAL::4726 0
+DEAL::4727 0
+DEAL::4728 0
+DEAL::4729 0
+DEAL::4730 0
+DEAL::4731 0
+DEAL::4732 0
+DEAL::4733 0
+DEAL::4734 0
+DEAL::4735 0
+DEAL::4736 0
+DEAL::4737 0
+DEAL::4738 3
+DEAL::4739 3
+DEAL::4740 2
+DEAL::4741 3
+DEAL::4742 3
+DEAL::4743 3
+DEAL::4744 2
+DEAL::4745 3
+DEAL::4746 2
+DEAL::4747 3
+DEAL::4748 3
+DEAL::4749 2
+DEAL::4750 3
+DEAL::4751 2
+DEAL::4752 2
+DEAL::4753 2
+DEAL::4754 2
+DEAL::4755 2
+DEAL::4756 2
+DEAL::4757 2
+DEAL::4758 2
+DEAL::4759 3
+DEAL::4760 3
+DEAL::4761 3
+DEAL::4762 3
+DEAL::4763 3
+DEAL::4764 3
+DEAL::4765 3
+DEAL::4766 3
+DEAL::4767 3
+DEAL::4768 3
+DEAL::4769 3
+DEAL::4770 3
+DEAL::4771 3
+DEAL::4772 3
+DEAL::4773 3
+DEAL::4774 3
+DEAL::4775 3
+DEAL::4776 3
+DEAL::4777 3
+DEAL::4778 3
+DEAL::4779 3
+DEAL::4780 3
+DEAL::4781 3
+DEAL::4782 3
+DEAL::4783 3
+DEAL::4784 3
+DEAL::4785 3
+DEAL::4786 3
+DEAL::4787 3
+DEAL::4788 3
+DEAL::4789 3
+DEAL::4790 3
+DEAL::4791 3
+DEAL::4792 3
+DEAL::4793 3
+DEAL::4794 3
+DEAL::4795 3
+DEAL::4796 3
+DEAL::4797 3
+DEAL::4798 3
+DEAL::4799 2
+DEAL::4800 2
+DEAL::4801 2
+DEAL::4802 2
+DEAL::4803 2
+DEAL::4804 2
+DEAL::4805 2
+DEAL::4806 2
+DEAL::4807 2
+DEAL::4808 2
+DEAL::4809 2
+DEAL::4810 2
+DEAL::4811 2
+DEAL::4812 2
+DEAL::4813 2
+DEAL::4814 2
+DEAL::4815 2
+DEAL::4816 2
+DEAL::4817 2
+DEAL::4818 2
+DEAL::4819 2
+DEAL::4820 0
+DEAL::4821 0
+DEAL::4822 0
+DEAL::4823 0
+DEAL::4824 0
+DEAL::4825 0
+DEAL::4826 0
+DEAL::4827 0
+DEAL::4828 0
+DEAL::4829 0
+DEAL::4830 0
+DEAL::4831 0
+DEAL::4832 0
+DEAL::4833 0
+DEAL::4834 0
+DEAL::4835 0
+DEAL::4836 0
+DEAL::4837 0
+DEAL::4838 0
+DEAL::4839 0
+DEAL::4840 0
+DEAL::4841 0
+DEAL::4842 0
+DEAL::4843 0
+DEAL::4844 0
+DEAL::4845 0
+DEAL::4846 0
+DEAL::4847 0
+DEAL::4848 0
+DEAL::4849 0
+DEAL::4850 0
+DEAL::4851 0
+DEAL::4852 0
+DEAL::4853 0
+DEAL::4854 0
+DEAL::4855 0
+DEAL::4856 0
+DEAL::4857 0
+DEAL::4858 0
+DEAL::4859 3
+DEAL::4860 3
+DEAL::4861 3
+DEAL::4862 3
+DEAL::4863 3
+DEAL::4864 3
+DEAL::4865 3
+DEAL::4866 3
+DEAL::4867 3
+DEAL::4868 3
+DEAL::4869 3
+DEAL::4870 3
+DEAL::4871 3
+DEAL::4872 3
+DEAL::4873 3
+DEAL::4874 3
+DEAL::4875 3
+DEAL::4876 3
+DEAL::4877 4
+DEAL::4878 4
+DEAL::4879 4
+DEAL::4880 4
+DEAL::4881 4
+DEAL::4882 4
+DEAL::4883 4
+DEAL::4884 4
+DEAL::4885 4
+DEAL::4886 4
+DEAL::4887 4
+DEAL::4888 4
+DEAL::4889 4
+DEAL::4890 4
+DEAL::4891 4
+DEAL::4892 4
+DEAL::4893 4
+DEAL::4894 4
+DEAL::4895 4
+DEAL::4896 4
+DEAL::4897 4
DEAL::4898 4
DEAL::4899 4
DEAL::4900 4
DEAL::4917 4
DEAL::4918 4
DEAL::4919 4
-DEAL::4920 4
-DEAL::4921 4
+DEAL::4920 1
+DEAL::4921 1
DEAL::4922 4
DEAL::4923 4
DEAL::4924 4
DEAL::4929 4
DEAL::4930 4
DEAL::4931 4
-DEAL::4932 4
-DEAL::4933 4
-DEAL::4934 4
-DEAL::4935 4
-DEAL::4936 4
-DEAL::4937 4
-DEAL::4938 4
-DEAL::4939 4
-DEAL::4940 1
-DEAL::4941 1
-DEAL::4942 1
-DEAL::4943 1
-DEAL::4944 1
-DEAL::4945 1
-DEAL::4946 1
-DEAL::4947 1
-DEAL::4948 1
-DEAL::4949 1
-DEAL::4950 1
-DEAL::4951 1
-DEAL::4952 1
-DEAL::4953 1
-DEAL::4954 1
-DEAL::4955 1
-DEAL::4956 1
-DEAL::4957 1
-DEAL::4958 1
-DEAL::4959 1
-DEAL::4960 1
-DEAL::4961 4
-DEAL::4962 4
-DEAL::4963 4
-DEAL::4964 4
-DEAL::4965 4
-DEAL::4966 4
-DEAL::4967 4
-DEAL::4968 4
-DEAL::4969 4
-DEAL::4970 4
-DEAL::4971 4
-DEAL::4972 4
-DEAL::4973 4
-DEAL::4974 4
-DEAL::4975 4
-DEAL::4976 4
-DEAL::4977 4
-DEAL::4978 4
-DEAL::4979 4
-DEAL::4980 4
-DEAL::4981 4
-DEAL::4982 4
-DEAL::4983 4
-DEAL::4984 4
-DEAL::4985 4
-DEAL::4986 4
-DEAL::4987 4
-DEAL::4988 4
-DEAL::4989 4
-DEAL::4990 4
-DEAL::4991 4
-DEAL::4992 4
-DEAL::4993 4
-DEAL::4994 4
-DEAL::4995 4
-DEAL::4996 4
-DEAL::4997 4
-DEAL::4998 4
-DEAL::4999 4
-DEAL::5000 4
-DEAL::5001 4
-DEAL::5002 4
-DEAL::5003 1
-DEAL::5004 1
-DEAL::5005 1
-DEAL::5006 1
-DEAL::5007 1
-DEAL::5008 1
-DEAL::5009 1
-DEAL::5010 1
-DEAL::5011 1
-DEAL::5012 1
-DEAL::5013 1
-DEAL::5014 1
-DEAL::5015 1
-DEAL::5016 1
-DEAL::5017 1
-DEAL::5018 1
-DEAL::5019 1
-DEAL::5020 1
-DEAL::5021 1
-DEAL::5022 1
-DEAL::5023 1
-DEAL::5024 1
-DEAL::5025 1
-DEAL::5026 1
-DEAL::5027 1
-DEAL::5028 1
-DEAL::5029 1
-DEAL::5030 1
-DEAL::5031 1
-DEAL::5032 1
-DEAL::5033 1
-DEAL::5034 1
-DEAL::5035 1
-DEAL::5036 1
-DEAL::5037 1
-DEAL::5038 1
-DEAL::5039 1
-DEAL::5040 1
-DEAL::5041 1
-DEAL::5042 1
-DEAL::5043 1
-DEAL::5044 1
-DEAL::5045 1
-DEAL::5046 1
-DEAL::5047 1
-DEAL::5048 1
-DEAL::5049 1
-DEAL::5050 1
-DEAL::5051 1
-DEAL::5052 1
-DEAL::5053 1
-DEAL::5054 1
-DEAL::5055 1
-DEAL::5056 1
-DEAL::5057 1
-DEAL::5058 1
-DEAL::5059 1
-DEAL::5060 1
-DEAL::5061 1
-DEAL::5062 1
-DEAL::5063 1
-DEAL::5064 1
-DEAL::5065 1
-DEAL::5066 1
-DEAL::5067 1
-DEAL::5068 1
-DEAL::5069 1
-DEAL::5070 1
-DEAL::5071 1
-DEAL::5072 1
-DEAL::5073 1
-DEAL::5074 1
-DEAL::5075 1
-DEAL::5076 1
-DEAL::5077 1
-DEAL::5078 1
-DEAL::5079 1
-DEAL::5080 1
-DEAL::5081 1
-DEAL::5082 1
-DEAL::5083 1
-DEAL::5084 1
+DEAL::4932 1
+DEAL::4933 1
+DEAL::4934 1
+DEAL::4935 1
+DEAL::4936 1
+DEAL::4937 1
+DEAL::4938 1
+DEAL::4939 1
+DEAL::4940 2
+DEAL::4941 2
+DEAL::4942 2
+DEAL::4943 2
+DEAL::4944 2
+DEAL::4945 2
+DEAL::4946 2
+DEAL::4947 2
+DEAL::4948 2
+DEAL::4949 2
+DEAL::4950 2
+DEAL::4951 2
+DEAL::4952 2
+DEAL::4953 2
+DEAL::4954 2
+DEAL::4955 2
+DEAL::4956 2
+DEAL::4957 2
+DEAL::4958 2
+DEAL::4959 2
+DEAL::4960 2
+DEAL::4961 1
+DEAL::4962 1
+DEAL::4963 1
+DEAL::4964 1
+DEAL::4965 1
+DEAL::4966 1
+DEAL::4967 1
+DEAL::4968 1
+DEAL::4969 1
+DEAL::4970 1
+DEAL::4971 1
+DEAL::4972 1
+DEAL::4973 1
+DEAL::4974 1
+DEAL::4975 1
+DEAL::4976 1
+DEAL::4977 1
+DEAL::4978 1
+DEAL::4979 1
+DEAL::4980 1
+DEAL::4981 1
+DEAL::4982 1
+DEAL::4983 1
+DEAL::4984 1
+DEAL::4985 1
+DEAL::4986 1
+DEAL::4987 1
+DEAL::4988 1
+DEAL::4989 1
+DEAL::4990 1
+DEAL::4991 1
+DEAL::4992 1
+DEAL::4993 1
+DEAL::4994 1
+DEAL::4995 1
+DEAL::4996 1
+DEAL::4997 1
+DEAL::4998 1
+DEAL::4999 1
+DEAL::5000 1
+DEAL::5001 1
+DEAL::5002 1
+DEAL::5003 2
+DEAL::5004 2
+DEAL::5005 2
+DEAL::5006 2
+DEAL::5007 2
+DEAL::5008 2
+DEAL::5009 2
+DEAL::5010 2
+DEAL::5011 2
+DEAL::5012 2
+DEAL::5013 2
+DEAL::5014 2
+DEAL::5015 2
+DEAL::5016 2
+DEAL::5017 2
+DEAL::5018 2
+DEAL::5019 2
+DEAL::5020 2
+DEAL::5021 2
+DEAL::5022 2
+DEAL::5023 2
+DEAL::5024 2
+DEAL::5025 2
+DEAL::5026 2
+DEAL::5027 2
+DEAL::5028 2
+DEAL::5029 2
+DEAL::5030 2
+DEAL::5031 2
+DEAL::5032 2
+DEAL::5033 2
+DEAL::5034 2
+DEAL::5035 2
+DEAL::5036 2
+DEAL::5037 2
+DEAL::5038 2
+DEAL::5039 2
+DEAL::5040 2
+DEAL::5041 2
+DEAL::5042 2
+DEAL::5043 4
+DEAL::5044 4
+DEAL::5045 4
+DEAL::5046 4
+DEAL::5047 4
+DEAL::5048 4
+DEAL::5049 4
+DEAL::5050 4
+DEAL::5051 4
+DEAL::5052 4
+DEAL::5053 4
+DEAL::5054 4
+DEAL::5055 4
+DEAL::5056 4
+DEAL::5057 4
+DEAL::5058 4
+DEAL::5059 4
+DEAL::5060 4
+DEAL::5061 4
+DEAL::5062 4
+DEAL::5063 4
+DEAL::5064 2
+DEAL::5065 2
+DEAL::5066 2
+DEAL::5067 2
+DEAL::5068 2
+DEAL::5069 2
+DEAL::5070 2
+DEAL::5071 2
+DEAL::5072 2
+DEAL::5073 2
+DEAL::5074 2
+DEAL::5075 2
+DEAL::5076 2
+DEAL::5077 2
+DEAL::5078 2
+DEAL::5079 2
+DEAL::5080 2
+DEAL::5081 2
+DEAL::5082 2
+DEAL::5083 2
+DEAL::5084 2
DEAL::5085 2
DEAL::5086 2
DEAL::5087 2
DEAL::5103 2
DEAL::5104 2
DEAL::5105 2
-DEAL::5106 4
-DEAL::5107 4
-DEAL::5108 4
-DEAL::5109 4
-DEAL::5110 4
-DEAL::5111 4
-DEAL::5112 4
-DEAL::5113 4
-DEAL::5114 4
-DEAL::5115 4
-DEAL::5116 4
-DEAL::5117 4
-DEAL::5118 4
-DEAL::5119 4
-DEAL::5120 4
-DEAL::5121 4
-DEAL::5122 4
-DEAL::5123 4
-DEAL::5124 4
-DEAL::5125 4
-DEAL::5126 4
+DEAL::5106 2
+DEAL::5107 2
+DEAL::5108 2
+DEAL::5109 2
+DEAL::5110 2
+DEAL::5111 2
+DEAL::5112 2
+DEAL::5113 2
+DEAL::5114 2
+DEAL::5115 2
+DEAL::5116 2
+DEAL::5117 2
+DEAL::5118 2
+DEAL::5119 2
+DEAL::5120 2
+DEAL::5121 2
+DEAL::5122 2
+DEAL::5123 2
+DEAL::5124 2
+DEAL::5125 2
+DEAL::5126 2
DEAL::5127 2
DEAL::5128 2
DEAL::5129 2
DEAL::5164 2
DEAL::5165 2
DEAL::5166 2
-DEAL::5167 3
-DEAL::5168 3
-DEAL::5169 3
-DEAL::5170 3
-DEAL::5171 3
-DEAL::5172 3
-DEAL::5173 3
-DEAL::5174 3
-DEAL::5175 1
-DEAL::5176 1
+DEAL::5167 1
+DEAL::5168 1
+DEAL::5169 1
+DEAL::5170 1
+DEAL::5171 1
+DEAL::5172 1
+DEAL::5173 1
+DEAL::5174 1
+DEAL::5175 4
+DEAL::5176 4
DEAL::5177 4
-DEAL::5178 1
+DEAL::5178 4
DEAL::5179 4
-DEAL::5180 1
-DEAL::5181 1
-DEAL::5182 1
+DEAL::5180 4
+DEAL::5181 4
+DEAL::5182 4
DEAL::5183 4
DEAL::5184 4
-DEAL::5185 1
+DEAL::5185 4
DEAL::5186 4
DEAL::5187 4
-DEAL::5188 1
-DEAL::5189 1
-DEAL::5190 1
+DEAL::5188 4
+DEAL::5189 4
+DEAL::5190 4
DEAL::5191 4
-DEAL::5192 1
-DEAL::5193 3
-DEAL::5194 3
-DEAL::5195 3
-DEAL::5196 3
-DEAL::5197 3
-DEAL::5198 3
-DEAL::5199 3
-DEAL::5200 3
-DEAL::5201 3
-DEAL::5202 3
-DEAL::5203 3
-DEAL::5204 3
-DEAL::5205 3
-DEAL::5206 3
-DEAL::5207 3
-DEAL::5208 3
-DEAL::5209 3
-DEAL::5210 3
-DEAL::5211 3
-DEAL::5212 3
-DEAL::5213 3
-DEAL::5214 3
-DEAL::5215 3
-DEAL::5216 3
-DEAL::5217 3
-DEAL::5218 3
-DEAL::5219 3
-DEAL::5220 3
-DEAL::5221 3
-DEAL::5222 3
-DEAL::5223 3
-DEAL::5224 3
-DEAL::5225 3
-DEAL::5226 3
-DEAL::5227 3
-DEAL::5228 3
-DEAL::5229 3
-DEAL::5230 3
-DEAL::5231 3
-DEAL::5232 3
-DEAL::5233 3
-DEAL::5234 3
-DEAL::5235 3
-DEAL::5236 3
-DEAL::5237 3
-DEAL::5238 3
-DEAL::5239 3
-DEAL::5240 3
-DEAL::5241 3
-DEAL::5242 3
-DEAL::5243 3
-DEAL::5244 3
-DEAL::5245 3
-DEAL::5246 3
-DEAL::5247 3
-DEAL::5248 3
-DEAL::5249 3
-DEAL::5250 3
-DEAL::5251 3
-DEAL::5252 3
-DEAL::5253 3
-DEAL::5254 3
-DEAL::5255 3
-DEAL::5256 3
-DEAL::5257 3
-DEAL::5258 3
-DEAL::5259 3
-DEAL::5260 3
-DEAL::5261 3
-DEAL::5262 3
-DEAL::5263 3
-DEAL::5264 3
-DEAL::5265 3
-DEAL::5266 3
-DEAL::5267 3
-DEAL::5268 3
-DEAL::5269 3
-DEAL::5270 3
-DEAL::5271 3
-DEAL::5272 0
-DEAL::5273 0
-DEAL::5274 0
-DEAL::5275 0
-DEAL::5276 0
-DEAL::5277 0
-DEAL::5278 0
-DEAL::5279 0
-DEAL::5280 0
-DEAL::5281 0
-DEAL::5282 0
-DEAL::5283 0
-DEAL::5284 0
-DEAL::5285 0
-DEAL::5286 0
-DEAL::5287 0
-DEAL::5288 0
-DEAL::5289 0
-DEAL::5290 3
-DEAL::5291 3
-DEAL::5292 3
-DEAL::5293 3
-DEAL::5294 3
-DEAL::5295 3
-DEAL::5296 3
-DEAL::5297 3
-DEAL::5298 3
-DEAL::5299 3
-DEAL::5300 3
-DEAL::5301 3
-DEAL::5302 3
-DEAL::5303 3
-DEAL::5304 3
-DEAL::5305 3
-DEAL::5306 3
-DEAL::5307 3
-DEAL::5308 3
-DEAL::5309 3
-DEAL::5310 3
-DEAL::5311 3
-DEAL::5312 3
-DEAL::5313 3
-DEAL::5314 3
-DEAL::5315 3
-DEAL::5316 3
-DEAL::5317 3
-DEAL::5318 3
-DEAL::5319 3
-DEAL::5320 3
-DEAL::5321 3
-DEAL::5322 3
-DEAL::5323 3
-DEAL::5324 3
-DEAL::5325 3
-DEAL::5326 3
-DEAL::5327 3
-DEAL::5328 1
-DEAL::5329 1
-DEAL::5330 1
-DEAL::5331 1
-DEAL::5332 1
-DEAL::5333 1
-DEAL::5334 1
-DEAL::5335 1
-DEAL::5336 1
-DEAL::5337 1
-DEAL::5338 1
-DEAL::5339 1
-DEAL::5340 1
-DEAL::5341 1
-DEAL::5342 1
-DEAL::5343 1
-DEAL::5344 1
-DEAL::5345 1
+DEAL::5192 4
+DEAL::5193 1
+DEAL::5194 1
+DEAL::5195 1
+DEAL::5196 1
+DEAL::5197 1
+DEAL::5198 1
+DEAL::5199 1
+DEAL::5200 1
+DEAL::5201 1
+DEAL::5202 1
+DEAL::5203 1
+DEAL::5204 1
+DEAL::5205 1
+DEAL::5206 1
+DEAL::5207 1
+DEAL::5208 1
+DEAL::5209 1
+DEAL::5210 1
+DEAL::5211 1
+DEAL::5212 1
+DEAL::5213 1
+DEAL::5214 1
+DEAL::5215 1
+DEAL::5216 1
+DEAL::5217 1
+DEAL::5218 1
+DEAL::5219 1
+DEAL::5220 1
+DEAL::5221 1
+DEAL::5222 1
+DEAL::5223 1
+DEAL::5224 1
+DEAL::5225 1
+DEAL::5226 1
+DEAL::5227 1
+DEAL::5228 1
+DEAL::5229 1
+DEAL::5230 1
+DEAL::5231 1
+DEAL::5232 1
+DEAL::5233 1
+DEAL::5234 1
+DEAL::5235 1
+DEAL::5236 1
+DEAL::5237 1
+DEAL::5238 1
+DEAL::5239 1
+DEAL::5240 1
+DEAL::5241 1
+DEAL::5242 1
+DEAL::5243 1
+DEAL::5244 1
+DEAL::5245 1
+DEAL::5246 1
+DEAL::5247 1
+DEAL::5248 1
+DEAL::5249 1
+DEAL::5250 1
+DEAL::5251 1
+DEAL::5252 1
+DEAL::5253 1
+DEAL::5254 1
+DEAL::5255 1
+DEAL::5256 1
+DEAL::5257 1
+DEAL::5258 1
+DEAL::5259 1
+DEAL::5260 1
+DEAL::5261 1
+DEAL::5262 1
+DEAL::5263 1
+DEAL::5264 1
+DEAL::5265 1
+DEAL::5266 1
+DEAL::5267 1
+DEAL::5268 1
+DEAL::5269 1
+DEAL::5270 1
+DEAL::5271 1
+DEAL::5272 3
+DEAL::5273 3
+DEAL::5274 3
+DEAL::5275 3
+DEAL::5276 3
+DEAL::5277 3
+DEAL::5278 3
+DEAL::5279 3
+DEAL::5280 3
+DEAL::5281 3
+DEAL::5282 3
+DEAL::5283 3
+DEAL::5284 3
+DEAL::5285 3
+DEAL::5286 3
+DEAL::5287 3
+DEAL::5288 3
+DEAL::5289 3
+DEAL::5290 1
+DEAL::5291 1
+DEAL::5292 1
+DEAL::5293 1
+DEAL::5294 1
+DEAL::5295 1
+DEAL::5296 1
+DEAL::5297 1
+DEAL::5298 1
+DEAL::5299 1
+DEAL::5300 1
+DEAL::5301 1
+DEAL::5302 1
+DEAL::5303 1
+DEAL::5304 1
+DEAL::5305 1
+DEAL::5306 1
+DEAL::5307 1
+DEAL::5308 1
+DEAL::5309 1
+DEAL::5310 1
+DEAL::5311 1
+DEAL::5312 1
+DEAL::5313 1
+DEAL::5314 1
+DEAL::5315 1
+DEAL::5316 1
+DEAL::5317 1
+DEAL::5318 1
+DEAL::5319 1
+DEAL::5320 1
+DEAL::5321 1
+DEAL::5322 1
+DEAL::5323 1
+DEAL::5324 1
+DEAL::5325 1
+DEAL::5326 1
+DEAL::5327 1
+DEAL::5328 4
+DEAL::5329 4
+DEAL::5330 4
+DEAL::5331 4
+DEAL::5332 4
+DEAL::5333 4
+DEAL::5334 4
+DEAL::5335 4
+DEAL::5336 4
+DEAL::5337 4
+DEAL::5338 4
+DEAL::5339 4
+DEAL::5340 4
+DEAL::5341 4
+DEAL::5342 4
+DEAL::5343 4
+DEAL::5344 4
+DEAL::5345 4
DEAL::5346 4
DEAL::5347 4
DEAL::5348 4
DEAL::5362 4
DEAL::5363 4
DEAL::5364 4
-DEAL::5365 0
-DEAL::5366 0
-DEAL::5367 0
-DEAL::5368 0
-DEAL::5369 0
-DEAL::5370 0
-DEAL::5371 0
-DEAL::5372 0
-DEAL::5373 0
-DEAL::5374 0
-DEAL::5375 0
-DEAL::5376 0
-DEAL::5377 0
-DEAL::5378 0
-DEAL::5379 0
-DEAL::5380 0
-DEAL::5381 0
-DEAL::5382 0
-DEAL::5383 0
-DEAL::5384 0
-DEAL::5385 0
-DEAL::5386 3
-DEAL::5387 3
-DEAL::5388 3
-DEAL::5389 3
-DEAL::5390 3
-DEAL::5391 3
-DEAL::5392 3
-DEAL::5393 3
-DEAL::5394 3
-DEAL::5395 3
-DEAL::5396 3
-DEAL::5397 3
-DEAL::5398 3
-DEAL::5399 3
-DEAL::5400 3
-DEAL::5401 3
-DEAL::5402 3
-DEAL::5403 3
-DEAL::5404 3
-DEAL::5405 3
-DEAL::5406 3
-DEAL::5407 3
-DEAL::5408 3
-DEAL::5409 3
-DEAL::5410 3
-DEAL::5411 3
-DEAL::5412 3
-DEAL::5413 3
-DEAL::5414 3
-DEAL::5415 3
-DEAL::5416 3
-DEAL::5417 3
-DEAL::5418 3
-DEAL::5419 3
-DEAL::5420 3
-DEAL::5421 3
-DEAL::5422 3
-DEAL::5423 3
-DEAL::5424 3
-DEAL::5425 3
-DEAL::5426 3
-DEAL::5427 3
-DEAL::5428 3
-DEAL::5429 3
-DEAL::5430 3
-DEAL::5431 3
-DEAL::5432 3
-DEAL::5433 3
-DEAL::5434 3
-DEAL::5435 3
-DEAL::5436 3
-DEAL::5437 3
-DEAL::5438 3
-DEAL::5439 3
-DEAL::5440 3
-DEAL::5441 3
-DEAL::5442 3
-DEAL::5443 3
-DEAL::5444 3
-DEAL::5445 3
-DEAL::5446 3
-DEAL::5447 3
-DEAL::5448 3
-DEAL::5449 3
-DEAL::5450 3
-DEAL::5451 3
-DEAL::5452 0
-DEAL::5453 0
-DEAL::5454 0
-DEAL::5455 0
-DEAL::5456 0
-DEAL::5457 0
-DEAL::5458 0
-DEAL::5459 0
-DEAL::5460 0
-DEAL::5461 0
-DEAL::5462 0
-DEAL::5463 0
-DEAL::5464 0
-DEAL::5465 0
-DEAL::5466 0
-DEAL::5467 0
-DEAL::5468 0
-DEAL::5469 0
-DEAL::5470 0
-DEAL::5471 0
-DEAL::5472 0
-DEAL::5473 0
-DEAL::5474 0
-DEAL::5475 0
-DEAL::5476 0
-DEAL::5477 0
-DEAL::5478 0
-DEAL::5479 0
-DEAL::5480 0
-DEAL::5481 0
-DEAL::5482 0
-DEAL::5483 0
-DEAL::5484 0
-DEAL::5485 0
-DEAL::5486 0
-DEAL::5487 0
-DEAL::5488 0
-DEAL::5489 0
-DEAL::5490 4
-DEAL::5491 4
-DEAL::5492 4
-DEAL::5493 4
-DEAL::5494 4
-DEAL::5495 4
-DEAL::5496 4
-DEAL::5497 4
-DEAL::5498 4
-DEAL::5499 4
-DEAL::5500 4
-DEAL::5501 4
-DEAL::5502 4
-DEAL::5503 4
-DEAL::5504 4
-DEAL::5505 4
-DEAL::5506 4
-DEAL::5507 4
-DEAL::5508 4
-DEAL::5509 4
-DEAL::5510 4
+DEAL::5365 3
+DEAL::5366 3
+DEAL::5367 3
+DEAL::5368 3
+DEAL::5369 3
+DEAL::5370 3
+DEAL::5371 3
+DEAL::5372 3
+DEAL::5373 3
+DEAL::5374 3
+DEAL::5375 3
+DEAL::5376 3
+DEAL::5377 3
+DEAL::5378 3
+DEAL::5379 3
+DEAL::5380 3
+DEAL::5381 3
+DEAL::5382 3
+DEAL::5383 3
+DEAL::5384 3
+DEAL::5385 3
+DEAL::5386 1
+DEAL::5387 1
+DEAL::5388 1
+DEAL::5389 1
+DEAL::5390 1
+DEAL::5391 1
+DEAL::5392 1
+DEAL::5393 1
+DEAL::5394 1
+DEAL::5395 1
+DEAL::5396 1
+DEAL::5397 1
+DEAL::5398 1
+DEAL::5399 1
+DEAL::5400 1
+DEAL::5401 1
+DEAL::5402 1
+DEAL::5403 1
+DEAL::5404 1
+DEAL::5405 1
+DEAL::5406 1
+DEAL::5407 1
+DEAL::5408 1
+DEAL::5409 1
+DEAL::5410 1
+DEAL::5411 1
+DEAL::5412 1
+DEAL::5413 1
+DEAL::5414 1
+DEAL::5415 1
+DEAL::5416 1
+DEAL::5417 1
+DEAL::5418 1
+DEAL::5419 1
+DEAL::5420 1
+DEAL::5421 1
+DEAL::5422 1
+DEAL::5423 1
+DEAL::5424 1
+DEAL::5425 1
+DEAL::5426 1
+DEAL::5427 1
+DEAL::5428 1
+DEAL::5429 1
+DEAL::5430 1
+DEAL::5431 1
+DEAL::5432 1
+DEAL::5433 1
+DEAL::5434 1
+DEAL::5435 1
+DEAL::5436 1
+DEAL::5437 1
+DEAL::5438 1
+DEAL::5439 1
+DEAL::5440 1
+DEAL::5441 1
+DEAL::5442 1
+DEAL::5443 1
+DEAL::5444 1
+DEAL::5445 1
+DEAL::5446 1
+DEAL::5447 1
+DEAL::5448 1
+DEAL::5449 1
+DEAL::5450 1
+DEAL::5451 1
+DEAL::5452 3
+DEAL::5453 3
+DEAL::5454 3
+DEAL::5455 3
+DEAL::5456 3
+DEAL::5457 3
+DEAL::5458 3
+DEAL::5459 3
+DEAL::5460 3
+DEAL::5461 3
+DEAL::5462 3
+DEAL::5463 3
+DEAL::5464 3
+DEAL::5465 3
+DEAL::5466 3
+DEAL::5467 3
+DEAL::5468 3
+DEAL::5469 3
+DEAL::5470 3
+DEAL::5471 3
+DEAL::5472 3
+DEAL::5473 3
+DEAL::5474 3
+DEAL::5475 3
+DEAL::5476 3
+DEAL::5477 3
+DEAL::5478 3
+DEAL::5479 3
+DEAL::5480 3
+DEAL::5481 3
+DEAL::5482 3
+DEAL::5483 3
+DEAL::5484 3
+DEAL::5485 3
+DEAL::5486 3
+DEAL::5487 3
+DEAL::5488 3
+DEAL::5489 3
+DEAL::5490 2
+DEAL::5491 2
+DEAL::5492 2
+DEAL::5493 2
+DEAL::5494 2
+DEAL::5495 2
+DEAL::5496 2
+DEAL::5497 2
+DEAL::5498 2
+DEAL::5499 2
+DEAL::5500 2
+DEAL::5501 2
+DEAL::5502 2
+DEAL::5503 2
+DEAL::5504 2
+DEAL::5505 2
+DEAL::5506 2
+DEAL::5507 2
+DEAL::5508 2
+DEAL::5509 2
+DEAL::5510 2
DEAL::5511 4
DEAL::5512 4
DEAL::5513 4
DEAL::5527 4
DEAL::5528 4
DEAL::5529 4
-DEAL::5530 0
-DEAL::5531 0
-DEAL::5532 0
-DEAL::5533 0
-DEAL::5534 0
-DEAL::5535 0
-DEAL::5536 0
-DEAL::5537 0
-DEAL::5538 0
-DEAL::5539 0
-DEAL::5540 0
-DEAL::5541 0
-DEAL::5542 0
-DEAL::5543 0
-DEAL::5544 0
-DEAL::5545 0
-DEAL::5546 0
-DEAL::5547 0
-DEAL::5548 0
-DEAL::5549 0
-DEAL::5550 0
-DEAL::5551 3
-DEAL::5552 3
-DEAL::5553 3
-DEAL::5554 3
-DEAL::5555 3
-DEAL::5556 3
-DEAL::5557 3
-DEAL::5558 3
-DEAL::5559 3
-DEAL::5560 3
-DEAL::5561 3
-DEAL::5562 3
-DEAL::5563 3
-DEAL::5564 3
-DEAL::5565 3
-DEAL::5566 3
-DEAL::5567 3
-DEAL::5568 3
-DEAL::5569 3
-DEAL::5570 3
-DEAL::5571 3
-DEAL::5572 0
-DEAL::5573 0
-DEAL::5574 0
-DEAL::5575 0
-DEAL::5576 0
-DEAL::5577 0
-DEAL::5578 0
-DEAL::5579 0
-DEAL::5580 0
-DEAL::5581 0
-DEAL::5582 0
-DEAL::5583 0
-DEAL::5584 0
-DEAL::5585 0
-DEAL::5586 0
-DEAL::5587 0
-DEAL::5588 0
-DEAL::5589 0
-DEAL::5590 0
-DEAL::5591 0
-DEAL::5592 0
-DEAL::5593 2
-DEAL::5594 2
-DEAL::5595 2
-DEAL::5596 2
-DEAL::5597 2
-DEAL::5598 2
-DEAL::5599 2
-DEAL::5600 2
-DEAL::5601 2
-DEAL::5602 2
-DEAL::5603 2
-DEAL::5604 2
-DEAL::5605 2
-DEAL::5606 2
-DEAL::5607 2
-DEAL::5608 2
-DEAL::5609 2
-DEAL::5610 2
-DEAL::5611 2
-DEAL::5612 2
-DEAL::5613 2
-DEAL::5614 1
-DEAL::5615 1
-DEAL::5616 1
-DEAL::5617 1
-DEAL::5618 1
-DEAL::5619 1
-DEAL::5620 1
-DEAL::5621 1
-DEAL::5622 1
-DEAL::5623 1
-DEAL::5624 1
-DEAL::5625 1
-DEAL::5626 1
-DEAL::5627 1
-DEAL::5628 1
-DEAL::5629 1
-DEAL::5630 1
-DEAL::5631 1
-DEAL::5632 1
-DEAL::5633 1
-DEAL::5634 1
-DEAL::5635 0
-DEAL::5636 0
-DEAL::5637 0
-DEAL::5638 0
-DEAL::5639 0
-DEAL::5640 0
-DEAL::5641 0
-DEAL::5642 0
-DEAL::5643 0
-DEAL::5644 0
-DEAL::5645 0
-DEAL::5646 0
-DEAL::5647 0
-DEAL::5648 0
-DEAL::5649 0
-DEAL::5650 0
-DEAL::5651 0
-DEAL::5652 0
-DEAL::5653 0
-DEAL::5654 0
-DEAL::5655 0
-DEAL::5656 3
-DEAL::5657 3
-DEAL::5658 3
-DEAL::5659 3
-DEAL::5660 3
-DEAL::5661 3
-DEAL::5662 3
-DEAL::5663 3
-DEAL::5664 3
-DEAL::5665 3
-DEAL::5666 3
-DEAL::5667 3
-DEAL::5668 3
-DEAL::5669 3
-DEAL::5670 3
-DEAL::5671 3
-DEAL::5672 3
-DEAL::5673 3
-DEAL::5674 3
-DEAL::5675 3
-DEAL::5676 3
-DEAL::5677 2
-DEAL::5678 2
-DEAL::5679 2
-DEAL::5680 2
-DEAL::5681 2
-DEAL::5682 2
-DEAL::5683 2
-DEAL::5684 2
-DEAL::5685 2
-DEAL::5686 2
-DEAL::5687 2
-DEAL::5688 2
-DEAL::5689 2
-DEAL::5690 2
-DEAL::5691 2
-DEAL::5692 2
-DEAL::5693 2
-DEAL::5694 2
-DEAL::5695 2
-DEAL::5696 2
-DEAL::5697 2
+DEAL::5530 3
+DEAL::5531 3
+DEAL::5532 3
+DEAL::5533 3
+DEAL::5534 3
+DEAL::5535 3
+DEAL::5536 3
+DEAL::5537 3
+DEAL::5538 3
+DEAL::5539 3
+DEAL::5540 3
+DEAL::5541 3
+DEAL::5542 3
+DEAL::5543 3
+DEAL::5544 3
+DEAL::5545 3
+DEAL::5546 3
+DEAL::5547 3
+DEAL::5548 3
+DEAL::5549 3
+DEAL::5550 3
+DEAL::5551 0
+DEAL::5552 0
+DEAL::5553 0
+DEAL::5554 0
+DEAL::5555 1
+DEAL::5556 0
+DEAL::5557 0
+DEAL::5558 0
+DEAL::5559 1
+DEAL::5560 1
+DEAL::5561 1
+DEAL::5562 1
+DEAL::5563 1
+DEAL::5564 0
+DEAL::5565 0
+DEAL::5566 0
+DEAL::5567 0
+DEAL::5568 0
+DEAL::5569 1
+DEAL::5570 1
+DEAL::5571 1
+DEAL::5572 3
+DEAL::5573 3
+DEAL::5574 3
+DEAL::5575 3
+DEAL::5576 3
+DEAL::5577 3
+DEAL::5578 3
+DEAL::5579 3
+DEAL::5580 3
+DEAL::5581 3
+DEAL::5582 3
+DEAL::5583 3
+DEAL::5584 3
+DEAL::5585 3
+DEAL::5586 3
+DEAL::5587 3
+DEAL::5588 3
+DEAL::5589 3
+DEAL::5590 3
+DEAL::5591 3
+DEAL::5592 3
+DEAL::5593 0
+DEAL::5594 0
+DEAL::5595 0
+DEAL::5596 0
+DEAL::5597 0
+DEAL::5598 0
+DEAL::5599 0
+DEAL::5600 0
+DEAL::5601 0
+DEAL::5602 0
+DEAL::5603 0
+DEAL::5604 0
+DEAL::5605 0
+DEAL::5606 0
+DEAL::5607 0
+DEAL::5608 0
+DEAL::5609 0
+DEAL::5610 0
+DEAL::5611 0
+DEAL::5612 0
+DEAL::5613 0
+DEAL::5614 4
+DEAL::5615 4
+DEAL::5616 4
+DEAL::5617 4
+DEAL::5618 4
+DEAL::5619 4
+DEAL::5620 4
+DEAL::5621 4
+DEAL::5622 4
+DEAL::5623 4
+DEAL::5624 4
+DEAL::5625 4
+DEAL::5626 4
+DEAL::5627 4
+DEAL::5628 4
+DEAL::5629 4
+DEAL::5630 4
+DEAL::5631 4
+DEAL::5632 4
+DEAL::5633 4
+DEAL::5634 4
+DEAL::5635 3
+DEAL::5636 3
+DEAL::5637 3
+DEAL::5638 3
+DEAL::5639 3
+DEAL::5640 3
+DEAL::5641 3
+DEAL::5642 3
+DEAL::5643 3
+DEAL::5644 3
+DEAL::5645 3
+DEAL::5646 3
+DEAL::5647 3
+DEAL::5648 3
+DEAL::5649 3
+DEAL::5650 3
+DEAL::5651 3
+DEAL::5652 3
+DEAL::5653 3
+DEAL::5654 3
+DEAL::5655 3
+DEAL::5656 1
+DEAL::5657 1
+DEAL::5658 1
+DEAL::5659 1
+DEAL::5660 1
+DEAL::5661 1
+DEAL::5662 1
+DEAL::5663 1
+DEAL::5664 1
+DEAL::5665 1
+DEAL::5666 1
+DEAL::5667 1
+DEAL::5668 1
+DEAL::5669 1
+DEAL::5670 1
+DEAL::5671 1
+DEAL::5672 1
+DEAL::5673 1
+DEAL::5674 1
+DEAL::5675 1
+DEAL::5676 1
+DEAL::5677 0
+DEAL::5678 0
+DEAL::5679 0
+DEAL::5680 0
+DEAL::5681 0
+DEAL::5682 0
+DEAL::5683 0
+DEAL::5684 0
+DEAL::5685 0
+DEAL::5686 0
+DEAL::5687 0
+DEAL::5688 0
+DEAL::5689 0
+DEAL::5690 0
+DEAL::5691 0
+DEAL::5692 0
+DEAL::5693 0
+DEAL::5694 0
+DEAL::5695 0
+DEAL::5696 0
+DEAL::5697 0
DEAL::5698 4
DEAL::5699 4
DEAL::5700 4
DEAL::5716 4
DEAL::5717 4
DEAL::5718 4
-DEAL::5719 0
-DEAL::5720 0
-DEAL::5721 0
-DEAL::5722 0
-DEAL::5723 0
-DEAL::5724 0
-DEAL::5725 0
-DEAL::5726 0
-DEAL::5727 0
-DEAL::5728 0
-DEAL::5729 0
-DEAL::5730 0
-DEAL::5731 0
-DEAL::5732 0
-DEAL::5733 0
-DEAL::5734 0
-DEAL::5735 0
-DEAL::5736 0
-DEAL::5737 0
-DEAL::5738 0
-DEAL::5739 0
-DEAL::5740 0
-DEAL::5741 0
-DEAL::5742 0
-DEAL::5743 0
-DEAL::5744 0
-DEAL::5745 0
-DEAL::5746 0
-DEAL::5747 0
-DEAL::5748 0
-DEAL::5749 0
-DEAL::5750 0
-DEAL::5751 0
-DEAL::5752 0
-DEAL::5753 0
-DEAL::5754 0
-DEAL::5755 0
-DEAL::5756 0
-DEAL::5757 0
-DEAL::5758 0
-DEAL::5759 0
-DEAL::5760 0
-DEAL::5761 3
-DEAL::5762 3
-DEAL::5763 3
-DEAL::5764 3
-DEAL::5765 3
-DEAL::5766 3
-DEAL::5767 3
-DEAL::5768 3
-DEAL::5769 3
-DEAL::5770 3
-DEAL::5771 3
-DEAL::5772 3
-DEAL::5773 3
-DEAL::5774 3
-DEAL::5775 3
-DEAL::5776 3
-DEAL::5777 3
-DEAL::5778 3
-DEAL::5779 3
-DEAL::5780 3
-DEAL::5781 3
-DEAL::5782 3
-DEAL::5783 3
-DEAL::5784 3
-DEAL::5785 3
-DEAL::5786 3
-DEAL::5787 3
-DEAL::5788 3
-DEAL::5789 3
-DEAL::5790 3
-DEAL::5791 3
-DEAL::5792 3
-DEAL::5793 3
-DEAL::5794 3
-DEAL::5795 3
-DEAL::5796 3
-DEAL::5797 3
-DEAL::5798 3
-DEAL::5799 3
-DEAL::5800 1
-DEAL::5801 1
-DEAL::5802 1
-DEAL::5803 1
-DEAL::5804 1
-DEAL::5805 1
-DEAL::5806 1
-DEAL::5807 1
-DEAL::5808 1
-DEAL::5809 1
-DEAL::5810 1
-DEAL::5811 1
-DEAL::5812 1
-DEAL::5813 1
-DEAL::5814 1
-DEAL::5815 1
-DEAL::5816 1
-DEAL::5817 1
-DEAL::5818 1
-DEAL::5819 1
-DEAL::5820 1
+DEAL::5719 3
+DEAL::5720 3
+DEAL::5721 3
+DEAL::5722 3
+DEAL::5723 3
+DEAL::5724 3
+DEAL::5725 3
+DEAL::5726 3
+DEAL::5727 3
+DEAL::5728 3
+DEAL::5729 3
+DEAL::5730 3
+DEAL::5731 3
+DEAL::5732 3
+DEAL::5733 3
+DEAL::5734 3
+DEAL::5735 3
+DEAL::5736 3
+DEAL::5737 3
+DEAL::5738 3
+DEAL::5739 3
+DEAL::5740 3
+DEAL::5741 3
+DEAL::5742 3
+DEAL::5743 3
+DEAL::5744 3
+DEAL::5745 3
+DEAL::5746 3
+DEAL::5747 3
+DEAL::5748 3
+DEAL::5749 3
+DEAL::5750 3
+DEAL::5751 3
+DEAL::5752 3
+DEAL::5753 3
+DEAL::5754 3
+DEAL::5755 3
+DEAL::5756 3
+DEAL::5757 3
+DEAL::5758 3
+DEAL::5759 3
+DEAL::5760 3
+DEAL::5761 1
+DEAL::5762 1
+DEAL::5763 1
+DEAL::5764 1
+DEAL::5765 1
+DEAL::5766 1
+DEAL::5767 1
+DEAL::5768 1
+DEAL::5769 1
+DEAL::5770 1
+DEAL::5771 1
+DEAL::5772 1
+DEAL::5773 1
+DEAL::5774 1
+DEAL::5775 1
+DEAL::5776 1
+DEAL::5777 1
+DEAL::5778 1
+DEAL::5779 1
+DEAL::5780 1
+DEAL::5781 1
+DEAL::5782 1
+DEAL::5783 1
+DEAL::5784 1
+DEAL::5785 1
+DEAL::5786 1
+DEAL::5787 1
+DEAL::5788 1
+DEAL::5789 1
+DEAL::5790 1
+DEAL::5791 1
+DEAL::5792 1
+DEAL::5793 1
+DEAL::5794 1
+DEAL::5795 1
+DEAL::5796 1
+DEAL::5797 1
+DEAL::5798 1
+DEAL::5799 1
+DEAL::5800 2
+DEAL::5801 2
+DEAL::5802 2
+DEAL::5803 2
+DEAL::5804 2
+DEAL::5805 2
+DEAL::5806 2
+DEAL::5807 2
+DEAL::5808 2
+DEAL::5809 2
+DEAL::5810 2
+DEAL::5811 2
+DEAL::5812 2
+DEAL::5813 2
+DEAL::5814 2
+DEAL::5815 2
+DEAL::5816 2
+DEAL::5817 2
+DEAL::5818 2
+DEAL::5819 2
+DEAL::5820 2
DEAL::5821 2
DEAL::5822 2
DEAL::5823 2
DEAL::5839 2
DEAL::5840 2
DEAL::5841 2
-DEAL::5842 3
-DEAL::5843 3
-DEAL::5844 3
-DEAL::5845 3
-DEAL::5846 3
-DEAL::5847 3
-DEAL::5848 3
-DEAL::5849 3
-DEAL::5850 3
-DEAL::5851 3
-DEAL::5852 3
-DEAL::5853 3
-DEAL::5854 3
-DEAL::5855 3
-DEAL::5856 3
-DEAL::5857 3
-DEAL::5858 3
-DEAL::5859 3
-DEAL::5860 3
-DEAL::5861 3
-DEAL::5862 3
-DEAL::5863 2
-DEAL::5864 2
-DEAL::5865 2
-DEAL::5866 2
-DEAL::5867 2
-DEAL::5868 2
-DEAL::5869 2
-DEAL::5870 2
-DEAL::5871 2
-DEAL::5872 2
-DEAL::5873 2
-DEAL::5874 2
-DEAL::5875 2
-DEAL::5876 2
-DEAL::5877 2
-DEAL::5878 2
-DEAL::5879 2
-DEAL::5880 2
-DEAL::5881 2
-DEAL::5882 2
-DEAL::5883 2
-DEAL::5884 3
-DEAL::5885 3
-DEAL::5886 3
-DEAL::5887 3
-DEAL::5888 3
-DEAL::5889 3
-DEAL::5890 3
-DEAL::5891 3
-DEAL::5892 3
-DEAL::5893 3
-DEAL::5894 3
-DEAL::5895 3
-DEAL::5896 3
-DEAL::5897 3
-DEAL::5898 3
-DEAL::5899 3
-DEAL::5900 3
-DEAL::5901 3
-DEAL::5902 3
-DEAL::5903 3
-DEAL::5904 3
-DEAL::5905 3
-DEAL::5906 3
-DEAL::5907 3
-DEAL::5908 3
-DEAL::5909 3
-DEAL::5910 3
-DEAL::5911 3
-DEAL::5912 3
-DEAL::5913 3
-DEAL::5914 3
-DEAL::5915 3
-DEAL::5916 3
-DEAL::5917 3
-DEAL::5918 3
-DEAL::5919 3
-DEAL::5920 3
-DEAL::5921 3
-DEAL::5922 3
-DEAL::5923 3
-DEAL::5924 3
-DEAL::5925 3
-DEAL::5926 3
-DEAL::5927 3
-DEAL::5928 3
-DEAL::5929 3
-DEAL::5930 3
-DEAL::5931 3
-DEAL::5932 3
-DEAL::5933 3
-DEAL::5934 3
-DEAL::5935 3
-DEAL::5936 3
-DEAL::5937 3
-DEAL::5938 3
-DEAL::5939 3
+DEAL::5842 4
+DEAL::5843 4
+DEAL::5844 4
+DEAL::5845 4
+DEAL::5846 4
+DEAL::5847 4
+DEAL::5848 4
+DEAL::5849 4
+DEAL::5850 4
+DEAL::5851 4
+DEAL::5852 4
+DEAL::5853 4
+DEAL::5854 4
+DEAL::5855 4
+DEAL::5856 4
+DEAL::5857 4
+DEAL::5858 4
+DEAL::5859 4
+DEAL::5860 4
+DEAL::5861 4
+DEAL::5862 4
+DEAL::5863 0
+DEAL::5864 0
+DEAL::5865 0
+DEAL::5866 0
+DEAL::5867 0
+DEAL::5868 0
+DEAL::5869 0
+DEAL::5870 0
+DEAL::5871 0
+DEAL::5872 0
+DEAL::5873 0
+DEAL::5874 0
+DEAL::5875 0
+DEAL::5876 0
+DEAL::5877 0
+DEAL::5878 0
+DEAL::5879 0
+DEAL::5880 0
+DEAL::5881 0
+DEAL::5882 0
+DEAL::5883 0
+DEAL::5884 1
+DEAL::5885 1
+DEAL::5886 1
+DEAL::5887 1
+DEAL::5888 1
+DEAL::5889 1
+DEAL::5890 1
+DEAL::5891 1
+DEAL::5892 1
+DEAL::5893 1
+DEAL::5894 1
+DEAL::5895 1
+DEAL::5896 1
+DEAL::5897 1
+DEAL::5898 1
+DEAL::5899 1
+DEAL::5900 1
+DEAL::5901 1
+DEAL::5902 1
+DEAL::5903 1
+DEAL::5904 1
+DEAL::5905 1
+DEAL::5906 1
+DEAL::5907 1
+DEAL::5908 1
+DEAL::5909 1
+DEAL::5910 1
+DEAL::5911 1
+DEAL::5912 1
+DEAL::5913 1
+DEAL::5914 1
+DEAL::5915 1
+DEAL::5916 1
+DEAL::5917 1
+DEAL::5918 1
+DEAL::5919 1
+DEAL::5920 1
+DEAL::5921 1
+DEAL::5922 1
+DEAL::5923 1
+DEAL::5924 1
+DEAL::5925 1
+DEAL::5926 1
+DEAL::5927 1
+DEAL::5928 1
+DEAL::5929 1
+DEAL::5930 1
+DEAL::5931 1
+DEAL::5932 1
+DEAL::5933 1
+DEAL::5934 1
+DEAL::5935 1
+DEAL::5936 1
+DEAL::5937 1
+DEAL::5938 1
+DEAL::5939 1
DEAL::5940 4
DEAL::5941 4
DEAL::5942 4
DEAL::5958 4
DEAL::5959 4
DEAL::5960 4
-DEAL::5961 3
-DEAL::5962 3
-DEAL::5963 3
-DEAL::5964 3
-DEAL::5965 3
-DEAL::5966 3
-DEAL::5967 3
-DEAL::5968 3
-DEAL::5969 3
-DEAL::5970 3
-DEAL::5971 3
-DEAL::5972 3
-DEAL::5973 3
-DEAL::5974 3
-DEAL::5975 3
-DEAL::5976 3
-DEAL::5977 3
-DEAL::5978 3
-DEAL::5979 3
-DEAL::5980 3
-DEAL::5981 3
-DEAL::5982 3
-DEAL::5983 3
-DEAL::5984 3
-DEAL::5985 3
-DEAL::5986 3
-DEAL::5987 3
-DEAL::5988 3
-DEAL::5989 3
-DEAL::5990 3
-DEAL::5991 3
-DEAL::5992 3
-DEAL::5993 3
-DEAL::5994 3
-DEAL::5995 3
-DEAL::5996 3
-DEAL::5997 3
-DEAL::5998 3
-DEAL::5999 3
-DEAL::6000 3
-DEAL::6001 3
-DEAL::6002 3
-DEAL::6003 0
-DEAL::6004 0
-DEAL::6005 0
-DEAL::6006 0
-DEAL::6007 0
-DEAL::6008 0
-DEAL::6009 0
-DEAL::6010 0
-DEAL::6011 0
-DEAL::6012 0
-DEAL::6013 0
-DEAL::6014 0
-DEAL::6015 0
-DEAL::6016 0
-DEAL::6017 0
-DEAL::6018 0
-DEAL::6019 0
-DEAL::6020 0
-DEAL::6021 0
-DEAL::6022 0
-DEAL::6023 0
-DEAL::6024 3
-DEAL::6025 3
-DEAL::6026 3
-DEAL::6027 3
-DEAL::6028 3
-DEAL::6029 3
-DEAL::6030 3
-DEAL::6031 3
-DEAL::6032 3
-DEAL::6033 3
-DEAL::6034 3
-DEAL::6035 3
-DEAL::6036 3
-DEAL::6037 3
-DEAL::6038 3
-DEAL::6039 3
-DEAL::6040 3
-DEAL::6041 3
-DEAL::6042 3
-DEAL::6043 3
-DEAL::6044 3
+DEAL::5961 1
+DEAL::5962 1
+DEAL::5963 1
+DEAL::5964 1
+DEAL::5965 1
+DEAL::5966 1
+DEAL::5967 1
+DEAL::5968 1
+DEAL::5969 1
+DEAL::5970 1
+DEAL::5971 1
+DEAL::5972 1
+DEAL::5973 1
+DEAL::5974 1
+DEAL::5975 1
+DEAL::5976 1
+DEAL::5977 1
+DEAL::5978 1
+DEAL::5979 1
+DEAL::5980 1
+DEAL::5981 1
+DEAL::5982 1
+DEAL::5983 1
+DEAL::5984 1
+DEAL::5985 1
+DEAL::5986 1
+DEAL::5987 1
+DEAL::5988 1
+DEAL::5989 1
+DEAL::5990 1
+DEAL::5991 1
+DEAL::5992 1
+DEAL::5993 1
+DEAL::5994 1
+DEAL::5995 1
+DEAL::5996 1
+DEAL::5997 1
+DEAL::5998 1
+DEAL::5999 1
+DEAL::6000 1
+DEAL::6001 1
+DEAL::6002 1
+DEAL::6003 3
+DEAL::6004 3
+DEAL::6005 3
+DEAL::6006 3
+DEAL::6007 3
+DEAL::6008 3
+DEAL::6009 3
+DEAL::6010 3
+DEAL::6011 3
+DEAL::6012 3
+DEAL::6013 3
+DEAL::6014 3
+DEAL::6015 3
+DEAL::6016 3
+DEAL::6017 3
+DEAL::6018 3
+DEAL::6019 3
+DEAL::6020 3
+DEAL::6021 3
+DEAL::6022 3
+DEAL::6023 3
+DEAL::6024 1
+DEAL::6025 1
+DEAL::6026 1
+DEAL::6027 1
+DEAL::6028 1
+DEAL::6029 1
+DEAL::6030 1
+DEAL::6031 1
+DEAL::6032 1
+DEAL::6033 1
+DEAL::6034 1
+DEAL::6035 1
+DEAL::6036 1
+DEAL::6037 1
+DEAL::6038 1
+DEAL::6039 1
+DEAL::6040 1
+DEAL::6041 1
+DEAL::6042 1
+DEAL::6043 1
+DEAL::6044 1
DEAL::3D
DEAL::Cell association:
DEAL::0 4.00000
DEAL::1 2.00000
-DEAL::2 0
-DEAL::3 2.00000
-DEAL::4 3.00000
-DEAL::5 2.00000
-DEAL::6 3.00000
-DEAL::7 1.00000
+DEAL::2 2.00000
+DEAL::3 1.00000
+DEAL::4 1.00000
+DEAL::5 1.00000
+DEAL::6 1.00000
+DEAL::7 4.00000
DEAL::8 2.00000
-DEAL::9 4.00000
-DEAL::10 4.00000
+DEAL::9 2.00000
+DEAL::10 2.00000
DEAL::11 2.00000
-DEAL::12 4.00000
-DEAL::13 4.00000
-DEAL::14 2.00000
-DEAL::15 2.00000
-DEAL::16 2.00000
-DEAL::17 2.00000
-DEAL::18 2.00000
-DEAL::19 2.00000
-DEAL::20 3.00000
-DEAL::21 4.00000
-DEAL::22 4.00000
-DEAL::23 3.00000
-DEAL::24 3.00000
-DEAL::25 3.00000
-DEAL::26 1.00000
-DEAL::27 1.00000
-DEAL::28 1.00000
-DEAL::29 1.00000
-DEAL::30 1.00000
+DEAL::12 2.00000
+DEAL::13 2.00000
+DEAL::14 1.00000
+DEAL::15 1.00000
+DEAL::16 1.00000
+DEAL::17 1.00000
+DEAL::18 1.00000
+DEAL::19 1.00000
+DEAL::20 0
+DEAL::21 0
+DEAL::22 0
+DEAL::23 1.00000
+DEAL::24 1.00000
+DEAL::25 0
+DEAL::26 3.00000
+DEAL::27 3.00000
+DEAL::28 3.00000
+DEAL::29 3.00000
+DEAL::30 3.00000
DEAL::31 2.00000
DEAL::32 2.00000
DEAL::33 2.00000
DEAL::35 2.00000
DEAL::36 2.00000
DEAL::37 2.00000
-DEAL::38 4.00000
-DEAL::39 4.00000
-DEAL::40 4.00000
+DEAL::38 2.00000
+DEAL::39 0
+DEAL::40 2.00000
DEAL::41 4.00000
-DEAL::42 4.00000
-DEAL::43 4.00000
-DEAL::44 4.00000
+DEAL::42 2.00000
+DEAL::43 0
+DEAL::44 2.00000
DEAL::45 2.00000
DEAL::46 2.00000
DEAL::47 2.00000
DEAL::48 2.00000
DEAL::49 2.00000
-DEAL::50 4.00000
-DEAL::51 4.00000
-DEAL::52 4.00000
-DEAL::53 4.00000
-DEAL::54 3.00000
-DEAL::55 3.00000
-DEAL::56 4.00000
-DEAL::57 4.00000
-DEAL::58 3.00000
-DEAL::59 3.00000
-DEAL::60 3.00000
-DEAL::61 3.00000
-DEAL::62 3.00000
-DEAL::63 3.00000
-DEAL::64 3.00000
-DEAL::65 3.00000
-DEAL::66 3.00000
-DEAL::67 3.00000
-DEAL::68 3.00000
-DEAL::69 3.00000
-DEAL::70 4.00000
-DEAL::71 3.00000
-DEAL::72 3.00000
-DEAL::73 3.00000
-DEAL::74 4.00000
-DEAL::75 4.00000
-DEAL::76 4.00000
-DEAL::77 4.00000
-DEAL::78 4.00000
-DEAL::79 4.00000
-DEAL::80 4.00000
-DEAL::81 4.00000
+DEAL::50 0
+DEAL::51 0
+DEAL::52 0
+DEAL::53 0
+DEAL::54 0
+DEAL::55 0
+DEAL::56 0
+DEAL::57 0
+DEAL::58 0
+DEAL::59 0
+DEAL::60 1.00000
+DEAL::61 1.00000
+DEAL::62 1.00000
+DEAL::63 0
+DEAL::64 0
+DEAL::65 0
+DEAL::66 0
+DEAL::67 0
+DEAL::68 0
+DEAL::69 0
+DEAL::70 0
+DEAL::71 0
+DEAL::72 0
+DEAL::73 0
+DEAL::74 2.00000
+DEAL::75 3.00000
+DEAL::76 3.00000
+DEAL::77 2.00000
+DEAL::78 2.00000
+DEAL::79 2.00000
+DEAL::80 3.00000
+DEAL::81 3.00000
DEAL::82 4.00000
-DEAL::83 4.00000
-DEAL::84 4.00000
-DEAL::85 4.00000
-DEAL::86 1.00000
-DEAL::87 1.00000
-DEAL::88 0
-DEAL::89 0
-DEAL::90 0
-DEAL::91 1.00000
-DEAL::92 0
-DEAL::93 0
-DEAL::94 0
-DEAL::95 1.00000
-DEAL::96 1.00000
-DEAL::97 1.00000
-DEAL::98 1.00000
-DEAL::99 1.00000
+DEAL::83 3.00000
+DEAL::84 3.00000
+DEAL::85 3.00000
+DEAL::86 3.00000
+DEAL::87 3.00000
+DEAL::88 3.00000
+DEAL::89 3.00000
+DEAL::90 3.00000
+DEAL::91 3.00000
+DEAL::92 3.00000
+DEAL::93 3.00000
+DEAL::94 3.00000
+DEAL::95 3.00000
+DEAL::96 3.00000
+DEAL::97 3.00000
+DEAL::98 3.00000
+DEAL::99 3.00000
DEAL::100 4.00000
DEAL::101 4.00000
DEAL::102 4.00000
DEAL::105 4.00000
DEAL::106 4.00000
DEAL::107 2.00000
-DEAL::108 2.00000
+DEAL::108 1.00000
DEAL::109 2.00000
DEAL::110 2.00000
DEAL::111 2.00000
DEAL::112 2.00000
DEAL::113 2.00000
DEAL::114 2.00000
-DEAL::115 2.00000
-DEAL::116 2.00000
-DEAL::117 2.00000
-DEAL::118 2.00000
-DEAL::119 2.00000
+DEAL::115 1.00000
+DEAL::116 1.00000
+DEAL::117 1.00000
+DEAL::118 1.00000
+DEAL::119 1.00000
DEAL::120 2.00000
-DEAL::121 2.00000
-DEAL::122 2.00000
-DEAL::123 2.00000
-DEAL::124 3.00000
-DEAL::125 2.00000
-DEAL::126 2.00000
-DEAL::127 2.00000
-DEAL::128 2.00000
-DEAL::129 2.00000
-DEAL::130 3.00000
-DEAL::131 3.00000
-DEAL::132 2.00000
-DEAL::133 2.00000
-DEAL::134 0
-DEAL::135 2.00000
-DEAL::136 3.00000
-DEAL::137 3.00000
-DEAL::138 3.00000
-DEAL::139 3.00000
-DEAL::140 3.00000
-DEAL::141 3.00000
-DEAL::142 3.00000
-DEAL::143 0
-DEAL::144 0
-DEAL::145 0
-DEAL::146 0
-DEAL::147 0
-DEAL::148 0
-DEAL::149 0
-DEAL::150 0
-DEAL::151 0
-DEAL::152 1.00000
-DEAL::153 0
-DEAL::154 0
-DEAL::155 0
-DEAL::156 0
-DEAL::157 0
-DEAL::158 0
-DEAL::159 0
-DEAL::160 0
-DEAL::161 0
-DEAL::162 0
-DEAL::163 0
-DEAL::164 1.00000
-DEAL::165 1.00000
-DEAL::166 1.00000
-DEAL::167 1.00000
-DEAL::168 1.00000
-DEAL::169 1.00000
-DEAL::170 1.00000
-DEAL::171 2.00000
-DEAL::172 4.00000
-DEAL::173 2.00000
-DEAL::174 4.00000
-DEAL::175 2.00000
-DEAL::176 2.00000
-DEAL::177 2.00000
-DEAL::178 2.00000
+DEAL::121 1.00000
+DEAL::122 1.00000
+DEAL::123 1.00000
+DEAL::124 1.00000
+DEAL::125 1.00000
+DEAL::126 1.00000
+DEAL::127 1.00000
+DEAL::128 1.00000
+DEAL::129 1.00000
+DEAL::130 1.00000
+DEAL::131 1.00000
+DEAL::132 1.00000
+DEAL::133 1.00000
+DEAL::134 1.00000
+DEAL::135 1.00000
+DEAL::136 0
+DEAL::137 0
+DEAL::138 1.00000
+DEAL::139 1.00000
+DEAL::140 1.00000
+DEAL::141 1.00000
+DEAL::142 1.00000
+DEAL::143 4.00000
+DEAL::144 4.00000
+DEAL::145 3.00000
+DEAL::146 3.00000
+DEAL::147 4.00000
+DEAL::148 4.00000
+DEAL::149 4.00000
+DEAL::150 3.00000
+DEAL::151 3.00000
+DEAL::152 3.00000
+DEAL::153 3.00000
+DEAL::154 3.00000
+DEAL::155 3.00000
+DEAL::156 3.00000
+DEAL::157 3.00000
+DEAL::158 3.00000
+DEAL::159 3.00000
+DEAL::160 3.00000
+DEAL::161 4.00000
+DEAL::162 4.00000
+DEAL::163 4.00000
+DEAL::164 4.00000
+DEAL::165 4.00000
+DEAL::166 4.00000
+DEAL::167 4.00000
+DEAL::168 4.00000
+DEAL::169 4.00000
+DEAL::170 4.00000
+DEAL::171 1.00000
+DEAL::172 0
+DEAL::173 1.00000
+DEAL::174 0
+DEAL::175 1.00000
+DEAL::176 1.00000
+DEAL::177 1.00000
+DEAL::178 0
DEAL::179 2.00000
DEAL::180 2.00000
DEAL::181 2.00000
DEAL::183 2.00000
DEAL::184 2.00000
DEAL::185 2.00000
-DEAL::186 0
-DEAL::187 2.00000
-DEAL::188 2.00000
+DEAL::186 2.00000
+DEAL::187 1.00000
+DEAL::188 1.00000
DEAL::189 2.00000
DEAL::190 2.00000
-DEAL::191 2.00000
-DEAL::192 2.00000
-DEAL::193 0
-DEAL::194 0
-DEAL::195 4.00000
-DEAL::196 4.00000
-DEAL::197 4.00000
-DEAL::198 4.00000
-DEAL::199 3.00000
-DEAL::200 3.00000
-DEAL::201 4.00000
-DEAL::202 3.00000
-DEAL::203 4.00000
-DEAL::204 4.00000
-DEAL::205 4.00000
-DEAL::206 4.00000
-DEAL::207 3.00000
-DEAL::208 3.00000
-DEAL::209 3.00000
-DEAL::210 3.00000
-DEAL::211 4.00000
-DEAL::212 4.00000
+DEAL::191 1.00000
+DEAL::192 1.00000
+DEAL::193 2.00000
+DEAL::194 2.00000
+DEAL::195 0
+DEAL::196 0
+DEAL::197 0
+DEAL::198 0
+DEAL::199 1.00000
+DEAL::200 0
+DEAL::201 0
+DEAL::202 0
+DEAL::203 0
+DEAL::204 0
+DEAL::205 0
+DEAL::206 0
+DEAL::207 0
+DEAL::208 0
+DEAL::209 0
+DEAL::210 0
+DEAL::211 0
+DEAL::212 0
DEAL::213 4.00000
-DEAL::214 4.00000
-DEAL::215 4.00000
-DEAL::216 4.00000
-DEAL::217 4.00000
-DEAL::218 4.00000
-DEAL::219 1.00000
-DEAL::220 1.00000
-DEAL::221 1.00000
-DEAL::222 1.00000
-DEAL::223 1.00000
-DEAL::224 1.00000
-DEAL::225 1.00000
-DEAL::226 1.00000
-DEAL::227 1.00000
-DEAL::228 1.00000
-DEAL::229 1.00000
-DEAL::230 1.00000
-DEAL::231 1.00000
-DEAL::232 1.00000
-DEAL::233 1.00000
-DEAL::234 1.00000
+DEAL::214 0
+DEAL::215 0
+DEAL::216 0
+DEAL::217 0
+DEAL::218 0
+DEAL::219 3.00000
+DEAL::220 3.00000
+DEAL::221 3.00000
+DEAL::222 3.00000
+DEAL::223 3.00000
+DEAL::224 3.00000
+DEAL::225 3.00000
+DEAL::226 3.00000
+DEAL::227 3.00000
+DEAL::228 3.00000
+DEAL::229 3.00000
+DEAL::230 3.00000
+DEAL::231 3.00000
+DEAL::232 3.00000
+DEAL::233 3.00000
+DEAL::234 3.00000
DEAL::235 2.00000
-DEAL::236 0
-DEAL::237 0
-DEAL::238 0
-DEAL::239 0
-DEAL::240 0
-DEAL::241 0
-DEAL::242 0
+DEAL::236 2.00000
+DEAL::237 2.00000
+DEAL::238 2.00000
+DEAL::239 2.00000
+DEAL::240 2.00000
+DEAL::241 2.00000
+DEAL::242 2.00000
DEAL::243 4.00000
DEAL::244 4.00000
DEAL::245 4.00000
DEAL::246 4.00000
-DEAL::247 4.00000
-DEAL::248 4.00000
-DEAL::249 4.00000
+DEAL::247 3.00000
+DEAL::248 0
+DEAL::249 3.00000
DEAL::250 4.00000
-DEAL::251 4.00000
-DEAL::252 4.00000
-DEAL::253 4.00000
-DEAL::254 4.00000
-DEAL::255 4.00000
-DEAL::256 4.00000
-DEAL::257 4.00000
-DEAL::258 4.00000
+DEAL::251 0
+DEAL::252 0
+DEAL::253 0
+DEAL::254 0
+DEAL::255 0
+DEAL::256 0
+DEAL::257 0
+DEAL::258 0
DEAL::259 4.00000
DEAL::260 4.00000
-DEAL::261 1.00000
+DEAL::261 4.00000
DEAL::262 4.00000
-DEAL::263 1.00000
+DEAL::263 4.00000
DEAL::264 4.00000
-DEAL::265 1.00000
+DEAL::265 4.00000
DEAL::266 4.00000
-DEAL::267 4.00000
-DEAL::268 4.00000
-DEAL::269 1.00000
+DEAL::267 3.00000
+DEAL::268 0
+DEAL::269 3.00000
DEAL::270 4.00000
-DEAL::271 0
-DEAL::272 3.00000
-DEAL::273 1.00000
-DEAL::274 1.00000
-DEAL::275 4.00000
-DEAL::276 4.00000
-DEAL::277 4.00000
-DEAL::278 4.00000
-DEAL::279 3.00000
-DEAL::280 4.00000
+DEAL::271 4.00000
+DEAL::272 0
+DEAL::273 3.00000
+DEAL::274 4.00000
+DEAL::275 0
+DEAL::276 0
+DEAL::277 0
+DEAL::278 0
+DEAL::279 0
+DEAL::280 0
DEAL::281 4.00000
DEAL::282 4.00000
-DEAL::283 1.00000
-DEAL::284 1.00000
-DEAL::285 1.00000
-DEAL::286 1.00000
-DEAL::287 1.00000
-DEAL::288 1.00000
-DEAL::289 1.00000
-DEAL::290 1.00000
+DEAL::283 3.00000
+DEAL::284 4.00000
+DEAL::285 3.00000
+DEAL::286 4.00000
+DEAL::287 3.00000
+DEAL::288 4.00000
+DEAL::289 3.00000
+DEAL::290 4.00000
DEAL::291 2.00000
-DEAL::292 0
-DEAL::293 0
-DEAL::294 0
+DEAL::292 2.00000
+DEAL::293 2.00000
+DEAL::294 2.00000
DEAL::295 2.00000
-DEAL::296 0
-DEAL::297 0
-DEAL::298 0
-DEAL::299 0
-DEAL::300 0
-DEAL::301 0
-DEAL::302 0
-DEAL::303 0
-DEAL::304 0
-DEAL::305 0
-DEAL::306 0
+DEAL::296 2.00000
+DEAL::297 2.00000
+DEAL::298 2.00000
+DEAL::299 2.00000
+DEAL::300 1.00000
+DEAL::301 2.00000
+DEAL::302 2.00000
+DEAL::303 2.00000
+DEAL::304 2.00000
+DEAL::305 2.00000
+DEAL::306 2.00000
DEAL::307 2.00000
DEAL::308 2.00000
DEAL::309 2.00000
DEAL::312 2.00000
DEAL::313 2.00000
DEAL::314 2.00000
-DEAL::315 0
+DEAL::315 2.00000
DEAL::316 2.00000
-DEAL::317 0
-DEAL::318 0
-DEAL::319 0
+DEAL::317 2.00000
+DEAL::318 2.00000
+DEAL::319 2.00000
DEAL::320 2.00000
-DEAL::321 0
-DEAL::322 0
-DEAL::323 3.00000
-DEAL::324 3.00000
-DEAL::325 3.00000
-DEAL::326 3.00000
-DEAL::327 3.00000
-DEAL::328 3.00000
-DEAL::329 3.00000
-DEAL::330 3.00000
-DEAL::331 0
-DEAL::332 0
-DEAL::333 0
-DEAL::334 0
-DEAL::335 0
-DEAL::336 0
-DEAL::337 0
-DEAL::338 0
-DEAL::339 0
-DEAL::340 0
-DEAL::341 0
-DEAL::342 0
-DEAL::343 0
-DEAL::344 0
-DEAL::345 0
-DEAL::346 0
-DEAL::347 0
-DEAL::348 0
-DEAL::349 0
-DEAL::350 0
-DEAL::351 0
-DEAL::352 0
-DEAL::353 0
-DEAL::354 0
-DEAL::355 0
-DEAL::356 0
-DEAL::357 0
-DEAL::358 0
-DEAL::359 0
-DEAL::360 0
-DEAL::361 0
-DEAL::362 0
-DEAL::363 0
-DEAL::364 0
-DEAL::365 0
-DEAL::366 0
-DEAL::367 0
-DEAL::368 0
-DEAL::369 0
-DEAL::370 0
-DEAL::371 0
-DEAL::372 0
-DEAL::373 0
-DEAL::374 1.00000
-DEAL::375 0
-DEAL::376 0
-DEAL::377 0
-DEAL::378 1.00000
-DEAL::379 3.00000
-DEAL::380 3.00000
-DEAL::381 1.00000
+DEAL::321 2.00000
+DEAL::322 2.00000
+DEAL::323 1.00000
+DEAL::324 1.00000
+DEAL::325 0
+DEAL::326 0
+DEAL::327 1.00000
+DEAL::328 1.00000
+DEAL::329 1.00000
+DEAL::330 1.00000
+DEAL::331 2.00000
+DEAL::332 2.00000
+DEAL::333 2.00000
+DEAL::334 2.00000
+DEAL::335 2.00000
+DEAL::336 2.00000
+DEAL::337 2.00000
+DEAL::338 3.00000
+DEAL::339 2.00000
+DEAL::340 2.00000
+DEAL::341 2.00000
+DEAL::342 2.00000
+DEAL::343 2.00000
+DEAL::344 2.00000
+DEAL::345 2.00000
+DEAL::346 2.00000
+DEAL::347 4.00000
+DEAL::348 4.00000
+DEAL::349 4.00000
+DEAL::350 4.00000
+DEAL::351 2.00000
+DEAL::352 4.00000
+DEAL::353 4.00000
+DEAL::354 4.00000
+DEAL::355 4.00000
+DEAL::356 4.00000
+DEAL::357 4.00000
+DEAL::358 4.00000
+DEAL::359 4.00000
+DEAL::360 4.00000
+DEAL::361 4.00000
+DEAL::362 4.00000
+DEAL::363 4.00000
+DEAL::364 4.00000
+DEAL::365 4.00000
+DEAL::366 4.00000
+DEAL::367 4.00000
+DEAL::368 4.00000
+DEAL::369 4.00000
+DEAL::370 4.00000
+DEAL::371 4.00000
+DEAL::372 1.00000
+DEAL::373 4.00000
+DEAL::374 4.00000
+DEAL::375 4.00000
+DEAL::376 4.00000
+DEAL::377 4.00000
+DEAL::378 4.00000
+DEAL::379 1.00000
+DEAL::380 1.00000
+DEAL::381 4.00000
DEAL::382 4.00000
-DEAL::383 3.00000
-DEAL::384 3.00000
-DEAL::385 1.00000
+DEAL::383 1.00000
+DEAL::384 1.00000
+DEAL::385 4.00000
DEAL::386 4.00000
-DEAL::387 1.00000
+DEAL::387 4.00000
DEAL::388 4.00000
-DEAL::389 1.00000
+DEAL::389 4.00000
DEAL::390 4.00000
-DEAL::391 1.00000
-DEAL::392 1.00000
-DEAL::393 1.00000
-DEAL::394 1.00000
+DEAL::391 4.00000
+DEAL::392 4.00000
+DEAL::393 4.00000
+DEAL::394 4.00000
DEAL::395 1.00000
-DEAL::396 3.00000
-DEAL::397 1.00000
+DEAL::396 1.00000
+DEAL::397 4.00000
DEAL::398 4.00000
DEAL::399 1.00000
-DEAL::400 3.00000
-DEAL::401 1.00000
+DEAL::400 1.00000
+DEAL::401 4.00000
DEAL::402 4.00000
-DEAL::403 1.00000
-DEAL::404 1.00000
-DEAL::405 1.00000
-DEAL::406 1.00000
-DEAL::407 1.00000
-DEAL::408 1.00000
-DEAL::409 1.00000
-DEAL::410 1.00000
-DEAL::411 1.00000
-DEAL::412 1.00000
-DEAL::413 1.00000
-DEAL::414 1.00000
-DEAL::415 1.00000
-DEAL::416 1.00000
-DEAL::417 1.00000
-DEAL::418 1.00000
-DEAL::419 4.00000
-DEAL::420 4.00000
-DEAL::421 4.00000
-DEAL::422 4.00000
-DEAL::423 4.00000
-DEAL::424 4.00000
-DEAL::425 4.00000
-DEAL::426 4.00000
-DEAL::427 2.00000
-DEAL::428 2.00000
-DEAL::429 2.00000
-DEAL::430 2.00000
-DEAL::431 2.00000
-DEAL::432 2.00000
-DEAL::433 2.00000
-DEAL::434 3.00000
-DEAL::435 3.00000
-DEAL::436 3.00000
-DEAL::437 3.00000
-DEAL::438 3.00000
-DEAL::439 3.00000
-DEAL::440 3.00000
-DEAL::441 1.00000
-DEAL::442 1.00000
-DEAL::443 1.00000
-DEAL::444 1.00000
-DEAL::445 1.00000
-DEAL::446 1.00000
-DEAL::447 1.00000
-DEAL::448 4.00000
-DEAL::449 4.00000
-DEAL::450 4.00000
-DEAL::451 4.00000
-DEAL::452 4.00000
-DEAL::453 4.00000
-DEAL::454 4.00000
-DEAL::455 4.00000
-DEAL::456 2.00000
-DEAL::457 2.00000
-DEAL::458 2.00000
-DEAL::459 2.00000
-DEAL::460 2.00000
-DEAL::461 2.00000
-DEAL::462 2.00000
-DEAL::463 2.00000
-DEAL::464 3.00000
-DEAL::465 3.00000
-DEAL::466 4.00000
-DEAL::467 4.00000
-DEAL::468 3.00000
-DEAL::469 3.00000
-DEAL::470 3.00000
-DEAL::471 3.00000
-DEAL::472 1.00000
-DEAL::473 1.00000
-DEAL::474 1.00000
-DEAL::475 1.00000
-DEAL::476 1.00000
-DEAL::477 1.00000
-DEAL::478 1.00000
-DEAL::479 1.00000
-DEAL::480 1.00000
-DEAL::481 1.00000
-DEAL::482 1.00000
-DEAL::483 1.00000
-DEAL::484 1.00000
-DEAL::485 1.00000
-DEAL::486 1.00000
-DEAL::487 1.00000
+DEAL::403 4.00000
+DEAL::404 4.00000
+DEAL::405 4.00000
+DEAL::406 4.00000
+DEAL::407 4.00000
+DEAL::408 4.00000
+DEAL::409 4.00000
+DEAL::410 4.00000
+DEAL::411 4.00000
+DEAL::412 4.00000
+DEAL::413 4.00000
+DEAL::414 4.00000
+DEAL::415 4.00000
+DEAL::416 4.00000
+DEAL::417 4.00000
+DEAL::418 4.00000
+DEAL::419 2.00000
+DEAL::420 2.00000
+DEAL::421 2.00000
+DEAL::422 2.00000
+DEAL::423 2.00000
+DEAL::424 2.00000
+DEAL::425 2.00000
+DEAL::426 2.00000
+DEAL::427 1.00000
+DEAL::428 1.00000
+DEAL::429 1.00000
+DEAL::430 1.00000
+DEAL::431 1.00000
+DEAL::432 1.00000
+DEAL::433 1.00000
+DEAL::434 0
+DEAL::435 0
+DEAL::436 0
+DEAL::437 1.00000
+DEAL::438 0
+DEAL::439 1.00000
+DEAL::440 0
+DEAL::441 3.00000
+DEAL::442 3.00000
+DEAL::443 3.00000
+DEAL::444 3.00000
+DEAL::445 3.00000
+DEAL::446 3.00000
+DEAL::447 3.00000
+DEAL::448 2.00000
+DEAL::449 2.00000
+DEAL::450 2.00000
+DEAL::451 2.00000
+DEAL::452 2.00000
+DEAL::453 2.00000
+DEAL::454 2.00000
+DEAL::455 2.00000
+DEAL::456 1.00000
+DEAL::457 1.00000
+DEAL::458 1.00000
+DEAL::459 1.00000
+DEAL::460 1.00000
+DEAL::461 1.00000
+DEAL::462 1.00000
+DEAL::463 1.00000
+DEAL::464 0
+DEAL::465 0
+DEAL::466 0
+DEAL::467 0
+DEAL::468 0
+DEAL::469 0
+DEAL::470 0
+DEAL::471 0
+DEAL::472 3.00000
+DEAL::473 3.00000
+DEAL::474 3.00000
+DEAL::475 3.00000
+DEAL::476 3.00000
+DEAL::477 3.00000
+DEAL::478 3.00000
+DEAL::479 3.00000
+DEAL::480 3.00000
+DEAL::481 3.00000
+DEAL::482 3.00000
+DEAL::483 3.00000
+DEAL::484 3.00000
+DEAL::485 3.00000
+DEAL::486 3.00000
+DEAL::487 3.00000
DEAL::488 2.00000
-DEAL::489 2.00000
+DEAL::489 1.00000
DEAL::490 2.00000
-DEAL::491 2.00000
+DEAL::491 1.00000
DEAL::492 2.00000
-DEAL::493 2.00000
+DEAL::493 1.00000
DEAL::494 2.00000
-DEAL::495 2.00000
-DEAL::496 4.00000
-DEAL::497 4.00000
-DEAL::498 4.00000
-DEAL::499 4.00000
-DEAL::500 4.00000
-DEAL::501 4.00000
-DEAL::502 4.00000
-DEAL::503 4.00000
+DEAL::495 1.00000
+DEAL::496 2.00000
+DEAL::497 2.00000
+DEAL::498 2.00000
+DEAL::499 2.00000
+DEAL::500 2.00000
+DEAL::501 2.00000
+DEAL::502 2.00000
+DEAL::503 2.00000
DEAL::504 2.00000
DEAL::505 2.00000
DEAL::506 2.00000
DEAL::510 2.00000
DEAL::511 2.00000
DEAL::512 2.00000
-DEAL::513 2.00000
+DEAL::513 1.00000
DEAL::514 2.00000
-DEAL::515 2.00000
+DEAL::515 1.00000
DEAL::516 2.00000
-DEAL::517 2.00000
+DEAL::517 1.00000
DEAL::518 2.00000
-DEAL::519 2.00000
+DEAL::519 1.00000
DEAL::520 2.00000
-DEAL::521 2.00000
+DEAL::521 1.00000
DEAL::522 2.00000
-DEAL::523 2.00000
+DEAL::523 1.00000
DEAL::524 2.00000
-DEAL::525 2.00000
+DEAL::525 1.00000
DEAL::526 2.00000
-DEAL::527 2.00000
-DEAL::528 3.00000
-DEAL::529 3.00000
-DEAL::530 3.00000
-DEAL::531 3.00000
-DEAL::532 3.00000
-DEAL::533 3.00000
-DEAL::534 3.00000
-DEAL::535 3.00000
-DEAL::536 3.00000
-DEAL::537 3.00000
-DEAL::538 3.00000
-DEAL::539 3.00000
-DEAL::540 3.00000
-DEAL::541 3.00000
-DEAL::542 3.00000
-DEAL::543 3.00000
-DEAL::544 3.00000
-DEAL::545 3.00000
-DEAL::546 3.00000
-DEAL::547 3.00000
-DEAL::548 3.00000
-DEAL::549 3.00000
-DEAL::550 3.00000
-DEAL::551 3.00000
-DEAL::552 3.00000
-DEAL::553 3.00000
-DEAL::554 3.00000
-DEAL::555 3.00000
-DEAL::556 3.00000
-DEAL::557 3.00000
-DEAL::558 3.00000
-DEAL::559 3.00000
-DEAL::560 3.00000
-DEAL::561 3.00000
-DEAL::562 3.00000
-DEAL::563 3.00000
-DEAL::564 3.00000
-DEAL::565 3.00000
-DEAL::566 3.00000
-DEAL::567 3.00000
-DEAL::568 3.00000
-DEAL::569 3.00000
-DEAL::570 3.00000
-DEAL::571 3.00000
-DEAL::572 3.00000
-DEAL::573 3.00000
-DEAL::574 3.00000
-DEAL::575 3.00000
-DEAL::576 4.00000
-DEAL::577 4.00000
-DEAL::578 4.00000
-DEAL::579 4.00000
-DEAL::580 4.00000
-DEAL::581 4.00000
-DEAL::582 4.00000
-DEAL::583 4.00000
-DEAL::584 3.00000
-DEAL::585 3.00000
-DEAL::586 3.00000
-DEAL::587 3.00000
-DEAL::588 3.00000
-DEAL::589 3.00000
-DEAL::590 3.00000
-DEAL::591 3.00000
-DEAL::592 4.00000
-DEAL::593 4.00000
-DEAL::594 4.00000
-DEAL::595 4.00000
-DEAL::596 4.00000
-DEAL::597 4.00000
-DEAL::598 4.00000
-DEAL::599 4.00000
-DEAL::600 4.00000
-DEAL::601 4.00000
-DEAL::602 1.00000
-DEAL::603 1.00000
-DEAL::604 0
-DEAL::605 0
-DEAL::606 0
-DEAL::607 0
-DEAL::608 0
-DEAL::609 0
-DEAL::610 0
-DEAL::611 0
-DEAL::612 0
-DEAL::613 0
-DEAL::614 0
-DEAL::615 0
-DEAL::616 1.00000
-DEAL::617 1.00000
-DEAL::618 1.00000
-DEAL::619 1.00000
-DEAL::620 1.00000
-DEAL::621 1.00000
-DEAL::622 1.00000
-DEAL::623 1.00000
-DEAL::624 1.00000
-DEAL::625 1.00000
-DEAL::626 1.00000
-DEAL::627 1.00000
-DEAL::628 1.00000
-DEAL::629 1.00000
-DEAL::630 1.00000
-DEAL::631 1.00000
-DEAL::632 1.00000
-DEAL::633 1.00000
-DEAL::634 1.00000
-DEAL::635 1.00000
-DEAL::636 1.00000
-DEAL::637 1.00000
-DEAL::638 1.00000
-DEAL::639 1.00000
+DEAL::527 1.00000
+DEAL::528 1.00000
+DEAL::529 1.00000
+DEAL::530 1.00000
+DEAL::531 1.00000
+DEAL::532 1.00000
+DEAL::533 1.00000
+DEAL::534 1.00000
+DEAL::535 1.00000
+DEAL::536 0
+DEAL::537 0
+DEAL::538 0
+DEAL::539 0
+DEAL::540 0
+DEAL::541 0
+DEAL::542 0
+DEAL::543 0
+DEAL::544 1.00000
+DEAL::545 0
+DEAL::546 1.00000
+DEAL::547 0
+DEAL::548 1.00000
+DEAL::549 1.00000
+DEAL::550 1.00000
+DEAL::551 1.00000
+DEAL::552 0
+DEAL::553 0
+DEAL::554 0
+DEAL::555 0
+DEAL::556 0
+DEAL::557 0
+DEAL::558 0
+DEAL::559 0
+DEAL::560 0
+DEAL::561 0
+DEAL::562 0
+DEAL::563 0
+DEAL::564 0
+DEAL::565 0
+DEAL::566 0
+DEAL::567 0
+DEAL::568 0
+DEAL::569 0
+DEAL::570 0
+DEAL::571 0
+DEAL::572 0
+DEAL::573 0
+DEAL::574 0
+DEAL::575 0
+DEAL::576 0
+DEAL::577 0
+DEAL::578 0
+DEAL::579 0
+DEAL::580 0
+DEAL::581 0
+DEAL::582 0
+DEAL::583 0
+DEAL::584 0
+DEAL::585 0
+DEAL::586 0
+DEAL::587 0
+DEAL::588 0
+DEAL::589 0
+DEAL::590 0
+DEAL::591 0
+DEAL::592 3.00000
+DEAL::593 3.00000
+DEAL::594 3.00000
+DEAL::595 3.00000
+DEAL::596 3.00000
+DEAL::597 3.00000
+DEAL::598 3.00000
+DEAL::599 3.00000
+DEAL::600 3.00000
+DEAL::601 3.00000
+DEAL::602 3.00000
+DEAL::603 3.00000
+DEAL::604 3.00000
+DEAL::605 3.00000
+DEAL::606 3.00000
+DEAL::607 3.00000
+DEAL::608 4.00000
+DEAL::609 4.00000
+DEAL::610 3.00000
+DEAL::611 3.00000
+DEAL::612 4.00000
+DEAL::613 4.00000
+DEAL::614 3.00000
+DEAL::615 3.00000
+DEAL::616 3.00000
+DEAL::617 3.00000
+DEAL::618 3.00000
+DEAL::619 3.00000
+DEAL::620 3.00000
+DEAL::621 3.00000
+DEAL::622 3.00000
+DEAL::623 3.00000
+DEAL::624 3.00000
+DEAL::625 3.00000
+DEAL::626 3.00000
+DEAL::627 3.00000
+DEAL::628 3.00000
+DEAL::629 3.00000
+DEAL::630 3.00000
+DEAL::631 3.00000
+DEAL::632 3.00000
+DEAL::633 3.00000
+DEAL::634 3.00000
+DEAL::635 3.00000
+DEAL::636 3.00000
+DEAL::637 3.00000
+DEAL::638 3.00000
+DEAL::639 3.00000
DEAL::640 4.00000
DEAL::641 4.00000
DEAL::642 4.00000
DEAL::645 4.00000
DEAL::646 4.00000
DEAL::647 4.00000
-DEAL::648 2.00000
-DEAL::649 2.00000
-DEAL::650 2.00000
-DEAL::651 2.00000
-DEAL::652 2.00000
-DEAL::653 2.00000
-DEAL::654 2.00000
-DEAL::655 2.00000
-DEAL::656 2.00000
-DEAL::657 3.00000
-DEAL::658 2.00000
-DEAL::659 3.00000
-DEAL::660 2.00000
-DEAL::661 3.00000
-DEAL::662 2.00000
-DEAL::663 3.00000
-DEAL::664 0
-DEAL::665 3.00000
-DEAL::666 0
-DEAL::667 0
-DEAL::668 0
-DEAL::669 3.00000
-DEAL::670 0
-DEAL::671 0
-DEAL::672 3.00000
-DEAL::673 3.00000
-DEAL::674 3.00000
-DEAL::675 3.00000
-DEAL::676 3.00000
-DEAL::677 3.00000
-DEAL::678 3.00000
-DEAL::679 3.00000
-DEAL::680 0
-DEAL::681 0
-DEAL::682 0
-DEAL::683 0
-DEAL::684 0
-DEAL::685 0
-DEAL::686 0
-DEAL::687 0
-DEAL::688 0
-DEAL::689 0
-DEAL::690 0
-DEAL::691 0
-DEAL::692 0
-DEAL::693 0
-DEAL::694 0
-DEAL::695 0
-DEAL::696 0
-DEAL::697 0
-DEAL::698 0
-DEAL::699 0
-DEAL::700 0
-DEAL::701 0
-DEAL::702 0
-DEAL::703 0
-DEAL::704 1.00000
-DEAL::705 1.00000
-DEAL::706 1.00000
-DEAL::707 1.00000
-DEAL::708 1.00000
-DEAL::709 1.00000
-DEAL::710 1.00000
-DEAL::711 1.00000
-DEAL::712 2.00000
-DEAL::713 2.00000
-DEAL::714 2.00000
-DEAL::715 2.00000
-DEAL::716 2.00000
-DEAL::717 2.00000
-DEAL::718 2.00000
-DEAL::719 2.00000
-DEAL::720 3.00000
-DEAL::721 3.00000
-DEAL::722 3.00000
-DEAL::723 3.00000
-DEAL::724 3.00000
-DEAL::725 3.00000
-DEAL::726 3.00000
-DEAL::727 3.00000
-DEAL::728 1.00000
-DEAL::729 1.00000
-DEAL::730 1.00000
-DEAL::731 1.00000
-DEAL::732 1.00000
-DEAL::733 1.00000
-DEAL::734 1.00000
-DEAL::735 1.00000
+DEAL::648 1.00000
+DEAL::649 1.00000
+DEAL::650 1.00000
+DEAL::651 1.00000
+DEAL::652 1.00000
+DEAL::653 1.00000
+DEAL::654 1.00000
+DEAL::655 1.00000
+DEAL::656 1.00000
+DEAL::657 1.00000
+DEAL::658 1.00000
+DEAL::659 1.00000
+DEAL::660 1.00000
+DEAL::661 1.00000
+DEAL::662 1.00000
+DEAL::663 1.00000
+DEAL::664 1.00000
+DEAL::665 1.00000
+DEAL::666 1.00000
+DEAL::667 1.00000
+DEAL::668 1.00000
+DEAL::669 1.00000
+DEAL::670 1.00000
+DEAL::671 1.00000
+DEAL::672 0
+DEAL::673 0
+DEAL::674 0
+DEAL::675 0
+DEAL::676 1.00000
+DEAL::677 1.00000
+DEAL::678 1.00000
+DEAL::679 1.00000
+DEAL::680 4.00000
+DEAL::681 4.00000
+DEAL::682 4.00000
+DEAL::683 4.00000
+DEAL::684 4.00000
+DEAL::685 4.00000
+DEAL::686 4.00000
+DEAL::687 4.00000
+DEAL::688 3.00000
+DEAL::689 3.00000
+DEAL::690 3.00000
+DEAL::691 3.00000
+DEAL::692 3.00000
+DEAL::693 3.00000
+DEAL::694 3.00000
+DEAL::695 3.00000
+DEAL::696 4.00000
+DEAL::697 4.00000
+DEAL::698 4.00000
+DEAL::699 4.00000
+DEAL::700 4.00000
+DEAL::701 4.00000
+DEAL::702 4.00000
+DEAL::703 4.00000
+DEAL::704 4.00000
+DEAL::705 4.00000
+DEAL::706 4.00000
+DEAL::707 4.00000
+DEAL::708 4.00000
+DEAL::709 4.00000
+DEAL::710 4.00000
+DEAL::711 4.00000
+DEAL::712 1.00000
+DEAL::713 1.00000
+DEAL::714 1.00000
+DEAL::715 1.00000
+DEAL::716 1.00000
+DEAL::717 1.00000
+DEAL::718 1.00000
+DEAL::719 1.00000
+DEAL::720 0
+DEAL::721 0
+DEAL::722 0
+DEAL::723 0
+DEAL::724 0
+DEAL::725 0
+DEAL::726 0
+DEAL::727 0
+DEAL::728 3.00000
+DEAL::729 3.00000
+DEAL::730 3.00000
+DEAL::731 3.00000
+DEAL::732 3.00000
+DEAL::733 3.00000
+DEAL::734 3.00000
+DEAL::735 3.00000
DEAL::DoF association:
DEAL::0 4
DEAL::1 4
DEAL::2 4
DEAL::3 4
-DEAL::4 1
-DEAL::5 4
-DEAL::6 1
+DEAL::4 4
+DEAL::5 0
+DEAL::6 4
DEAL::7 4
DEAL::8 4
DEAL::9 4
DEAL::25 4
DEAL::26 4
DEAL::27 2
-DEAL::28 2
-DEAL::29 0
+DEAL::28 1
+DEAL::29 2
DEAL::30 2
DEAL::31 2
DEAL::32 2
-DEAL::33 0
+DEAL::33 2
DEAL::34 2
DEAL::35 2
DEAL::36 2
DEAL::37 2
DEAL::38 2
DEAL::39 2
-DEAL::40 2
+DEAL::40 1
DEAL::41 2
DEAL::42 2
DEAL::43 2
DEAL::44 2
-DEAL::45 0
-DEAL::46 2
+DEAL::45 2
+DEAL::46 1
DEAL::47 2
DEAL::48 2
DEAL::49 2
DEAL::52 2
DEAL::53 2
DEAL::54 2
-DEAL::55 0
-DEAL::56 0
+DEAL::55 2
+DEAL::56 4
DEAL::57 2
-DEAL::58 0
-DEAL::59 0
-DEAL::60 0
-DEAL::61 0
-DEAL::62 0
-DEAL::63 0
-DEAL::64 0
-DEAL::65 0
-DEAL::66 0
-DEAL::67 0
-DEAL::68 0
-DEAL::69 0
-DEAL::70 0
-DEAL::71 0
-DEAL::72 0
-DEAL::73 0
-DEAL::74 0
-DEAL::75 0
-DEAL::76 0
-DEAL::77 0
-DEAL::78 3
-DEAL::79 3
-DEAL::80 3
-DEAL::81 2
-DEAL::82 3
-DEAL::83 2
-DEAL::84 2
-DEAL::85 2
-DEAL::86 2
-DEAL::87 2
-DEAL::88 3
-DEAL::89 3
-DEAL::90 3
-DEAL::91 2
-DEAL::92 2
-DEAL::93 2
-DEAL::94 2
-DEAL::95 2
-DEAL::96 3
-DEAL::97 3
-DEAL::98 3
-DEAL::99 3
-DEAL::100 3
-DEAL::101 3
-DEAL::102 3
-DEAL::103 3
-DEAL::104 3
-DEAL::105 3
-DEAL::106 3
-DEAL::107 3
-DEAL::108 3
-DEAL::109 3
-DEAL::110 3
-DEAL::111 3
-DEAL::112 3
-DEAL::113 3
-DEAL::114 0
+DEAL::58 2
+DEAL::59 2
+DEAL::60 2
+DEAL::61 2
+DEAL::62 2
+DEAL::63 2
+DEAL::64 2
+DEAL::65 2
+DEAL::66 2
+DEAL::67 2
+DEAL::68 2
+DEAL::69 2
+DEAL::70 2
+DEAL::71 2
+DEAL::72 2
+DEAL::73 2
+DEAL::74 2
+DEAL::75 2
+DEAL::76 2
+DEAL::77 2
+DEAL::78 1
+DEAL::79 1
+DEAL::80 1
+DEAL::81 1
+DEAL::82 1
+DEAL::83 1
+DEAL::84 1
+DEAL::85 1
+DEAL::86 1
+DEAL::87 1
+DEAL::88 1
+DEAL::89 1
+DEAL::90 1
+DEAL::91 1
+DEAL::92 1
+DEAL::93 1
+DEAL::94 1
+DEAL::95 1
+DEAL::96 1
+DEAL::97 1
+DEAL::98 1
+DEAL::99 1
+DEAL::100 1
+DEAL::101 1
+DEAL::102 1
+DEAL::103 1
+DEAL::104 1
+DEAL::105 1
+DEAL::106 1
+DEAL::107 1
+DEAL::108 1
+DEAL::109 1
+DEAL::110 1
+DEAL::111 1
+DEAL::112 1
+DEAL::113 1
+DEAL::114 4
DEAL::115 1
-DEAL::116 0
+DEAL::116 2
DEAL::117 1
-DEAL::118 2
-DEAL::119 3
-DEAL::120 2
-DEAL::121 2
-DEAL::122 3
-DEAL::123 1
-DEAL::124 2
-DEAL::125 1
-DEAL::126 2
-DEAL::127 2
-DEAL::128 2
-DEAL::129 2
-DEAL::130 2
-DEAL::131 2
-DEAL::132 3
-DEAL::133 3
-DEAL::134 3
-DEAL::135 3
-DEAL::136 3
-DEAL::137 3
-DEAL::138 3
-DEAL::139 3
-DEAL::140 3
-DEAL::141 3
-DEAL::142 3
-DEAL::143 3
-DEAL::144 0
-DEAL::145 1
-DEAL::146 1
-DEAL::147 1
-DEAL::148 1
-DEAL::149 1
-DEAL::150 1
-DEAL::151 1
-DEAL::152 1
-DEAL::153 1
-DEAL::154 1
-DEAL::155 1
-DEAL::156 1
-DEAL::157 1
-DEAL::158 1
-DEAL::159 1
-DEAL::160 1
-DEAL::161 1
+DEAL::118 1
+DEAL::119 1
+DEAL::120 1
+DEAL::121 1
+DEAL::122 1
+DEAL::123 4
+DEAL::124 1
+DEAL::125 4
+DEAL::126 1
+DEAL::127 1
+DEAL::128 1
+DEAL::129 1
+DEAL::130 1
+DEAL::131 1
+DEAL::132 1
+DEAL::133 1
+DEAL::134 1
+DEAL::135 1
+DEAL::136 1
+DEAL::137 1
+DEAL::138 1
+DEAL::139 1
+DEAL::140 1
+DEAL::141 1
+DEAL::142 1
+DEAL::143 1
+DEAL::144 4
+DEAL::145 4
+DEAL::146 4
+DEAL::147 4
+DEAL::148 4
+DEAL::149 4
+DEAL::150 4
+DEAL::151 4
+DEAL::152 4
+DEAL::153 4
+DEAL::154 4
+DEAL::155 4
+DEAL::156 4
+DEAL::157 4
+DEAL::158 4
+DEAL::159 4
+DEAL::160 4
+DEAL::161 4
DEAL::162 2
DEAL::163 2
DEAL::164 2
-DEAL::165 4
+DEAL::165 2
DEAL::166 2
DEAL::167 2
-DEAL::168 4
-DEAL::169 4
+DEAL::168 2
+DEAL::169 2
DEAL::170 2
-DEAL::171 4
+DEAL::171 2
DEAL::172 2
DEAL::173 2
DEAL::174 2
DEAL::175 2
DEAL::176 2
-DEAL::177 4
+DEAL::177 2
DEAL::178 2
DEAL::179 2
DEAL::180 2
-DEAL::181 4
+DEAL::181 2
DEAL::182 2
-DEAL::183 4
+DEAL::183 2
DEAL::184 2
DEAL::185 2
DEAL::186 2
DEAL::187 2
DEAL::188 2
-DEAL::189 4
-DEAL::190 4
-DEAL::191 4
-DEAL::192 4
-DEAL::193 4
+DEAL::189 2
+DEAL::190 2
+DEAL::191 2
+DEAL::192 2
+DEAL::193 2
DEAL::194 2
-DEAL::195 4
-DEAL::196 4
+DEAL::195 2
+DEAL::196 2
DEAL::197 2
-DEAL::198 4
-DEAL::199 4
-DEAL::200 4
-DEAL::201 4
+DEAL::198 2
+DEAL::199 2
+DEAL::200 2
+DEAL::201 2
DEAL::202 2
-DEAL::203 4
-DEAL::204 4
-DEAL::205 4
-DEAL::206 4
-DEAL::207 4
-DEAL::208 4
-DEAL::209 4
-DEAL::210 4
-DEAL::211 4
-DEAL::212 4
-DEAL::213 4
-DEAL::214 4
-DEAL::215 4
-DEAL::216 4
-DEAL::217 4
-DEAL::218 4
-DEAL::219 4
-DEAL::220 4
-DEAL::221 4
-DEAL::222 4
-DEAL::223 4
-DEAL::224 4
+DEAL::203 2
+DEAL::204 2
+DEAL::205 2
+DEAL::206 2
+DEAL::207 2
+DEAL::208 2
+DEAL::209 2
+DEAL::210 2
+DEAL::211 2
+DEAL::212 2
+DEAL::213 2
+DEAL::214 2
+DEAL::215 2
+DEAL::216 2
+DEAL::217 2
+DEAL::218 2
+DEAL::219 2
+DEAL::220 2
+DEAL::221 2
+DEAL::222 2
+DEAL::223 2
+DEAL::224 2
DEAL::225 2
DEAL::226 2
-DEAL::227 4
+DEAL::227 2
DEAL::228 2
DEAL::229 2
DEAL::230 2
DEAL::231 2
DEAL::232 2
DEAL::233 2
-DEAL::234 4
+DEAL::234 2
DEAL::235 2
-DEAL::236 4
+DEAL::236 2
DEAL::237 2
-DEAL::238 4
+DEAL::238 2
DEAL::239 2
DEAL::240 2
DEAL::241 2
DEAL::242 2
-DEAL::243 2
-DEAL::244 4
+DEAL::243 1
+DEAL::244 2
DEAL::245 2
DEAL::246 2
DEAL::247 2
DEAL::248 2
-DEAL::249 4
-DEAL::250 4
+DEAL::249 2
+DEAL::250 2
DEAL::251 2
-DEAL::252 4
+DEAL::252 2
DEAL::253 2
-DEAL::254 4
-DEAL::255 4
-DEAL::256 0
-DEAL::257 4
+DEAL::254 2
+DEAL::255 2
+DEAL::256 2
+DEAL::257 2
DEAL::258 2
DEAL::259 2
-DEAL::260 4
-DEAL::261 4
-DEAL::262 4
-DEAL::263 4
-DEAL::264 4
-DEAL::265 4
-DEAL::266 4
-DEAL::267 2
-DEAL::268 3
-DEAL::269 2
-DEAL::270 3
-DEAL::271 2
-DEAL::272 3
-DEAL::273 2
-DEAL::274 3
-DEAL::275 2
-DEAL::276 2
-DEAL::277 2
-DEAL::278 2
-DEAL::279 2
-DEAL::280 3
-DEAL::281 2
-DEAL::282 2
-DEAL::283 2
-DEAL::284 2
-DEAL::285 2
-DEAL::286 3
-DEAL::287 2
-DEAL::288 2
-DEAL::289 2
-DEAL::290 2
-DEAL::291 2
-DEAL::292 2
-DEAL::293 2
+DEAL::260 2
+DEAL::261 2
+DEAL::262 2
+DEAL::263 2
+DEAL::264 2
+DEAL::265 2
+DEAL::266 2
+DEAL::267 1
+DEAL::268 1
+DEAL::269 0
+DEAL::270 0
+DEAL::271 1
+DEAL::272 1
+DEAL::273 1
+DEAL::274 1
+DEAL::275 1
+DEAL::276 1
+DEAL::277 1
+DEAL::278 0
+DEAL::279 1
+DEAL::280 1
+DEAL::281 1
+DEAL::282 1
+DEAL::283 1
+DEAL::284 1
+DEAL::285 1
+DEAL::286 0
+DEAL::287 1
+DEAL::288 1
+DEAL::289 1
+DEAL::290 1
+DEAL::291 1
+DEAL::292 1
+DEAL::293 1
DEAL::294 2
-DEAL::295 2
-DEAL::296 2
-DEAL::297 2
-DEAL::298 2
+DEAL::295 0
+DEAL::296 1
+DEAL::297 1
+DEAL::298 1
DEAL::299 2
-DEAL::300 2
-DEAL::301 2
-DEAL::302 2
+DEAL::300 0
+DEAL::301 1
+DEAL::302 1
DEAL::303 2
-DEAL::304 2
-DEAL::305 2
-DEAL::306 2
+DEAL::304 1
+DEAL::305 1
+DEAL::306 1
DEAL::307 2
DEAL::308 2
-DEAL::309 2
+DEAL::309 1
DEAL::310 2
-DEAL::311 2
-DEAL::312 2
-DEAL::313 2
-DEAL::314 2
-DEAL::315 2
-DEAL::316 2
-DEAL::317 4
-DEAL::318 2
-DEAL::319 3
-DEAL::320 2
-DEAL::321 3
-DEAL::322 2
-DEAL::323 3
-DEAL::324 3
-DEAL::325 2
-DEAL::326 2
-DEAL::327 2
-DEAL::328 2
-DEAL::329 2
-DEAL::330 3
-DEAL::331 2
-DEAL::332 2
-DEAL::333 2
-DEAL::334 2
-DEAL::335 2
-DEAL::336 2
-DEAL::337 2
-DEAL::338 3
-DEAL::339 2
-DEAL::340 2
-DEAL::341 2
-DEAL::342 3
-DEAL::343 2
-DEAL::344 2
-DEAL::345 2
-DEAL::346 2
-DEAL::347 2
-DEAL::348 0
-DEAL::349 2
-DEAL::350 2
-DEAL::351 2
-DEAL::352 2
-DEAL::353 2
-DEAL::354 2
-DEAL::355 2
-DEAL::356 2
-DEAL::357 2
-DEAL::358 2
-DEAL::359 2
-DEAL::360 2
-DEAL::361 2
-DEAL::362 2
-DEAL::363 0
-DEAL::364 2
-DEAL::365 2
-DEAL::366 2
-DEAL::367 2
-DEAL::368 2
-DEAL::369 2
-DEAL::370 2
-DEAL::371 3
-DEAL::372 4
-DEAL::373 4
-DEAL::374 3
-DEAL::375 2
-DEAL::376 3
-DEAL::377 4
-DEAL::378 3
-DEAL::379 4
-DEAL::380 4
-DEAL::381 2
-DEAL::382 3
-DEAL::383 3
-DEAL::384 3
-DEAL::385 3
-DEAL::386 4
-DEAL::387 3
-DEAL::388 3
-DEAL::389 3
-DEAL::390 3
-DEAL::391 4
-DEAL::392 4
-DEAL::393 3
-DEAL::394 3
-DEAL::395 4
-DEAL::396 4
-DEAL::397 0
-DEAL::398 0
-DEAL::399 4
-DEAL::400 4
-DEAL::401 4
-DEAL::402 4
-DEAL::403 3
-DEAL::404 0
-DEAL::405 4
-DEAL::406 4
-DEAL::407 4
-DEAL::408 4
-DEAL::409 4
-DEAL::410 4
-DEAL::411 4
-DEAL::412 4
-DEAL::413 4
-DEAL::414 4
-DEAL::415 4
-DEAL::416 4
-DEAL::417 4
-DEAL::418 4
-DEAL::419 4
-DEAL::420 3
-DEAL::421 3
-DEAL::422 3
-DEAL::423 4
-DEAL::424 4
-DEAL::425 4
-DEAL::426 4
-DEAL::427 4
-DEAL::428 4
-DEAL::429 3
-DEAL::430 4
-DEAL::431 3
-DEAL::432 0
-DEAL::433 3
-DEAL::434 0
-DEAL::435 3
-DEAL::436 2
-DEAL::437 3
-DEAL::438 3
-DEAL::439 2
-DEAL::440 3
-DEAL::441 2
-DEAL::442 3
-DEAL::443 3
-DEAL::444 3
-DEAL::445 2
-DEAL::446 3
-DEAL::447 0
-DEAL::448 0
-DEAL::449 0
-DEAL::450 3
-DEAL::451 0
-DEAL::452 0
-DEAL::453 3
-DEAL::454 3
-DEAL::455 3
-DEAL::456 3
-DEAL::457 3
-DEAL::458 3
-DEAL::459 3
-DEAL::460 3
-DEAL::461 3
-DEAL::462 3
-DEAL::463 0
-DEAL::464 3
-DEAL::465 3
-DEAL::466 3
-DEAL::467 3
-DEAL::468 3
-DEAL::469 3
-DEAL::470 3
-DEAL::471 0
-DEAL::472 1
-DEAL::473 1
-DEAL::474 1
-DEAL::475 1
-DEAL::476 0
-DEAL::477 1
-DEAL::478 1
-DEAL::479 1
-DEAL::480 1
-DEAL::481 1
-DEAL::482 1
-DEAL::483 1
-DEAL::484 1
-DEAL::485 0
-DEAL::486 1
-DEAL::487 1
-DEAL::488 1
-DEAL::489 1
-DEAL::490 1
-DEAL::491 1
-DEAL::492 1
-DEAL::493 1
-DEAL::494 1
-DEAL::495 1
-DEAL::496 1
-DEAL::497 1
-DEAL::498 1
-DEAL::499 1
-DEAL::500 1
-DEAL::501 1
-DEAL::502 1
-DEAL::503 1
-DEAL::504 1
-DEAL::505 1
-DEAL::506 0
-DEAL::507 1
-DEAL::508 1
-DEAL::509 1
-DEAL::510 1
-DEAL::511 1
-DEAL::512 1
-DEAL::513 1
-DEAL::514 1
-DEAL::515 1
-DEAL::516 0
-DEAL::517 0
-DEAL::518 1
-DEAL::519 1
-DEAL::520 0
-DEAL::521 1
-DEAL::522 0
-DEAL::523 0
-DEAL::524 1
-DEAL::525 0
-DEAL::526 1
-DEAL::527 1
-DEAL::528 1
-DEAL::529 1
-DEAL::530 0
-DEAL::531 1
-DEAL::532 1
-DEAL::533 1
-DEAL::534 0
-DEAL::535 1
-DEAL::536 1
-DEAL::537 0
-DEAL::538 0
-DEAL::539 1
-DEAL::540 1
-DEAL::541 1
-DEAL::542 1
-DEAL::543 1
-DEAL::544 0
-DEAL::545 1
-DEAL::546 1
-DEAL::547 1
-DEAL::548 1
-DEAL::549 1
-DEAL::550 1
-DEAL::551 1
-DEAL::552 1
-DEAL::553 1
-DEAL::554 1
-DEAL::555 0
-DEAL::556 1
-DEAL::557 1
-DEAL::558 1
-DEAL::559 1
-DEAL::560 1
-DEAL::561 1
-DEAL::562 0
-DEAL::563 1
+DEAL::311 1
+DEAL::312 1
+DEAL::313 1
+DEAL::314 1
+DEAL::315 1
+DEAL::316 1
+DEAL::317 0
+DEAL::318 1
+DEAL::319 0
+DEAL::320 1
+DEAL::321 1
+DEAL::322 1
+DEAL::323 0
+DEAL::324 0
+DEAL::325 1
+DEAL::326 0
+DEAL::327 1
+DEAL::328 1
+DEAL::329 1
+DEAL::330 1
+DEAL::331 1
+DEAL::332 1
+DEAL::333 1
+DEAL::334 1
+DEAL::335 1
+DEAL::336 1
+DEAL::337 1
+DEAL::338 1
+DEAL::339 1
+DEAL::340 1
+DEAL::341 1
+DEAL::342 1
+DEAL::343 1
+DEAL::344 1
+DEAL::345 1
+DEAL::346 1
+DEAL::347 1
+DEAL::348 2
+DEAL::349 1
+DEAL::350 1
+DEAL::351 1
+DEAL::352 1
+DEAL::353 1
+DEAL::354 1
+DEAL::355 1
+DEAL::356 1
+DEAL::357 1
+DEAL::358 1
+DEAL::359 1
+DEAL::360 1
+DEAL::361 1
+DEAL::362 1
+DEAL::363 1
+DEAL::364 1
+DEAL::365 1
+DEAL::366 1
+DEAL::367 1
+DEAL::368 1
+DEAL::369 1
+DEAL::370 1
+DEAL::371 0
+DEAL::372 0
+DEAL::373 0
+DEAL::374 1
+DEAL::375 1
+DEAL::376 0
+DEAL::377 0
+DEAL::378 0
+DEAL::379 0
+DEAL::380 0
+DEAL::381 1
+DEAL::382 1
+DEAL::383 0
+DEAL::384 1
+DEAL::385 0
+DEAL::386 0
+DEAL::387 0
+DEAL::388 0
+DEAL::389 0
+DEAL::390 0
+DEAL::391 0
+DEAL::392 0
+DEAL::393 1
+DEAL::394 0
+DEAL::395 3
+DEAL::396 0
+DEAL::397 3
+DEAL::398 4
+DEAL::399 0
+DEAL::400 0
+DEAL::401 3
+DEAL::402 0
+DEAL::403 0
+DEAL::404 4
+DEAL::405 3
+DEAL::406 0
+DEAL::407 0
+DEAL::408 0
+DEAL::409 3
+DEAL::410 0
+DEAL::411 0
+DEAL::412 0
+DEAL::413 0
+DEAL::414 0
+DEAL::415 0
+DEAL::416 0
+DEAL::417 0
+DEAL::418 0
+DEAL::419 0
+DEAL::420 0
+DEAL::421 0
+DEAL::422 0
+DEAL::423 0
+DEAL::424 0
+DEAL::425 0
+DEAL::426 0
+DEAL::427 0
+DEAL::428 0
+DEAL::429 0
+DEAL::430 0
+DEAL::431 1
+DEAL::432 2
+DEAL::433 1
+DEAL::434 1
+DEAL::435 1
+DEAL::436 1
+DEAL::437 1
+DEAL::438 1
+DEAL::439 1
+DEAL::440 1
+DEAL::441 1
+DEAL::442 1
+DEAL::443 1
+DEAL::444 1
+DEAL::445 1
+DEAL::446 1
+DEAL::447 1
+DEAL::448 4
+DEAL::449 2
+DEAL::450 1
+DEAL::451 4
+DEAL::452 4
+DEAL::453 0
+DEAL::454 1
+DEAL::455 1
+DEAL::456 1
+DEAL::457 1
+DEAL::458 1
+DEAL::459 1
+DEAL::460 1
+DEAL::461 1
+DEAL::462 1
+DEAL::463 1
+DEAL::464 0
+DEAL::465 0
+DEAL::466 0
+DEAL::467 0
+DEAL::468 0
+DEAL::469 1
+DEAL::470 0
+DEAL::471 3
+DEAL::472 3
+DEAL::473 3
+DEAL::474 3
+DEAL::475 3
+DEAL::476 3
+DEAL::477 3
+DEAL::478 3
+DEAL::479 3
+DEAL::480 3
+DEAL::481 3
+DEAL::482 3
+DEAL::483 3
+DEAL::484 3
+DEAL::485 3
+DEAL::486 3
+DEAL::487 3
+DEAL::488 3
+DEAL::489 3
+DEAL::490 3
+DEAL::491 3
+DEAL::492 3
+DEAL::493 3
+DEAL::494 3
+DEAL::495 3
+DEAL::496 3
+DEAL::497 3
+DEAL::498 3
+DEAL::499 3
+DEAL::500 3
+DEAL::501 3
+DEAL::502 4
+DEAL::503 3
+DEAL::504 3
+DEAL::505 3
+DEAL::506 3
+DEAL::507 3
+DEAL::508 3
+DEAL::509 3
+DEAL::510 3
+DEAL::511 3
+DEAL::512 3
+DEAL::513 3
+DEAL::514 3
+DEAL::515 3
+DEAL::516 3
+DEAL::517 3
+DEAL::518 3
+DEAL::519 3
+DEAL::520 3
+DEAL::521 3
+DEAL::522 3
+DEAL::523 3
+DEAL::524 3
+DEAL::525 3
+DEAL::526 3
+DEAL::527 3
+DEAL::528 3
+DEAL::529 3
+DEAL::530 3
+DEAL::531 3
+DEAL::532 3
+DEAL::533 3
+DEAL::534 4
+DEAL::535 3
+DEAL::536 3
+DEAL::537 3
+DEAL::538 3
+DEAL::539 3
+DEAL::540 3
+DEAL::541 3
+DEAL::542 3
+DEAL::543 3
+DEAL::544 3
+DEAL::545 3
+DEAL::546 3
+DEAL::547 3
+DEAL::548 3
+DEAL::549 3
+DEAL::550 3
+DEAL::551 3
+DEAL::552 3
+DEAL::553 3
+DEAL::554 3
+DEAL::555 3
+DEAL::556 3
+DEAL::557 3
+DEAL::558 3
+DEAL::559 3
+DEAL::560 3
+DEAL::561 3
+DEAL::562 3
+DEAL::563 3
DEAL::564 2
DEAL::565 2
DEAL::566 2
DEAL::589 2
DEAL::590 2
DEAL::591 2
-DEAL::592 2
-DEAL::593 2
-DEAL::594 2
+DEAL::592 1
+DEAL::593 1
+DEAL::594 1
DEAL::595 2
DEAL::596 2
DEAL::597 2
-DEAL::598 2
+DEAL::598 1
DEAL::599 2
DEAL::600 2
DEAL::601 2
-DEAL::602 2
+DEAL::602 1
DEAL::603 2
DEAL::604 2
DEAL::605 2
DEAL::616 2
DEAL::617 2
DEAL::618 2
-DEAL::619 2
+DEAL::619 1
DEAL::620 2
DEAL::621 2
DEAL::622 2
DEAL::646 2
DEAL::647 2
DEAL::648 2
-DEAL::649 2
+DEAL::649 1
DEAL::650 2
DEAL::651 2
DEAL::652 2
DEAL::653 2
-DEAL::654 4
-DEAL::655 4
-DEAL::656 2
-DEAL::657 4
-DEAL::658 4
-DEAL::659 4
-DEAL::660 4
-DEAL::661 4
-DEAL::662 2
-DEAL::663 4
-DEAL::664 4
-DEAL::665 4
-DEAL::666 4
-DEAL::667 4
-DEAL::668 4
-DEAL::669 4
-DEAL::670 4
-DEAL::671 4
-DEAL::672 4
+DEAL::654 0
+DEAL::655 0
+DEAL::656 0
+DEAL::657 2
+DEAL::658 2
+DEAL::659 2
+DEAL::660 2
+DEAL::661 2
+DEAL::662 1
+DEAL::663 2
+DEAL::664 0
+DEAL::665 0
+DEAL::666 2
+DEAL::667 2
+DEAL::668 2
+DEAL::669 2
+DEAL::670 2
+DEAL::671 2
+DEAL::672 0
DEAL::673 4
-DEAL::674 4
-DEAL::675 4
-DEAL::676 4
-DEAL::677 4
+DEAL::674 0
+DEAL::675 0
+DEAL::676 0
+DEAL::677 0
DEAL::678 4
-DEAL::679 4
-DEAL::680 4
-DEAL::681 4
-DEAL::682 4
+DEAL::679 0
+DEAL::680 0
+DEAL::681 0
+DEAL::682 0
DEAL::683 4
-DEAL::684 4
-DEAL::685 4
-DEAL::686 4
-DEAL::687 4
-DEAL::688 4
-DEAL::689 4
-DEAL::690 4
+DEAL::684 0
+DEAL::685 0
+DEAL::686 0
+DEAL::687 0
+DEAL::688 0
+DEAL::689 0
+DEAL::690 3
DEAL::691 4
-DEAL::692 4
-DEAL::693 4
-DEAL::694 4
-DEAL::695 4
-DEAL::696 4
-DEAL::697 4
-DEAL::698 4
-DEAL::699 4
-DEAL::700 4
+DEAL::692 3
+DEAL::693 2
+DEAL::694 2
+DEAL::695 2
+DEAL::696 3
+DEAL::697 2
+DEAL::698 2
+DEAL::699 3
+DEAL::700 3
DEAL::701 4
-DEAL::702 4
+DEAL::702 2
DEAL::703 4
-DEAL::704 4
-DEAL::705 4
-DEAL::706 4
-DEAL::707 4
+DEAL::704 2
+DEAL::705 2
+DEAL::706 2
+DEAL::707 2
DEAL::708 4
-DEAL::709 4
+DEAL::709 3
DEAL::710 4
DEAL::711 4
DEAL::712 4
-DEAL::713 4
+DEAL::713 2
DEAL::714 4
DEAL::715 4
DEAL::716 4
DEAL::717 4
-DEAL::718 4
+DEAL::718 2
DEAL::719 4
-DEAL::720 4
-DEAL::721 2
+DEAL::720 2
+DEAL::721 1
DEAL::722 2
-DEAL::723 2
-DEAL::724 4
-DEAL::725 4
-DEAL::726 4
-DEAL::727 4
-DEAL::728 2
-DEAL::729 4
+DEAL::723 0
+DEAL::724 2
+DEAL::725 0
+DEAL::726 2
+DEAL::727 2
+DEAL::728 1
+DEAL::729 2
DEAL::730 2
-DEAL::731 4
-DEAL::732 4
-DEAL::733 4
-DEAL::734 2
-DEAL::735 4
-DEAL::736 4
-DEAL::737 4
+DEAL::731 0
+DEAL::732 0
+DEAL::733 0
+DEAL::734 0
+DEAL::735 0
+DEAL::736 0
+DEAL::737 0
DEAL::738 2
DEAL::739 2
-DEAL::740 0
-DEAL::741 4
-DEAL::742 4
-DEAL::743 4
-DEAL::744 4
-DEAL::745 4
+DEAL::740 3
+DEAL::741 3
+DEAL::742 2
+DEAL::743 2
+DEAL::744 0
+DEAL::745 3
DEAL::746 2
-DEAL::747 4
+DEAL::747 2
DEAL::748 2
DEAL::749 2
DEAL::750 2
DEAL::786 2
DEAL::787 2
DEAL::788 2
-DEAL::789 2
+DEAL::789 1
DEAL::790 2
DEAL::791 2
DEAL::792 2
DEAL::811 2
DEAL::812 2
DEAL::813 2
-DEAL::814 4
-DEAL::815 4
-DEAL::816 4
-DEAL::817 4
-DEAL::818 4
-DEAL::819 3
-DEAL::820 4
-DEAL::821 3
-DEAL::822 4
-DEAL::823 4
-DEAL::824 4
-DEAL::825 4
-DEAL::826 4
-DEAL::827 4
-DEAL::828 3
-DEAL::829 4
-DEAL::830 4
-DEAL::831 4
-DEAL::832 4
-DEAL::833 4
-DEAL::834 4
-DEAL::835 4
-DEAL::836 4
-DEAL::837 4
-DEAL::838 4
-DEAL::839 3
-DEAL::840 4
-DEAL::841 4
-DEAL::842 4
-DEAL::843 3
-DEAL::844 4
-DEAL::845 4
-DEAL::846 4
-DEAL::847 4
-DEAL::848 3
-DEAL::849 3
-DEAL::850 4
-DEAL::851 4
-DEAL::852 4
-DEAL::853 4
-DEAL::854 4
-DEAL::855 4
-DEAL::856 4
-DEAL::857 4
-DEAL::858 4
-DEAL::859 4
-DEAL::860 4
-DEAL::861 4
-DEAL::862 4
-DEAL::863 4
-DEAL::864 4
-DEAL::865 4
-DEAL::866 4
-DEAL::867 4
-DEAL::868 4
-DEAL::869 4
-DEAL::870 4
-DEAL::871 4
-DEAL::872 4
-DEAL::873 4
-DEAL::874 4
-DEAL::875 4
-DEAL::876 4
-DEAL::877 4
-DEAL::878 4
-DEAL::879 4
-DEAL::880 4
-DEAL::881 4
-DEAL::882 4
-DEAL::883 4
-DEAL::884 4
-DEAL::885 4
-DEAL::886 4
-DEAL::887 4
-DEAL::888 4
-DEAL::889 4
-DEAL::890 3
-DEAL::891 4
-DEAL::892 4
-DEAL::893 3
-DEAL::894 3
-DEAL::895 4
-DEAL::896 4
-DEAL::897 3
-DEAL::898 4
-DEAL::899 4
-DEAL::900 4
-DEAL::901 3
-DEAL::902 3
-DEAL::903 3
-DEAL::904 3
-DEAL::905 3
-DEAL::906 3
-DEAL::907 4
-DEAL::908 3
-DEAL::909 3
-DEAL::910 3
-DEAL::911 3
-DEAL::912 3
-DEAL::913 3
-DEAL::914 3
-DEAL::915 4
-DEAL::916 3
-DEAL::917 3
-DEAL::918 4
-DEAL::919 4
-DEAL::920 4
-DEAL::921 4
-DEAL::922 4
-DEAL::923 4
-DEAL::924 4
-DEAL::925 4
-DEAL::926 4
-DEAL::927 4
-DEAL::928 4
-DEAL::929 4
-DEAL::930 4
-DEAL::931 4
-DEAL::932 4
-DEAL::933 4
-DEAL::934 4
-DEAL::935 4
-DEAL::936 3
-DEAL::937 3
-DEAL::938 3
-DEAL::939 3
-DEAL::940 3
-DEAL::941 3
-DEAL::942 3
-DEAL::943 3
-DEAL::944 3
-DEAL::945 3
-DEAL::946 3
-DEAL::947 3
-DEAL::948 3
-DEAL::949 3
-DEAL::950 3
-DEAL::951 3
-DEAL::952 3
-DEAL::953 3
-DEAL::954 3
-DEAL::955 3
-DEAL::956 3
-DEAL::957 3
-DEAL::958 3
-DEAL::959 3
-DEAL::960 3
-DEAL::961 3
-DEAL::962 3
-DEAL::963 3
-DEAL::964 3
-DEAL::965 3
-DEAL::966 3
-DEAL::967 3
-DEAL::968 3
-DEAL::969 3
-DEAL::970 3
-DEAL::971 3
-DEAL::972 2
-DEAL::973 2
-DEAL::974 3
-DEAL::975 2
-DEAL::976 3
-DEAL::977 2
-DEAL::978 3
-DEAL::979 3
-DEAL::980 3
-DEAL::981 3
-DEAL::982 3
-DEAL::983 3
-DEAL::984 3
-DEAL::985 3
-DEAL::986 3
-DEAL::987 3
-DEAL::988 3
-DEAL::989 3
-DEAL::990 3
-DEAL::991 3
-DEAL::992 3
-DEAL::993 3
-DEAL::994 3
-DEAL::995 3
-DEAL::996 3
-DEAL::997 3
-DEAL::998 3
-DEAL::999 3
-DEAL::1000 2
-DEAL::1001 3
-DEAL::1002 3
-DEAL::1003 3
-DEAL::1004 3
-DEAL::1005 3
-DEAL::1006 3
-DEAL::1007 3
-DEAL::1008 3
-DEAL::1009 3
-DEAL::1010 3
-DEAL::1011 3
-DEAL::1012 3
-DEAL::1013 3
-DEAL::1014 3
-DEAL::1015 3
-DEAL::1016 3
-DEAL::1017 3
-DEAL::1018 3
-DEAL::1019 3
-DEAL::1020 3
-DEAL::1021 3
-DEAL::1022 3
-DEAL::1023 3
-DEAL::1024 3
-DEAL::1025 3
-DEAL::1026 3
-DEAL::1027 3
-DEAL::1028 3
-DEAL::1029 3
-DEAL::1030 3
-DEAL::1031 3
-DEAL::1032 3
-DEAL::1033 3
-DEAL::1034 3
-DEAL::1035 3
-DEAL::1036 3
-DEAL::1037 3
-DEAL::1038 3
-DEAL::1039 3
-DEAL::1040 3
-DEAL::1041 3
-DEAL::1042 3
-DEAL::1043 3
-DEAL::1044 3
-DEAL::1045 3
-DEAL::1046 3
-DEAL::1047 3
-DEAL::1048 3
-DEAL::1049 3
-DEAL::1050 3
-DEAL::1051 3
-DEAL::1052 3
-DEAL::1053 3
-DEAL::1054 3
-DEAL::1055 3
-DEAL::1056 3
-DEAL::1057 3
-DEAL::1058 3
-DEAL::1059 3
-DEAL::1060 3
-DEAL::1061 3
-DEAL::1062 3
-DEAL::1063 3
-DEAL::1064 3
-DEAL::1065 3
-DEAL::1066 3
-DEAL::1067 3
-DEAL::1068 3
-DEAL::1069 3
-DEAL::1070 3
-DEAL::1071 3
-DEAL::1072 3
-DEAL::1073 3
-DEAL::1074 3
-DEAL::1075 3
-DEAL::1076 3
-DEAL::1077 3
-DEAL::1078 3
-DEAL::1079 3
-DEAL::1080 3
-DEAL::1081 3
-DEAL::1082 3
-DEAL::1083 3
-DEAL::1084 3
-DEAL::1085 3
-DEAL::1086 3
-DEAL::1087 3
-DEAL::1088 3
-DEAL::1089 3
-DEAL::1090 3
-DEAL::1091 4
-DEAL::1092 3
-DEAL::1093 3
-DEAL::1094 3
-DEAL::1095 3
-DEAL::1096 4
-DEAL::1097 3
-DEAL::1098 3
-DEAL::1099 3
-DEAL::1100 4
-DEAL::1101 3
-DEAL::1102 3
-DEAL::1103 4
-DEAL::1104 4
-DEAL::1105 3
-DEAL::1106 4
-DEAL::1107 4
-DEAL::1108 4
-DEAL::1109 4
-DEAL::1110 4
-DEAL::1111 4
-DEAL::1112 4
-DEAL::1113 4
-DEAL::1114 4
-DEAL::1115 3
-DEAL::1116 3
-DEAL::1117 3
-DEAL::1118 3
-DEAL::1119 3
-DEAL::1120 3
-DEAL::1121 3
-DEAL::1122 3
-DEAL::1123 3
-DEAL::1124 3
-DEAL::1125 3
-DEAL::1126 3
-DEAL::1127 3
-DEAL::1128 3
-DEAL::1129 3
-DEAL::1130 3
-DEAL::1131 3
-DEAL::1132 3
-DEAL::1133 4
-DEAL::1134 3
-DEAL::1135 3
-DEAL::1136 3
-DEAL::1137 3
-DEAL::1138 3
-DEAL::1139 3
-DEAL::1140 3
-DEAL::1141 3
-DEAL::1142 3
-DEAL::1143 3
-DEAL::1144 3
-DEAL::1145 4
-DEAL::1146 3
-DEAL::1147 3
-DEAL::1148 4
-DEAL::1149 4
-DEAL::1150 4
-DEAL::1151 4
-DEAL::1152 4
-DEAL::1153 4
-DEAL::1154 4
-DEAL::1155 4
-DEAL::1156 4
-DEAL::1157 4
-DEAL::1158 4
-DEAL::1159 4
-DEAL::1160 4
-DEAL::1161 4
-DEAL::1162 4
-DEAL::1163 4
-DEAL::1164 4
-DEAL::1165 4
-DEAL::1166 4
-DEAL::1167 4
-DEAL::1168 4
-DEAL::1169 4
-DEAL::1170 4
-DEAL::1171 4
-DEAL::1172 4
-DEAL::1173 4
-DEAL::1174 4
-DEAL::1175 4
-DEAL::1176 4
-DEAL::1177 4
-DEAL::1178 4
-DEAL::1179 4
-DEAL::1180 4
-DEAL::1181 4
-DEAL::1182 1
-DEAL::1183 4
-DEAL::1184 1
-DEAL::1185 4
-DEAL::1186 4
-DEAL::1187 4
-DEAL::1188 4
-DEAL::1189 4
-DEAL::1190 1
-DEAL::1191 4
-DEAL::1192 1
-DEAL::1193 4
-DEAL::1194 4
-DEAL::1195 4
-DEAL::1196 4
-DEAL::1197 4
-DEAL::1198 4
-DEAL::1199 4
-DEAL::1200 0
-DEAL::1201 4
-DEAL::1202 0
-DEAL::1203 2
-DEAL::1204 4
-DEAL::1205 4
-DEAL::1206 4
-DEAL::1207 4
-DEAL::1208 4
-DEAL::1209 4
-DEAL::1210 4
-DEAL::1211 4
-DEAL::1212 0
-DEAL::1213 0
-DEAL::1214 0
-DEAL::1215 0
-DEAL::1216 4
-DEAL::1217 1
-DEAL::1218 4
-DEAL::1219 4
-DEAL::1220 4
-DEAL::1221 0
-DEAL::1222 4
-DEAL::1223 4
-DEAL::1224 0
-DEAL::1225 4
-DEAL::1226 0
-DEAL::1227 0
-DEAL::1228 4
-DEAL::1229 1
-DEAL::1230 4
-DEAL::1231 4
-DEAL::1232 4
-DEAL::1233 4
-DEAL::1234 4
-DEAL::1235 4
-DEAL::1236 1
-DEAL::1237 1
-DEAL::1238 0
-DEAL::1239 1
-DEAL::1240 1
-DEAL::1241 4
-DEAL::1242 1
-DEAL::1243 4
-DEAL::1244 0
-DEAL::1245 4
-DEAL::1246 4
-DEAL::1247 1
-DEAL::1248 4
-DEAL::1249 4
+DEAL::814 0
+DEAL::815 0
+DEAL::816 0
+DEAL::817 0
+DEAL::818 0
+DEAL::819 0
+DEAL::820 0
+DEAL::821 0
+DEAL::822 0
+DEAL::823 0
+DEAL::824 0
+DEAL::825 0
+DEAL::826 0
+DEAL::827 0
+DEAL::828 0
+DEAL::829 0
+DEAL::830 0
+DEAL::831 0
+DEAL::832 0
+DEAL::833 0
+DEAL::834 0
+DEAL::835 0
+DEAL::836 0
+DEAL::837 0
+DEAL::838 0
+DEAL::839 0
+DEAL::840 0
+DEAL::841 0
+DEAL::842 0
+DEAL::843 0
+DEAL::844 0
+DEAL::845 0
+DEAL::846 0
+DEAL::847 0
+DEAL::848 0
+DEAL::849 0
+DEAL::850 0
+DEAL::851 0
+DEAL::852 0
+DEAL::853 0
+DEAL::854 0
+DEAL::855 0
+DEAL::856 0
+DEAL::857 0
+DEAL::858 0
+DEAL::859 0
+DEAL::860 0
+DEAL::861 0
+DEAL::862 0
+DEAL::863 0
+DEAL::864 0
+DEAL::865 0
+DEAL::866 0
+DEAL::867 0
+DEAL::868 0
+DEAL::869 0
+DEAL::870 0
+DEAL::871 0
+DEAL::872 0
+DEAL::873 0
+DEAL::874 0
+DEAL::875 0
+DEAL::876 0
+DEAL::877 0
+DEAL::878 0
+DEAL::879 0
+DEAL::880 0
+DEAL::881 0
+DEAL::882 0
+DEAL::883 0
+DEAL::884 0
+DEAL::885 0
+DEAL::886 0
+DEAL::887 0
+DEAL::888 0
+DEAL::889 0
+DEAL::890 0
+DEAL::891 0
+DEAL::892 0
+DEAL::893 0
+DEAL::894 0
+DEAL::895 0
+DEAL::896 0
+DEAL::897 0
+DEAL::898 0
+DEAL::899 0
+DEAL::900 0
+DEAL::901 0
+DEAL::902 0
+DEAL::903 0
+DEAL::904 0
+DEAL::905 0
+DEAL::906 0
+DEAL::907 0
+DEAL::908 0
+DEAL::909 0
+DEAL::910 0
+DEAL::911 0
+DEAL::912 0
+DEAL::913 0
+DEAL::914 0
+DEAL::915 0
+DEAL::916 0
+DEAL::917 0
+DEAL::918 0
+DEAL::919 0
+DEAL::920 0
+DEAL::921 0
+DEAL::922 0
+DEAL::923 0
+DEAL::924 0
+DEAL::925 0
+DEAL::926 0
+DEAL::927 0
+DEAL::928 0
+DEAL::929 0
+DEAL::930 0
+DEAL::931 0
+DEAL::932 0
+DEAL::933 0
+DEAL::934 0
+DEAL::935 0
+DEAL::936 1
+DEAL::937 0
+DEAL::938 1
+DEAL::939 0
+DEAL::940 1
+DEAL::941 1
+DEAL::942 1
+DEAL::943 0
+DEAL::944 0
+DEAL::945 0
+DEAL::946 0
+DEAL::947 0
+DEAL::948 0
+DEAL::949 0
+DEAL::950 0
+DEAL::951 1
+DEAL::952 0
+DEAL::953 0
+DEAL::954 0
+DEAL::955 0
+DEAL::956 0
+DEAL::957 0
+DEAL::958 0
+DEAL::959 0
+DEAL::960 0
+DEAL::961 0
+DEAL::962 0
+DEAL::963 0
+DEAL::964 0
+DEAL::965 0
+DEAL::966 1
+DEAL::967 0
+DEAL::968 0
+DEAL::969 0
+DEAL::970 1
+DEAL::971 0
+DEAL::972 1
+DEAL::973 1
+DEAL::974 1
+DEAL::975 1
+DEAL::976 1
+DEAL::977 1
+DEAL::978 1
+DEAL::979 1
+DEAL::980 1
+DEAL::981 1
+DEAL::982 1
+DEAL::983 1
+DEAL::984 1
+DEAL::985 1
+DEAL::986 1
+DEAL::987 1
+DEAL::988 1
+DEAL::989 1
+DEAL::990 1
+DEAL::991 0
+DEAL::992 1
+DEAL::993 0
+DEAL::994 1
+DEAL::995 1
+DEAL::996 1
+DEAL::997 1
+DEAL::998 1
+DEAL::999 1
+DEAL::1000 1
+DEAL::1001 1
+DEAL::1002 0
+DEAL::1003 0
+DEAL::1004 0
+DEAL::1005 0
+DEAL::1006 0
+DEAL::1007 0
+DEAL::1008 0
+DEAL::1009 0
+DEAL::1010 0
+DEAL::1011 0
+DEAL::1012 0
+DEAL::1013 0
+DEAL::1014 0
+DEAL::1015 0
+DEAL::1016 0
+DEAL::1017 0
+DEAL::1018 0
+DEAL::1019 0
+DEAL::1020 0
+DEAL::1021 0
+DEAL::1022 0
+DEAL::1023 0
+DEAL::1024 0
+DEAL::1025 0
+DEAL::1026 0
+DEAL::1027 0
+DEAL::1028 0
+DEAL::1029 0
+DEAL::1030 0
+DEAL::1031 0
+DEAL::1032 0
+DEAL::1033 0
+DEAL::1034 0
+DEAL::1035 0
+DEAL::1036 0
+DEAL::1037 0
+DEAL::1038 0
+DEAL::1039 0
+DEAL::1040 0
+DEAL::1041 0
+DEAL::1042 0
+DEAL::1043 0
+DEAL::1044 0
+DEAL::1045 0
+DEAL::1046 0
+DEAL::1047 0
+DEAL::1048 0
+DEAL::1049 0
+DEAL::1050 0
+DEAL::1051 1
+DEAL::1052 0
+DEAL::1053 1
+DEAL::1054 0
+DEAL::1055 1
+DEAL::1056 0
+DEAL::1057 0
+DEAL::1058 0
+DEAL::1059 0
+DEAL::1060 0
+DEAL::1061 0
+DEAL::1062 0
+DEAL::1063 0
+DEAL::1064 0
+DEAL::1065 0
+DEAL::1066 0
+DEAL::1067 0
+DEAL::1068 0
+DEAL::1069 1
+DEAL::1070 0
+DEAL::1071 0
+DEAL::1072 0
+DEAL::1073 0
+DEAL::1074 0
+DEAL::1075 0
+DEAL::1076 0
+DEAL::1077 1
+DEAL::1078 0
+DEAL::1079 0
+DEAL::1080 0
+DEAL::1081 0
+DEAL::1082 0
+DEAL::1083 0
+DEAL::1084 0
+DEAL::1085 0
+DEAL::1086 0
+DEAL::1087 0
+DEAL::1088 0
+DEAL::1089 0
+DEAL::1090 0
+DEAL::1091 0
+DEAL::1092 0
+DEAL::1093 0
+DEAL::1094 0
+DEAL::1095 0
+DEAL::1096 0
+DEAL::1097 0
+DEAL::1098 0
+DEAL::1099 0
+DEAL::1100 0
+DEAL::1101 0
+DEAL::1102 0
+DEAL::1103 0
+DEAL::1104 0
+DEAL::1105 0
+DEAL::1106 0
+DEAL::1107 0
+DEAL::1108 0
+DEAL::1109 0
+DEAL::1110 0
+DEAL::1111 0
+DEAL::1112 0
+DEAL::1113 0
+DEAL::1114 0
+DEAL::1115 0
+DEAL::1116 0
+DEAL::1117 0
+DEAL::1118 0
+DEAL::1119 0
+DEAL::1120 0
+DEAL::1121 0
+DEAL::1122 0
+DEAL::1123 0
+DEAL::1124 0
+DEAL::1125 0
+DEAL::1126 0
+DEAL::1127 1
+DEAL::1128 0
+DEAL::1129 0
+DEAL::1130 0
+DEAL::1131 1
+DEAL::1132 0
+DEAL::1133 0
+DEAL::1134 0
+DEAL::1135 0
+DEAL::1136 0
+DEAL::1137 0
+DEAL::1138 0
+DEAL::1139 0
+DEAL::1140 0
+DEAL::1141 0
+DEAL::1142 1
+DEAL::1143 0
+DEAL::1144 0
+DEAL::1145 0
+DEAL::1146 0
+DEAL::1147 0
+DEAL::1148 2
+DEAL::1149 3
+DEAL::1150 2
+DEAL::1151 3
+DEAL::1152 2
+DEAL::1153 2
+DEAL::1154 2
+DEAL::1155 2
+DEAL::1156 3
+DEAL::1157 2
+DEAL::1158 2
+DEAL::1159 3
+DEAL::1160 2
+DEAL::1161 3
+DEAL::1162 2
+DEAL::1163 2
+DEAL::1164 2
+DEAL::1165 2
+DEAL::1166 3
+DEAL::1167 3
+DEAL::1168 3
+DEAL::1169 3
+DEAL::1170 3
+DEAL::1171 2
+DEAL::1172 3
+DEAL::1173 2
+DEAL::1174 3
+DEAL::1175 3
+DEAL::1176 3
+DEAL::1177 3
+DEAL::1178 3
+DEAL::1179 3
+DEAL::1180 3
+DEAL::1181 3
+DEAL::1182 3
+DEAL::1183 2
+DEAL::1184 3
+DEAL::1185 3
+DEAL::1186 3
+DEAL::1187 3
+DEAL::1188 2
+DEAL::1189 3
+DEAL::1190 3
+DEAL::1191 3
+DEAL::1192 3
+DEAL::1193 3
+DEAL::1194 3
+DEAL::1195 3
+DEAL::1196 3
+DEAL::1197 2
+DEAL::1198 3
+DEAL::1199 2
+DEAL::1200 2
+DEAL::1201 2
+DEAL::1202 2
+DEAL::1203 2
+DEAL::1204 2
+DEAL::1205 3
+DEAL::1206 2
+DEAL::1207 2
+DEAL::1208 2
+DEAL::1209 2
+DEAL::1210 2
+DEAL::1211 2
+DEAL::1212 3
+DEAL::1213 3
+DEAL::1214 2
+DEAL::1215 2
+DEAL::1216 2
+DEAL::1217 3
+DEAL::1218 2
+DEAL::1219 2
+DEAL::1220 3
+DEAL::1221 2
+DEAL::1222 2
+DEAL::1223 2
+DEAL::1224 2
+DEAL::1225 2
+DEAL::1226 2
+DEAL::1227 2
+DEAL::1228 2
+DEAL::1229 3
+DEAL::1230 2
+DEAL::1231 2
+DEAL::1232 2
+DEAL::1233 2
+DEAL::1234 2
+DEAL::1235 3
+DEAL::1236 3
+DEAL::1237 3
+DEAL::1238 3
+DEAL::1239 3
+DEAL::1240 3
+DEAL::1241 3
+DEAL::1242 3
+DEAL::1243 3
+DEAL::1244 2
+DEAL::1245 3
+DEAL::1246 3
+DEAL::1247 3
+DEAL::1248 4
+DEAL::1249 3
DEAL::1250 4
-DEAL::1251 1
-DEAL::1252 4
-DEAL::1253 4
-DEAL::1254 4
-DEAL::1255 4
-DEAL::1256 4
-DEAL::1257 4
+DEAL::1251 3
+DEAL::1252 3
+DEAL::1253 3
+DEAL::1254 3
+DEAL::1255 3
+DEAL::1256 3
+DEAL::1257 3
DEAL::1258 4
-DEAL::1259 4
+DEAL::1259 3
DEAL::1260 4
DEAL::1261 4
-DEAL::1262 4
-DEAL::1263 4
+DEAL::1262 3
+DEAL::1263 3
DEAL::1264 4
DEAL::1265 4
-DEAL::1266 4
+DEAL::1266 3
DEAL::1267 4
DEAL::1268 4
DEAL::1269 4
-DEAL::1270 4
-DEAL::1271 1
-DEAL::1272 1
-DEAL::1273 4
-DEAL::1274 4
-DEAL::1275 1
-DEAL::1276 4
-DEAL::1277 1
-DEAL::1278 1
-DEAL::1279 1
-DEAL::1280 4
-DEAL::1281 4
-DEAL::1282 4
-DEAL::1283 4
-DEAL::1284 1
-DEAL::1285 4
+DEAL::1270 3
+DEAL::1271 3
+DEAL::1272 3
+DEAL::1273 3
+DEAL::1274 3
+DEAL::1275 3
+DEAL::1276 3
+DEAL::1277 3
+DEAL::1278 3
+DEAL::1279 3
+DEAL::1280 3
+DEAL::1281 3
+DEAL::1282 3
+DEAL::1283 3
+DEAL::1284 3
+DEAL::1285 3
DEAL::1286 4
-DEAL::1287 4
-DEAL::1288 4
-DEAL::1289 4
-DEAL::1290 1
-DEAL::1291 1
+DEAL::1287 3
+DEAL::1288 3
+DEAL::1289 3
+DEAL::1290 3
+DEAL::1291 3
DEAL::1292 4
DEAL::1293 4
-DEAL::1294 1
-DEAL::1295 4
-DEAL::1296 4
-DEAL::1297 4
-DEAL::1298 0
-DEAL::1299 4
-DEAL::1300 0
-DEAL::1301 4
-DEAL::1302 1
-DEAL::1303 1
-DEAL::1304 4
-DEAL::1305 4
-DEAL::1306 4
-DEAL::1307 1
-DEAL::1308 4
-DEAL::1309 4
-DEAL::1310 1
-DEAL::1311 0
-DEAL::1312 1
-DEAL::1313 1
-DEAL::1314 1
-DEAL::1315 1
-DEAL::1316 0
-DEAL::1317 1
-DEAL::1318 1
-DEAL::1319 1
-DEAL::1320 4
-DEAL::1321 1
-DEAL::1322 1
-DEAL::1323 1
+DEAL::1294 3
+DEAL::1295 3
+DEAL::1296 3
+DEAL::1297 3
+DEAL::1298 3
+DEAL::1299 3
+DEAL::1300 3
+DEAL::1301 3
+DEAL::1302 3
+DEAL::1303 3
+DEAL::1304 3
+DEAL::1305 3
+DEAL::1306 3
+DEAL::1307 3
+DEAL::1308 3
+DEAL::1309 3
+DEAL::1310 3
+DEAL::1311 3
+DEAL::1312 3
+DEAL::1313 3
+DEAL::1314 3
+DEAL::1315 3
+DEAL::1316 3
+DEAL::1317 3
+DEAL::1318 3
+DEAL::1319 4
+DEAL::1320 3
+DEAL::1321 3
+DEAL::1322 3
+DEAL::1323 3
DEAL::1324 2
-DEAL::1325 0
-DEAL::1326 0
-DEAL::1327 0
-DEAL::1328 0
-DEAL::1329 0
-DEAL::1330 0
-DEAL::1331 0
-DEAL::1332 0
-DEAL::1333 0
+DEAL::1325 2
+DEAL::1326 3
+DEAL::1327 3
+DEAL::1328 3
+DEAL::1329 3
+DEAL::1330 3
+DEAL::1331 2
+DEAL::1332 3
+DEAL::1333 2
DEAL::1334 2
-DEAL::1335 0
-DEAL::1336 1
-DEAL::1337 0
-DEAL::1338 0
-DEAL::1339 0
-DEAL::1340 0
-DEAL::1341 0
-DEAL::1342 0
-DEAL::1343 0
-DEAL::1344 1
-DEAL::1345 0
-DEAL::1346 0
-DEAL::1347 1
-DEAL::1348 1
-DEAL::1349 0
-DEAL::1350 0
-DEAL::1351 0
-DEAL::1352 0
-DEAL::1353 0
-DEAL::1354 0
-DEAL::1355 0
-DEAL::1356 0
-DEAL::1357 1
-DEAL::1358 0
-DEAL::1359 0
-DEAL::1360 1
-DEAL::1361 1
-DEAL::1362 0
-DEAL::1363 1
-DEAL::1364 0
-DEAL::1365 0
-DEAL::1366 0
-DEAL::1367 0
-DEAL::1368 0
-DEAL::1369 0
-DEAL::1370 0
-DEAL::1371 0
-DEAL::1372 0
-DEAL::1373 0
-DEAL::1374 0
-DEAL::1375 0
-DEAL::1376 0
-DEAL::1377 0
-DEAL::1378 0
-DEAL::1379 0
-DEAL::1380 0
-DEAL::1381 0
-DEAL::1382 0
-DEAL::1383 0
-DEAL::1384 0
-DEAL::1385 0
-DEAL::1386 0
-DEAL::1387 0
-DEAL::1388 0
-DEAL::1389 0
-DEAL::1390 0
-DEAL::1391 0
-DEAL::1392 1
-DEAL::1393 0
-DEAL::1394 0
-DEAL::1395 0
-DEAL::1396 1
-DEAL::1397 1
-DEAL::1398 1
-DEAL::1399 0
-DEAL::1400 1
-DEAL::1401 1
-DEAL::1402 1
-DEAL::1403 1
-DEAL::1404 1
-DEAL::1405 1
-DEAL::1406 1
-DEAL::1407 0
-DEAL::1408 1
-DEAL::1409 1
-DEAL::1410 0
-DEAL::1411 1
-DEAL::1412 1
-DEAL::1413 1
-DEAL::1414 1
-DEAL::1415 0
-DEAL::1416 1
-DEAL::1417 1
-DEAL::1418 1
-DEAL::1419 1
-DEAL::1420 1
-DEAL::1421 1
-DEAL::1422 1
-DEAL::1423 1
-DEAL::1424 1
-DEAL::1425 1
-DEAL::1426 1
-DEAL::1427 1
-DEAL::1428 1
-DEAL::1429 1
-DEAL::1430 1
-DEAL::1431 1
-DEAL::1432 1
-DEAL::1433 1
-DEAL::1434 1
-DEAL::1435 1
-DEAL::1436 1
-DEAL::1437 1
-DEAL::1438 1
-DEAL::1439 1
-DEAL::1440 1
-DEAL::1441 1
-DEAL::1442 1
-DEAL::1443 1
-DEAL::1444 1
-DEAL::1445 1
-DEAL::1446 0
-DEAL::1447 0
-DEAL::1448 1
-DEAL::1449 1
-DEAL::1450 0
-DEAL::1451 0
-DEAL::1452 0
-DEAL::1453 1
-DEAL::1454 1
-DEAL::1455 0
-DEAL::1456 1
-DEAL::1457 1
-DEAL::1458 1
-DEAL::1459 1
-DEAL::1460 0
-DEAL::1461 1
-DEAL::1462 0
-DEAL::1463 1
-DEAL::1464 0
-DEAL::1465 0
-DEAL::1466 1
-DEAL::1467 1
-DEAL::1468 1
-DEAL::1469 1
+DEAL::1335 2
+DEAL::1336 3
+DEAL::1337 2
+DEAL::1338 3
+DEAL::1339 3
+DEAL::1340 3
+DEAL::1341 3
+DEAL::1342 3
+DEAL::1343 3
+DEAL::1344 3
+DEAL::1345 4
+DEAL::1346 3
+DEAL::1347 3
+DEAL::1348 3
+DEAL::1349 3
+DEAL::1350 3
+DEAL::1351 3
+DEAL::1352 3
+DEAL::1353 3
+DEAL::1354 3
+DEAL::1355 3
+DEAL::1356 3
+DEAL::1357 3
+DEAL::1358 3
+DEAL::1359 3
+DEAL::1360 3
+DEAL::1361 3
+DEAL::1362 3
+DEAL::1363 3
+DEAL::1364 2
+DEAL::1365 4
+DEAL::1366 3
+DEAL::1367 3
+DEAL::1368 4
+DEAL::1369 4
+DEAL::1370 4
+DEAL::1371 3
+DEAL::1372 2
+DEAL::1373 2
+DEAL::1374 2
+DEAL::1375 3
+DEAL::1376 2
+DEAL::1377 3
+DEAL::1378 2
+DEAL::1379 3
+DEAL::1380 4
+DEAL::1381 3
+DEAL::1382 3
+DEAL::1383 3
+DEAL::1384 3
+DEAL::1385 3
+DEAL::1386 3
+DEAL::1387 3
+DEAL::1388 4
+DEAL::1389 4
+DEAL::1390 3
+DEAL::1391 4
+DEAL::1392 3
+DEAL::1393 3
+DEAL::1394 3
+DEAL::1395 3
+DEAL::1396 3
+DEAL::1397 3
+DEAL::1398 3
+DEAL::1399 2
+DEAL::1400 3
+DEAL::1401 3
+DEAL::1402 3
+DEAL::1403 3
+DEAL::1404 3
+DEAL::1405 3
+DEAL::1406 3
+DEAL::1407 2
+DEAL::1408 3
+DEAL::1409 3
+DEAL::1410 2
+DEAL::1411 3
+DEAL::1412 3
+DEAL::1413 3
+DEAL::1414 3
+DEAL::1415 2
+DEAL::1416 3
+DEAL::1417 3
+DEAL::1418 3
+DEAL::1419 3
+DEAL::1420 3
+DEAL::1421 3
+DEAL::1422 3
+DEAL::1423 3
+DEAL::1424 3
+DEAL::1425 3
+DEAL::1426 3
+DEAL::1427 3
+DEAL::1428 3
+DEAL::1429 3
+DEAL::1430 3
+DEAL::1431 3
+DEAL::1432 3
+DEAL::1433 3
+DEAL::1434 3
+DEAL::1435 3
+DEAL::1436 3
+DEAL::1437 3
+DEAL::1438 3
+DEAL::1439 3
+DEAL::1440 3
+DEAL::1441 3
+DEAL::1442 3
+DEAL::1443 3
+DEAL::1444 3
+DEAL::1445 3
+DEAL::1446 3
+DEAL::1447 2
+DEAL::1448 3
+DEAL::1449 3
+DEAL::1450 3
+DEAL::1451 3
+DEAL::1452 2
+DEAL::1453 3
+DEAL::1454 3
+DEAL::1455 2
+DEAL::1456 3
+DEAL::1457 3
+DEAL::1458 3
+DEAL::1459 3
+DEAL::1460 2
+DEAL::1461 3
+DEAL::1462 3
+DEAL::1463 3
+DEAL::1464 3
+DEAL::1465 3
+DEAL::1466 3
+DEAL::1467 3
+DEAL::1468 3
+DEAL::1469 3
DEAL::1470 4
-DEAL::1471 1
+DEAL::1471 4
DEAL::1472 4
-DEAL::1473 1
+DEAL::1473 4
DEAL::1474 4
-DEAL::1475 1
+DEAL::1475 4
DEAL::1476 4
-DEAL::1477 1
+DEAL::1477 4
DEAL::1478 4
-DEAL::1479 4
+DEAL::1479 0
DEAL::1480 4
-DEAL::1481 1
+DEAL::1481 4
DEAL::1482 4
-DEAL::1483 4
+DEAL::1483 0
DEAL::1484 4
DEAL::1485 4
-DEAL::1486 4
+DEAL::1486 0
DEAL::1487 4
DEAL::1488 4
DEAL::1489 4
DEAL::1497 4
DEAL::1498 4
DEAL::1499 4
-DEAL::1500 4
+DEAL::1500 0
DEAL::1501 4
DEAL::1502 4
DEAL::1503 4
DEAL::1505 4
DEAL::1506 4
DEAL::1507 4
-DEAL::1508 4
+DEAL::1508 0
DEAL::1509 4
DEAL::1510 4
DEAL::1511 4
DEAL::1512 4
DEAL::1513 4
-DEAL::1514 1
+DEAL::1514 4
DEAL::1515 4
-DEAL::1516 1
+DEAL::1516 4
DEAL::1517 4
DEAL::1518 4
-DEAL::1519 1
+DEAL::1519 4
DEAL::1520 4
DEAL::1521 4
DEAL::1522 4
DEAL::1538 4
DEAL::1539 4
DEAL::1540 4
-DEAL::1541 1
+DEAL::1541 4
DEAL::1542 4
-DEAL::1543 1
+DEAL::1543 4
DEAL::1544 4
-DEAL::1545 1
+DEAL::1545 4
DEAL::1546 4
-DEAL::1547 1
-DEAL::1548 1
-DEAL::1549 1
+DEAL::1547 4
+DEAL::1548 4
+DEAL::1549 4
DEAL::1550 4
-DEAL::1551 1
+DEAL::1551 4
DEAL::1552 4
-DEAL::1553 1
+DEAL::1553 4
DEAL::1554 4
DEAL::1555 4
DEAL::1556 4
-DEAL::1557 1
+DEAL::1557 4
DEAL::1558 4
DEAL::1559 4
DEAL::1560 4
DEAL::1568 4
DEAL::1569 4
DEAL::1570 4
-DEAL::1571 1
+DEAL::1571 4
DEAL::1572 4
-DEAL::1573 1
-DEAL::1574 1
-DEAL::1575 1
-DEAL::1576 1
+DEAL::1573 4
+DEAL::1574 4
+DEAL::1575 4
+DEAL::1576 4
DEAL::1577 4
-DEAL::1578 1
+DEAL::1578 4
DEAL::1579 4
DEAL::1580 4
-DEAL::1581 1
+DEAL::1581 4
DEAL::1582 4
DEAL::1583 2
DEAL::1584 2
DEAL::1589 2
DEAL::1590 2
DEAL::1591 2
-DEAL::1592 2
+DEAL::1592 1
DEAL::1593 2
DEAL::1594 2
DEAL::1595 2
-DEAL::1596 2
+DEAL::1596 1
DEAL::1597 2
DEAL::1598 2
DEAL::1599 2
DEAL::1600 2
-DEAL::1601 2
-DEAL::1602 2
+DEAL::1601 1
+DEAL::1602 1
DEAL::1603 2
-DEAL::1604 2
-DEAL::1605 2
-DEAL::1606 2
+DEAL::1604 1
+DEAL::1605 1
+DEAL::1606 1
DEAL::1607 2
-DEAL::1608 2
+DEAL::1608 1
DEAL::1609 2
-DEAL::1610 2
-DEAL::1611 2
-DEAL::1612 2
-DEAL::1613 2
+DEAL::1610 1
+DEAL::1611 1
+DEAL::1612 1
+DEAL::1613 1
DEAL::1614 2
-DEAL::1615 2
-DEAL::1616 2
-DEAL::1617 2
+DEAL::1615 1
+DEAL::1616 1
+DEAL::1617 1
DEAL::1618 2
DEAL::1619 2
DEAL::1620 2
DEAL::1621 2
DEAL::1622 2
DEAL::1623 2
-DEAL::1624 0
+DEAL::1624 2
DEAL::1625 2
DEAL::1626 2
DEAL::1627 2
DEAL::1628 2
DEAL::1629 2
-DEAL::1630 0
-DEAL::1631 0
-DEAL::1632 2
-DEAL::1633 0
+DEAL::1630 2
+DEAL::1631 2
+DEAL::1632 1
+DEAL::1633 2
DEAL::1634 2
-DEAL::1635 2
-DEAL::1636 0
+DEAL::1635 1
+DEAL::1636 2
DEAL::1637 2
DEAL::1638 2
DEAL::1639 2
DEAL::1656 2
DEAL::1657 2
DEAL::1658 2
-DEAL::1659 2
+DEAL::1659 1
DEAL::1660 2
DEAL::1661 2
DEAL::1662 2
-DEAL::1663 2
+DEAL::1663 1
DEAL::1664 2
DEAL::1665 2
DEAL::1666 2
DEAL::1671 2
DEAL::1672 2
DEAL::1673 2
-DEAL::1674 0
+DEAL::1674 2
DEAL::1675 2
DEAL::1676 2
DEAL::1677 2
DEAL::1679 2
DEAL::1680 2
DEAL::1681 2
-DEAL::1682 0
+DEAL::1682 2
DEAL::1683 2
-DEAL::1684 0
+DEAL::1684 2
DEAL::1685 2
DEAL::1686 2
-DEAL::1687 2
-DEAL::1688 2
-DEAL::1689 2
-DEAL::1690 2
-DEAL::1691 2
-DEAL::1692 2
-DEAL::1693 2
-DEAL::1694 2
-DEAL::1695 2
-DEAL::1696 2
-DEAL::1697 2
-DEAL::1698 2
-DEAL::1699 2
-DEAL::1700 2
-DEAL::1701 2
-DEAL::1702 2
-DEAL::1703 2
-DEAL::1704 2
-DEAL::1705 0
+DEAL::1687 1
+DEAL::1688 1
+DEAL::1689 1
+DEAL::1690 1
+DEAL::1691 1
+DEAL::1692 1
+DEAL::1693 1
+DEAL::1694 1
+DEAL::1695 1
+DEAL::1696 1
+DEAL::1697 1
+DEAL::1698 1
+DEAL::1699 1
+DEAL::1700 1
+DEAL::1701 1
+DEAL::1702 1
+DEAL::1703 1
+DEAL::1704 1
+DEAL::1705 2
DEAL::1706 2
-DEAL::1707 2
-DEAL::1708 0
-DEAL::1709 0
-DEAL::1710 2
-DEAL::1711 2
-DEAL::1712 2
+DEAL::1707 1
+DEAL::1708 2
+DEAL::1709 1
+DEAL::1710 1
+DEAL::1711 1
+DEAL::1712 1
DEAL::1713 2
-DEAL::1714 2
-DEAL::1715 0
-DEAL::1716 2
-DEAL::1717 0
-DEAL::1718 2
-DEAL::1719 2
-DEAL::1720 0
-DEAL::1721 2
-DEAL::1722 2
-DEAL::1723 2
-DEAL::1724 2
-DEAL::1725 2
-DEAL::1726 2
-DEAL::1727 2
+DEAL::1714 1
+DEAL::1715 1
+DEAL::1716 1
+DEAL::1717 2
+DEAL::1718 1
+DEAL::1719 1
+DEAL::1720 1
+DEAL::1721 1
+DEAL::1722 1
+DEAL::1723 1
+DEAL::1724 1
+DEAL::1725 1
+DEAL::1726 1
+DEAL::1727 1
DEAL::1728 2
-DEAL::1729 2
+DEAL::1729 1
DEAL::1730 2
-DEAL::1731 2
-DEAL::1732 2
-DEAL::1733 2
-DEAL::1734 2
-DEAL::1735 2
-DEAL::1736 2
-DEAL::1737 2
-DEAL::1738 2
-DEAL::1739 2
-DEAL::1740 2
-DEAL::1741 2
-DEAL::1742 2
-DEAL::1743 2
-DEAL::1744 2
-DEAL::1745 2
-DEAL::1746 2
-DEAL::1747 2
-DEAL::1748 0
-DEAL::1749 2
-DEAL::1750 2
-DEAL::1751 2
-DEAL::1752 2
-DEAL::1753 0
-DEAL::1754 2
-DEAL::1755 2
-DEAL::1756 2
-DEAL::1757 0
-DEAL::1758 0
-DEAL::1759 2
-DEAL::1760 2
-DEAL::1761 2
-DEAL::1762 2
-DEAL::1763 2
-DEAL::1764 2
-DEAL::1765 2
-DEAL::1766 2
-DEAL::1767 2
-DEAL::1768 2
-DEAL::1769 2
-DEAL::1770 2
-DEAL::1771 2
-DEAL::1772 2
-DEAL::1773 2
-DEAL::1774 2
-DEAL::1775 2
-DEAL::1776 2
-DEAL::1777 2
-DEAL::1778 2
-DEAL::1779 2
-DEAL::1780 2
-DEAL::1781 2
-DEAL::1782 2
-DEAL::1783 3
-DEAL::1784 3
-DEAL::1785 3
-DEAL::1786 3
-DEAL::1787 3
-DEAL::1788 3
-DEAL::1789 2
-DEAL::1790 3
-DEAL::1791 3
-DEAL::1792 3
-DEAL::1793 3
-DEAL::1794 3
-DEAL::1795 3
-DEAL::1796 3
-DEAL::1797 3
-DEAL::1798 3
-DEAL::1799 2
-DEAL::1800 2
-DEAL::1801 2
-DEAL::1802 2
-DEAL::1803 2
-DEAL::1804 2
-DEAL::1805 2
-DEAL::1806 2
-DEAL::1807 2
-DEAL::1808 2
-DEAL::1809 2
-DEAL::1810 2
-DEAL::1811 3
-DEAL::1812 2
-DEAL::1813 3
-DEAL::1814 2
-DEAL::1815 3
-DEAL::1816 2
-DEAL::1817 2
-DEAL::1818 2
-DEAL::1819 3
-DEAL::1820 2
-DEAL::1821 2
-DEAL::1822 2
-DEAL::1823 2
-DEAL::1824 2
-DEAL::1825 2
-DEAL::1826 2
-DEAL::1827 2
-DEAL::1828 2
-DEAL::1829 2
-DEAL::1830 2
-DEAL::1831 2
-DEAL::1832 2
-DEAL::1833 2
-DEAL::1834 2
-DEAL::1835 2
-DEAL::1836 3
-DEAL::1837 3
-DEAL::1838 2
-DEAL::1839 2
-DEAL::1840 2
-DEAL::1841 0
-DEAL::1842 0
-DEAL::1843 0
-DEAL::1844 2
-DEAL::1845 0
-DEAL::1846 0
-DEAL::1847 2
-DEAL::1848 2
-DEAL::1849 3
-DEAL::1850 2
-DEAL::1851 2
-DEAL::1852 2
-DEAL::1853 3
-DEAL::1854 3
-DEAL::1855 3
-DEAL::1856 2
-DEAL::1857 3
-DEAL::1858 3
-DEAL::1859 3
-DEAL::1860 3
-DEAL::1861 2
-DEAL::1862 3
-DEAL::1863 0
-DEAL::1864 3
-DEAL::1865 3
-DEAL::1866 3
-DEAL::1867 0
-DEAL::1868 0
-DEAL::1869 3
-DEAL::1870 3
-DEAL::1871 3
-DEAL::1872 0
-DEAL::1873 2
-DEAL::1874 3
-DEAL::1875 0
-DEAL::1876 2
+DEAL::1731 1
+DEAL::1732 1
+DEAL::1733 1
+DEAL::1734 1
+DEAL::1735 1
+DEAL::1736 1
+DEAL::1737 1
+DEAL::1738 1
+DEAL::1739 1
+DEAL::1740 1
+DEAL::1741 1
+DEAL::1742 1
+DEAL::1743 1
+DEAL::1744 1
+DEAL::1745 1
+DEAL::1746 1
+DEAL::1747 1
+DEAL::1748 2
+DEAL::1749 2
+DEAL::1750 2
+DEAL::1751 2
+DEAL::1752 1
+DEAL::1753 2
+DEAL::1754 2
+DEAL::1755 2
+DEAL::1756 1
+DEAL::1757 2
+DEAL::1758 2
+DEAL::1759 1
+DEAL::1760 1
+DEAL::1761 1
+DEAL::1762 1
+DEAL::1763 1
+DEAL::1764 1
+DEAL::1765 1
+DEAL::1766 1
+DEAL::1767 1
+DEAL::1768 1
+DEAL::1769 1
+DEAL::1770 1
+DEAL::1771 1
+DEAL::1772 1
+DEAL::1773 1
+DEAL::1774 1
+DEAL::1775 1
+DEAL::1776 1
+DEAL::1777 1
+DEAL::1778 1
+DEAL::1779 1
+DEAL::1780 1
+DEAL::1781 1
+DEAL::1782 1
+DEAL::1783 0
+DEAL::1784 1
+DEAL::1785 1
+DEAL::1786 1
+DEAL::1787 1
+DEAL::1788 1
+DEAL::1789 1
+DEAL::1790 1
+DEAL::1791 0
+DEAL::1792 0
+DEAL::1793 0
+DEAL::1794 1
+DEAL::1795 1
+DEAL::1796 1
+DEAL::1797 1
+DEAL::1798 1
+DEAL::1799 1
+DEAL::1800 1
+DEAL::1801 1
+DEAL::1802 1
+DEAL::1803 1
+DEAL::1804 1
+DEAL::1805 1
+DEAL::1806 1
+DEAL::1807 1
+DEAL::1808 1
+DEAL::1809 1
+DEAL::1810 1
+DEAL::1811 1
+DEAL::1812 1
+DEAL::1813 1
+DEAL::1814 1
+DEAL::1815 1
+DEAL::1816 1
+DEAL::1817 1
+DEAL::1818 1
+DEAL::1819 1
+DEAL::1820 1
+DEAL::1821 1
+DEAL::1822 1
+DEAL::1823 1
+DEAL::1824 1
+DEAL::1825 1
+DEAL::1826 1
+DEAL::1827 1
+DEAL::1828 1
+DEAL::1829 1
+DEAL::1830 1
+DEAL::1831 1
+DEAL::1832 1
+DEAL::1833 1
+DEAL::1834 1
+DEAL::1835 1
+DEAL::1836 1
+DEAL::1837 1
+DEAL::1838 1
+DEAL::1839 1
+DEAL::1840 1
+DEAL::1841 1
+DEAL::1842 1
+DEAL::1843 1
+DEAL::1844 1
+DEAL::1845 1
+DEAL::1846 2
+DEAL::1847 1
+DEAL::1848 1
+DEAL::1849 1
+DEAL::1850 1
+DEAL::1851 1
+DEAL::1852 1
+DEAL::1853 1
+DEAL::1854 1
+DEAL::1855 1
+DEAL::1856 1
+DEAL::1857 1
+DEAL::1858 1
+DEAL::1859 1
+DEAL::1860 1
+DEAL::1861 1
+DEAL::1862 1
+DEAL::1863 4
+DEAL::1864 1
+DEAL::1865 1
+DEAL::1866 1
+DEAL::1867 4
+DEAL::1868 1
+DEAL::1869 1
+DEAL::1870 1
+DEAL::1871 1
+DEAL::1872 1
+DEAL::1873 1
+DEAL::1874 1
+DEAL::1875 2
+DEAL::1876 1
DEAL::1877 2
-DEAL::1878 2
-DEAL::1879 2
-DEAL::1880 0
-DEAL::1881 2
-DEAL::1882 0
-DEAL::1883 2
-DEAL::1884 0
-DEAL::1885 2
-DEAL::1886 2
-DEAL::1887 2
-DEAL::1888 3
-DEAL::1889 2
-DEAL::1890 3
-DEAL::1891 2
-DEAL::1892 2
-DEAL::1893 2
-DEAL::1894 2
-DEAL::1895 0
-DEAL::1896 0
-DEAL::1897 0
-DEAL::1898 0
-DEAL::1899 0
-DEAL::1900 0
-DEAL::1901 0
-DEAL::1902 0
-DEAL::1903 0
-DEAL::1904 0
-DEAL::1905 2
-DEAL::1906 0
-DEAL::1907 0
-DEAL::1908 0
-DEAL::1909 0
-DEAL::1910 3
-DEAL::1911 2
-DEAL::1912 3
-DEAL::1913 2
-DEAL::1914 0
-DEAL::1915 2
-DEAL::1916 2
-DEAL::1917 3
-DEAL::1918 3
-DEAL::1919 3
-DEAL::1920 3
-DEAL::1921 3
-DEAL::1922 3
-DEAL::1923 3
-DEAL::1924 3
-DEAL::1925 3
-DEAL::1926 3
-DEAL::1927 3
-DEAL::1928 3
-DEAL::1929 3
-DEAL::1930 3
-DEAL::1931 3
-DEAL::1932 3
-DEAL::1933 3
-DEAL::1934 3
-DEAL::1935 3
-DEAL::1936 3
-DEAL::1937 3
-DEAL::1938 3
-DEAL::1939 3
-DEAL::1940 3
-DEAL::1941 3
-DEAL::1942 3
-DEAL::1943 3
-DEAL::1944 3
-DEAL::1945 3
-DEAL::1946 3
-DEAL::1947 3
-DEAL::1948 3
-DEAL::1949 3
-DEAL::1950 3
-DEAL::1951 3
-DEAL::1952 3
-DEAL::1953 3
-DEAL::1954 3
-DEAL::1955 3
-DEAL::1956 3
-DEAL::1957 3
-DEAL::1958 3
-DEAL::1959 3
-DEAL::1960 3
-DEAL::1961 3
-DEAL::1962 3
-DEAL::1963 3
-DEAL::1964 3
-DEAL::1965 3
-DEAL::1966 3
-DEAL::1967 3
-DEAL::1968 3
-DEAL::1969 3
-DEAL::1970 3
-DEAL::1971 3
-DEAL::1972 3
-DEAL::1973 3
-DEAL::1974 3
-DEAL::1975 3
+DEAL::1878 1
+DEAL::1879 1
+DEAL::1880 2
+DEAL::1881 1
+DEAL::1882 2
+DEAL::1883 1
+DEAL::1884 1
+DEAL::1885 1
+DEAL::1886 1
+DEAL::1887 1
+DEAL::1888 1
+DEAL::1889 1
+DEAL::1890 1
+DEAL::1891 1
+DEAL::1892 1
+DEAL::1893 1
+DEAL::1894 1
+DEAL::1895 1
+DEAL::1896 1
+DEAL::1897 2
+DEAL::1898 1
+DEAL::1899 1
+DEAL::1900 1
+DEAL::1901 4
+DEAL::1902 1
+DEAL::1903 4
+DEAL::1904 1
+DEAL::1905 1
+DEAL::1906 1
+DEAL::1907 1
+DEAL::1908 1
+DEAL::1909 1
+DEAL::1910 1
+DEAL::1911 1
+DEAL::1912 1
+DEAL::1913 1
+DEAL::1914 4
+DEAL::1915 1
+DEAL::1916 1
+DEAL::1917 1
+DEAL::1918 1
+DEAL::1919 0
+DEAL::1920 1
+DEAL::1921 1
+DEAL::1922 1
+DEAL::1923 0
+DEAL::1924 0
+DEAL::1925 0
+DEAL::1926 0
+DEAL::1927 1
+DEAL::1928 0
+DEAL::1929 1
+DEAL::1930 0
+DEAL::1931 0
+DEAL::1932 1
+DEAL::1933 0
+DEAL::1934 1
+DEAL::1935 1
+DEAL::1936 0
+DEAL::1937 0
+DEAL::1938 0
+DEAL::1939 0
+DEAL::1940 0
+DEAL::1941 1
+DEAL::1942 0
+DEAL::1943 1
+DEAL::1944 1
+DEAL::1945 1
+DEAL::1946 1
+DEAL::1947 1
+DEAL::1948 1
+DEAL::1949 1
+DEAL::1950 1
+DEAL::1951 1
+DEAL::1952 1
+DEAL::1953 1
+DEAL::1954 1
+DEAL::1955 1
+DEAL::1956 1
+DEAL::1957 1
+DEAL::1958 1
+DEAL::1959 1
+DEAL::1960 1
+DEAL::1961 1
+DEAL::1962 1
+DEAL::1963 1
+DEAL::1964 1
+DEAL::1965 1
+DEAL::1966 1
+DEAL::1967 1
+DEAL::1968 1
+DEAL::1969 1
+DEAL::1970 1
+DEAL::1971 1
+DEAL::1972 1
+DEAL::1973 1
+DEAL::1974 1
+DEAL::1975 1
DEAL::1976 1
-DEAL::1977 3
-DEAL::1978 3
-DEAL::1979 3
-DEAL::1980 3
-DEAL::1981 3
-DEAL::1982 3
-DEAL::1983 3
-DEAL::1984 3
-DEAL::1985 3
-DEAL::1986 3
-DEAL::1987 3
-DEAL::1988 3
-DEAL::1989 3
-DEAL::1990 3
-DEAL::1991 3
-DEAL::1992 3
-DEAL::1993 0
-DEAL::1994 0
-DEAL::1995 0
-DEAL::1996 0
-DEAL::1997 0
-DEAL::1998 0
-DEAL::1999 0
-DEAL::2000 0
-DEAL::2001 0
-DEAL::2002 0
-DEAL::2003 0
-DEAL::2004 0
-DEAL::2005 0
-DEAL::2006 0
-DEAL::2007 0
-DEAL::2008 0
-DEAL::2009 0
-DEAL::2010 0
-DEAL::2011 0
-DEAL::2012 0
-DEAL::2013 0
-DEAL::2014 0
-DEAL::2015 0
-DEAL::2016 0
-DEAL::2017 0
-DEAL::2018 0
-DEAL::2019 0
-DEAL::2020 0
-DEAL::2021 0
-DEAL::2022 0
-DEAL::2023 0
-DEAL::2024 0
-DEAL::2025 0
-DEAL::2026 0
-DEAL::2027 0
-DEAL::2028 0
-DEAL::2029 0
-DEAL::2030 0
-DEAL::2031 0
-DEAL::2032 0
-DEAL::2033 0
-DEAL::2034 0
-DEAL::2035 0
-DEAL::2036 0
-DEAL::2037 0
-DEAL::2038 0
-DEAL::2039 0
-DEAL::2040 1
-DEAL::2041 0
-DEAL::2042 0
-DEAL::2043 0
-DEAL::2044 0
-DEAL::2045 0
-DEAL::2046 0
-DEAL::2047 0
-DEAL::2048 0
-DEAL::2049 0
-DEAL::2050 0
-DEAL::2051 0
-DEAL::2052 0
-DEAL::2053 0
-DEAL::2054 0
-DEAL::2055 0
-DEAL::2056 0
-DEAL::2057 0
-DEAL::2058 0
-DEAL::2059 0
-DEAL::2060 0
-DEAL::2061 0
-DEAL::2062 0
-DEAL::2063 0
-DEAL::2064 0
-DEAL::2065 0
-DEAL::2066 0
-DEAL::2067 0
-DEAL::2068 0
-DEAL::2069 0
-DEAL::2070 0
-DEAL::2071 0
-DEAL::2072 0
-DEAL::2073 0
-DEAL::2074 0
-DEAL::2075 0
-DEAL::2076 0
-DEAL::2077 0
-DEAL::2078 0
-DEAL::2079 1
-DEAL::2080 0
-DEAL::2081 0
-DEAL::2082 0
-DEAL::2083 0
-DEAL::2084 0
-DEAL::2085 0
-DEAL::2086 0
-DEAL::2087 0
-DEAL::2088 0
-DEAL::2089 0
-DEAL::2090 0
-DEAL::2091 0
-DEAL::2092 0
-DEAL::2093 0
-DEAL::2094 1
-DEAL::2095 0
-DEAL::2096 0
-DEAL::2097 0
-DEAL::2098 0
-DEAL::2099 1
-DEAL::2100 0
-DEAL::2101 0
-DEAL::2102 0
-DEAL::2103 0
-DEAL::2104 0
-DEAL::2105 0
-DEAL::2106 0
-DEAL::2107 0
-DEAL::2108 0
-DEAL::2109 0
-DEAL::2110 0
-DEAL::2111 0
-DEAL::2112 1
-DEAL::2113 1
-DEAL::2114 1
-DEAL::2115 0
-DEAL::2116 1
-DEAL::2117 1
-DEAL::2118 1
-DEAL::2119 1
-DEAL::2120 0
-DEAL::2121 0
-DEAL::2122 1
-DEAL::2123 1
-DEAL::2124 1
-DEAL::2125 0
-DEAL::2126 1
-DEAL::2127 1
-DEAL::2128 1
-DEAL::2129 1
-DEAL::2130 1
-DEAL::2131 0
-DEAL::2132 0
-DEAL::2133 0
-DEAL::2134 0
-DEAL::2135 0
-DEAL::2136 0
-DEAL::2137 0
-DEAL::2138 0
-DEAL::2139 0
-DEAL::2140 0
-DEAL::2141 0
-DEAL::2142 0
-DEAL::2143 0
-DEAL::2144 0
-DEAL::2145 0
-DEAL::2146 0
-DEAL::2147 0
-DEAL::2148 0
-DEAL::2149 0
-DEAL::2150 0
-DEAL::2151 0
-DEAL::2152 0
-DEAL::2153 0
-DEAL::2154 0
-DEAL::2155 0
-DEAL::2156 0
-DEAL::2157 0
-DEAL::2158 0
-DEAL::2159 0
-DEAL::2160 0
-DEAL::2161 0
-DEAL::2162 0
-DEAL::2163 0
-DEAL::2164 0
-DEAL::2165 0
-DEAL::2166 0
-DEAL::2167 0
-DEAL::2168 0
-DEAL::2169 0
-DEAL::2170 0
-DEAL::2171 0
-DEAL::2172 0
-DEAL::2173 0
-DEAL::2174 0
-DEAL::2175 0
-DEAL::2176 0
-DEAL::2177 0
-DEAL::2178 0
-DEAL::2179 0
-DEAL::2180 0
-DEAL::2181 0
-DEAL::2182 0
-DEAL::2183 0
-DEAL::2184 0
-DEAL::2185 0
-DEAL::2186 0
-DEAL::2187 0
-DEAL::2188 0
-DEAL::2189 0
-DEAL::2190 0
-DEAL::2191 0
-DEAL::2192 1
-DEAL::2193 0
-DEAL::2194 0
-DEAL::2195 0
-DEAL::2196 1
-DEAL::2197 0
-DEAL::2198 0
-DEAL::2199 0
-DEAL::2200 0
-DEAL::2201 0
-DEAL::2202 0
-DEAL::2203 0
-DEAL::2204 0
-DEAL::2205 0
-DEAL::2206 0
-DEAL::2207 0
-DEAL::2208 0
-DEAL::2209 0
-DEAL::2210 1
-DEAL::2211 0
-DEAL::2212 0
-DEAL::2213 0
-DEAL::2214 1
-DEAL::2215 0
-DEAL::2216 0
-DEAL::2217 0
-DEAL::2218 0
-DEAL::2219 0
-DEAL::2220 0
-DEAL::2221 0
-DEAL::2222 0
-DEAL::2223 0
-DEAL::2224 0
-DEAL::2225 0
-DEAL::2226 0
-DEAL::2227 0
-DEAL::2228 1
-DEAL::2229 0
-DEAL::2230 0
-DEAL::2231 0
-DEAL::2232 1
-DEAL::2233 0
-DEAL::2234 0
-DEAL::2235 0
-DEAL::2236 0
-DEAL::2237 1
-DEAL::2238 0
-DEAL::2239 1
-DEAL::2240 0
-DEAL::2241 0
-DEAL::2242 0
-DEAL::2243 0
-DEAL::2244 1
-DEAL::2245 0
-DEAL::2246 0
-DEAL::2247 0
-DEAL::2248 1
-DEAL::2249 1
-DEAL::2250 1
-DEAL::2251 1
-DEAL::2252 1
-DEAL::2253 1
-DEAL::2254 1
-DEAL::2255 1
-DEAL::2256 0
-DEAL::2257 1
-DEAL::2258 1
-DEAL::2259 1
-DEAL::2260 1
-DEAL::2261 1
-DEAL::2262 1
-DEAL::2263 1
-DEAL::2264 1
-DEAL::2265 1
-DEAL::2266 1
-DEAL::2267 1
-DEAL::2268 1
-DEAL::2269 1
-DEAL::2270 1
-DEAL::2271 1
-DEAL::2272 1
-DEAL::2273 1
-DEAL::2274 1
-DEAL::2275 1
-DEAL::2276 1
-DEAL::2277 1
-DEAL::2278 1
-DEAL::2279 1
-DEAL::2280 1
-DEAL::2281 1
-DEAL::2282 1
-DEAL::2283 1
-DEAL::2284 1
-DEAL::2285 1
-DEAL::2286 1
-DEAL::2287 1
-DEAL::2288 1
-DEAL::2289 1
-DEAL::2290 1
-DEAL::2291 1
-DEAL::2292 1
-DEAL::2293 1
-DEAL::2294 1
-DEAL::2295 1
-DEAL::2296 1
-DEAL::2297 1
-DEAL::2298 1
-DEAL::2299 1
-DEAL::2300 1
-DEAL::2301 1
-DEAL::2302 1
-DEAL::2303 1
-DEAL::2304 1
-DEAL::2305 1
-DEAL::2306 0
-DEAL::2307 1
-DEAL::2308 1
-DEAL::2309 1
-DEAL::2310 1
-DEAL::2311 1
-DEAL::2312 1
-DEAL::2313 1
-DEAL::2314 1
-DEAL::2315 1
-DEAL::2316 1
-DEAL::2317 1
-DEAL::2318 1
-DEAL::2319 1
-DEAL::2320 1
-DEAL::2321 1
-DEAL::2322 1
-DEAL::2323 1
-DEAL::2324 1
-DEAL::2325 1
-DEAL::2326 1
-DEAL::2327 1
-DEAL::2328 1
-DEAL::2329 1
-DEAL::2330 1
-DEAL::2331 1
-DEAL::2332 1
-DEAL::2333 1
-DEAL::2334 4
-DEAL::2335 4
-DEAL::2336 2
-DEAL::2337 2
-DEAL::2338 4
-DEAL::2339 2
-DEAL::2340 2
-DEAL::2341 2
-DEAL::2342 2
-DEAL::2343 2
-DEAL::2344 4
-DEAL::2345 4
-DEAL::2346 4
-DEAL::2347 2
-DEAL::2348 2
-DEAL::2349 2
-DEAL::2350 2
-DEAL::2351 2
-DEAL::2352 4
-DEAL::2353 4
-DEAL::2354 4
-DEAL::2355 4
-DEAL::2356 4
-DEAL::2357 4
-DEAL::2358 4
-DEAL::2359 4
-DEAL::2360 2
-DEAL::2361 2
-DEAL::2362 4
-DEAL::2363 4
-DEAL::2364 4
-DEAL::2365 4
-DEAL::2366 4
-DEAL::2367 4
-DEAL::2368 4
-DEAL::2369 4
-DEAL::2370 4
-DEAL::2371 2
-DEAL::2372 4
-DEAL::2373 2
-DEAL::2374 2
-DEAL::2375 2
-DEAL::2376 4
-DEAL::2377 4
-DEAL::2378 4
-DEAL::2379 4
-DEAL::2380 4
-DEAL::2381 4
+DEAL::1977 1
+DEAL::1978 1
+DEAL::1979 1
+DEAL::1980 1
+DEAL::1981 1
+DEAL::1982 1
+DEAL::1983 1
+DEAL::1984 1
+DEAL::1985 1
+DEAL::1986 1
+DEAL::1987 1
+DEAL::1988 1
+DEAL::1989 1
+DEAL::1990 1
+DEAL::1991 1
+DEAL::1992 1
+DEAL::1993 2
+DEAL::1994 2
+DEAL::1995 4
+DEAL::1996 4
+DEAL::1997 4
+DEAL::1998 4
+DEAL::1999 2
+DEAL::2000 4
+DEAL::2001 2
+DEAL::2002 2
+DEAL::2003 2
+DEAL::2004 3
+DEAL::2005 2
+DEAL::2006 4
+DEAL::2007 4
+DEAL::2008 4
+DEAL::2009 4
+DEAL::2010 4
+DEAL::2011 4
+DEAL::2012 4
+DEAL::2013 2
+DEAL::2014 4
+DEAL::2015 2
+DEAL::2016 4
+DEAL::2017 4
+DEAL::2018 4
+DEAL::2019 4
+DEAL::2020 4
+DEAL::2021 3
+DEAL::2022 4
+DEAL::2023 4
+DEAL::2024 4
+DEAL::2025 3
+DEAL::2026 4
+DEAL::2027 4
+DEAL::2028 4
+DEAL::2029 4
+DEAL::2030 3
+DEAL::2031 3
+DEAL::2032 3
+DEAL::2033 3
+DEAL::2034 3
+DEAL::2035 3
+DEAL::2036 3
+DEAL::2037 4
+DEAL::2038 4
+DEAL::2039 3
+DEAL::2040 4
+DEAL::2041 3
+DEAL::2042 3
+DEAL::2043 3
+DEAL::2044 3
+DEAL::2045 4
+DEAL::2046 4
+DEAL::2047 4
+DEAL::2048 4
+DEAL::2049 4
+DEAL::2050 4
+DEAL::2051 4
+DEAL::2052 2
+DEAL::2053 4
+DEAL::2054 4
+DEAL::2055 4
+DEAL::2056 4
+DEAL::2057 4
+DEAL::2058 4
+DEAL::2059 4
+DEAL::2060 4
+DEAL::2061 4
+DEAL::2062 3
+DEAL::2063 4
+DEAL::2064 4
+DEAL::2065 4
+DEAL::2066 4
+DEAL::2067 4
+DEAL::2068 3
+DEAL::2069 3
+DEAL::2070 4
+DEAL::2071 3
+DEAL::2072 4
+DEAL::2073 4
+DEAL::2074 4
+DEAL::2075 4
+DEAL::2076 4
+DEAL::2077 4
+DEAL::2078 4
+DEAL::2079 4
+DEAL::2080 4
+DEAL::2081 4
+DEAL::2082 4
+DEAL::2083 4
+DEAL::2084 3
+DEAL::2085 3
+DEAL::2086 3
+DEAL::2087 3
+DEAL::2088 3
+DEAL::2089 3
+DEAL::2090 2
+DEAL::2091 3
+DEAL::2092 3
+DEAL::2093 2
+DEAL::2094 3
+DEAL::2095 3
+DEAL::2096 3
+DEAL::2097 3
+DEAL::2098 2
+DEAL::2099 3
+DEAL::2100 3
+DEAL::2101 3
+DEAL::2102 3
+DEAL::2103 4
+DEAL::2104 3
+DEAL::2105 3
+DEAL::2106 3
+DEAL::2107 3
+DEAL::2108 3
+DEAL::2109 3
+DEAL::2110 3
+DEAL::2111 3
+DEAL::2112 3
+DEAL::2113 3
+DEAL::2114 3
+DEAL::2115 3
+DEAL::2116 3
+DEAL::2117 3
+DEAL::2118 3
+DEAL::2119 3
+DEAL::2120 3
+DEAL::2121 3
+DEAL::2122 3
+DEAL::2123 3
+DEAL::2124 3
+DEAL::2125 3
+DEAL::2126 3
+DEAL::2127 3
+DEAL::2128 3
+DEAL::2129 3
+DEAL::2130 3
+DEAL::2131 4
+DEAL::2132 3
+DEAL::2133 3
+DEAL::2134 3
+DEAL::2135 3
+DEAL::2136 3
+DEAL::2137 3
+DEAL::2138 3
+DEAL::2139 3
+DEAL::2140 3
+DEAL::2141 3
+DEAL::2142 4
+DEAL::2143 2
+DEAL::2144 4
+DEAL::2145 4
+DEAL::2146 4
+DEAL::2147 4
+DEAL::2148 4
+DEAL::2149 3
+DEAL::2150 3
+DEAL::2151 2
+DEAL::2152 3
+DEAL::2153 3
+DEAL::2154 3
+DEAL::2155 3
+DEAL::2156 2
+DEAL::2157 3
+DEAL::2158 4
+DEAL::2159 3
+DEAL::2160 3
+DEAL::2161 4
+DEAL::2162 3
+DEAL::2163 4
+DEAL::2164 4
+DEAL::2165 3
+DEAL::2166 3
+DEAL::2167 3
+DEAL::2168 3
+DEAL::2169 3
+DEAL::2170 3
+DEAL::2171 3
+DEAL::2172 4
+DEAL::2173 3
+DEAL::2174 4
+DEAL::2175 3
+DEAL::2176 4
+DEAL::2177 3
+DEAL::2178 3
+DEAL::2179 3
+DEAL::2180 3
+DEAL::2181 3
+DEAL::2182 4
+DEAL::2183 3
+DEAL::2184 4
+DEAL::2185 3
+DEAL::2186 3
+DEAL::2187 3
+DEAL::2188 3
+DEAL::2189 3
+DEAL::2190 3
+DEAL::2191 3
+DEAL::2192 4
+DEAL::2193 4
+DEAL::2194 4
+DEAL::2195 3
+DEAL::2196 4
+DEAL::2197 3
+DEAL::2198 4
+DEAL::2199 3
+DEAL::2200 3
+DEAL::2201 3
+DEAL::2202 3
+DEAL::2203 3
+DEAL::2204 3
+DEAL::2205 3
+DEAL::2206 3
+DEAL::2207 3
+DEAL::2208 3
+DEAL::2209 3
+DEAL::2210 4
+DEAL::2211 4
+DEAL::2212 4
+DEAL::2213 3
+DEAL::2214 4
+DEAL::2215 3
+DEAL::2216 3
+DEAL::2217 3
+DEAL::2218 4
+DEAL::2219 4
+DEAL::2220 4
+DEAL::2221 4
+DEAL::2222 4
+DEAL::2223 4
+DEAL::2224 4
+DEAL::2225 4
+DEAL::2226 4
+DEAL::2227 4
+DEAL::2228 4
+DEAL::2229 4
+DEAL::2230 4
+DEAL::2231 4
+DEAL::2232 4
+DEAL::2233 4
+DEAL::2234 4
+DEAL::2235 4
+DEAL::2236 4
+DEAL::2237 4
+DEAL::2238 4
+DEAL::2239 4
+DEAL::2240 4
+DEAL::2241 4
+DEAL::2242 4
+DEAL::2243 4
+DEAL::2244 4
+DEAL::2245 4
+DEAL::2246 4
+DEAL::2247 4
+DEAL::2248 4
+DEAL::2249 4
+DEAL::2250 4
+DEAL::2251 4
+DEAL::2252 4
+DEAL::2253 3
+DEAL::2254 3
+DEAL::2255 4
+DEAL::2256 4
+DEAL::2257 4
+DEAL::2258 4
+DEAL::2259 4
+DEAL::2260 4
+DEAL::2261 4
+DEAL::2262 4
+DEAL::2263 3
+DEAL::2264 4
+DEAL::2265 4
+DEAL::2266 4
+DEAL::2267 4
+DEAL::2268 4
+DEAL::2269 4
+DEAL::2270 4
+DEAL::2271 4
+DEAL::2272 4
+DEAL::2273 4
+DEAL::2274 4
+DEAL::2275 4
+DEAL::2276 4
+DEAL::2277 4
+DEAL::2278 4
+DEAL::2279 4
+DEAL::2280 4
+DEAL::2281 4
+DEAL::2282 4
+DEAL::2283 4
+DEAL::2284 4
+DEAL::2285 4
+DEAL::2286 4
+DEAL::2287 4
+DEAL::2288 4
+DEAL::2289 4
+DEAL::2290 3
+DEAL::2291 4
+DEAL::2292 4
+DEAL::2293 4
+DEAL::2294 4
+DEAL::2295 4
+DEAL::2296 4
+DEAL::2297 4
+DEAL::2298 4
+DEAL::2299 4
+DEAL::2300 4
+DEAL::2301 4
+DEAL::2302 4
+DEAL::2303 4
+DEAL::2304 4
+DEAL::2305 4
+DEAL::2306 4
+DEAL::2307 4
+DEAL::2308 4
+DEAL::2309 4
+DEAL::2310 4
+DEAL::2311 4
+DEAL::2312 4
+DEAL::2313 4
+DEAL::2314 4
+DEAL::2315 4
+DEAL::2316 4
+DEAL::2317 4
+DEAL::2318 4
+DEAL::2319 4
+DEAL::2320 4
+DEAL::2321 4
+DEAL::2322 4
+DEAL::2323 4
+DEAL::2324 4
+DEAL::2325 4
+DEAL::2326 4
+DEAL::2327 4
+DEAL::2328 4
+DEAL::2329 4
+DEAL::2330 4
+DEAL::2331 4
+DEAL::2332 4
+DEAL::2333 4
+DEAL::2334 0
+DEAL::2335 0
+DEAL::2336 1
+DEAL::2337 0
+DEAL::2338 0
+DEAL::2339 1
+DEAL::2340 1
+DEAL::2341 1
+DEAL::2342 1
+DEAL::2343 1
+DEAL::2344 0
+DEAL::2345 0
+DEAL::2346 0
+DEAL::2347 1
+DEAL::2348 1
+DEAL::2349 1
+DEAL::2350 1
+DEAL::2351 1
+DEAL::2352 0
+DEAL::2353 0
+DEAL::2354 0
+DEAL::2355 0
+DEAL::2356 0
+DEAL::2357 0
+DEAL::2358 0
+DEAL::2359 0
+DEAL::2360 1
+DEAL::2361 0
+DEAL::2362 0
+DEAL::2363 0
+DEAL::2364 0
+DEAL::2365 0
+DEAL::2366 0
+DEAL::2367 0
+DEAL::2368 0
+DEAL::2369 0
+DEAL::2370 0
+DEAL::2371 0
+DEAL::2372 0
+DEAL::2373 1
+DEAL::2374 1
+DEAL::2375 1
+DEAL::2376 0
+DEAL::2377 0
+DEAL::2378 0
+DEAL::2379 0
+DEAL::2380 0
+DEAL::2381 0
DEAL::2382 2
-DEAL::2383 2
-DEAL::2384 2
-DEAL::2385 2
-DEAL::2386 2
-DEAL::2387 2
-DEAL::2388 2
-DEAL::2389 2
-DEAL::2390 2
-DEAL::2391 2
-DEAL::2392 2
-DEAL::2393 2
-DEAL::2394 3
-DEAL::2395 2
-DEAL::2396 3
-DEAL::2397 2
-DEAL::2398 2
-DEAL::2399 2
-DEAL::2400 2
-DEAL::2401 2
-DEAL::2402 4
-DEAL::2403 2
+DEAL::2383 1
+DEAL::2384 1
+DEAL::2385 1
+DEAL::2386 1
+DEAL::2387 0
+DEAL::2388 1
+DEAL::2389 1
+DEAL::2390 1
+DEAL::2391 1
+DEAL::2392 1
+DEAL::2393 1
+DEAL::2394 1
+DEAL::2395 1
+DEAL::2396 1
+DEAL::2397 1
+DEAL::2398 1
+DEAL::2399 1
+DEAL::2400 0
+DEAL::2401 1
+DEAL::2402 0
+DEAL::2403 0
DEAL::2404 2
DEAL::2405 2
DEAL::2406 2
DEAL::2414 2
DEAL::2415 2
DEAL::2416 2
-DEAL::2417 2
+DEAL::2417 1
DEAL::2418 2
DEAL::2419 2
-DEAL::2420 2
+DEAL::2420 1
DEAL::2421 2
DEAL::2422 2
DEAL::2423 2
DEAL::2424 2
-DEAL::2425 0
+DEAL::2425 2
DEAL::2426 2
DEAL::2427 2
DEAL::2428 2
DEAL::2435 2
DEAL::2436 2
DEAL::2437 2
-DEAL::2438 0
+DEAL::2438 2
DEAL::2439 2
DEAL::2440 2
DEAL::2441 2
DEAL::2442 2
DEAL::2443 2
-DEAL::2444 0
+DEAL::2444 2
DEAL::2445 2
DEAL::2446 2
-DEAL::2447 0
-DEAL::2448 0
+DEAL::2447 2
+DEAL::2448 2
DEAL::2449 2
DEAL::2450 2
DEAL::2451 2
DEAL::2453 2
DEAL::2454 2
DEAL::2455 2
-DEAL::2456 0
-DEAL::2457 2
-DEAL::2458 0
-DEAL::2459 0
+DEAL::2456 2
+DEAL::2457 1
+DEAL::2458 2
+DEAL::2459 2
DEAL::2460 2
DEAL::2461 2
-DEAL::2462 0
+DEAL::2462 2
DEAL::2463 2
DEAL::2464 2
-DEAL::2465 0
-DEAL::2466 0
-DEAL::2467 0
+DEAL::2465 2
+DEAL::2466 2
+DEAL::2467 2
DEAL::2468 2
DEAL::2469 2
-DEAL::2470 0
+DEAL::2470 2
DEAL::2471 2
DEAL::2472 2
DEAL::2473 2
-DEAL::2474 0
-DEAL::2475 0
+DEAL::2474 2
+DEAL::2475 2
DEAL::2476 2
-DEAL::2477 0
-DEAL::2478 0
-DEAL::2479 0
-DEAL::2480 0
-DEAL::2481 0
-DEAL::2482 0
-DEAL::2483 0
-DEAL::2484 2
-DEAL::2485 2
+DEAL::2477 2
+DEAL::2478 2
+DEAL::2479 2
+DEAL::2480 2
+DEAL::2481 2
+DEAL::2482 2
+DEAL::2483 2
+DEAL::2484 1
+DEAL::2485 1
DEAL::2486 2
-DEAL::2487 2
+DEAL::2487 1
DEAL::2488 2
-DEAL::2489 2
-DEAL::2490 2
-DEAL::2491 0
+DEAL::2489 1
+DEAL::2490 1
+DEAL::2491 2
DEAL::2492 2
-DEAL::2493 2
-DEAL::2494 2
-DEAL::2495 0
+DEAL::2493 1
+DEAL::2494 1
+DEAL::2495 2
DEAL::2496 2
DEAL::2497 2
DEAL::2498 2
DEAL::2499 2
DEAL::2500 2
DEAL::2501 2
-DEAL::2502 0
-DEAL::2503 0
-DEAL::2504 0
-DEAL::2505 0
-DEAL::2506 2
-DEAL::2507 2
-DEAL::2508 0
-DEAL::2509 2
-DEAL::2510 0
-DEAL::2511 0
-DEAL::2512 2
-DEAL::2513 2
-DEAL::2514 0
-DEAL::2515 0
-DEAL::2516 0
-DEAL::2517 0
-DEAL::2518 0
-DEAL::2519 0
-DEAL::2520 0
-DEAL::2521 4
-DEAL::2522 4
-DEAL::2523 3
-DEAL::2524 3
-DEAL::2525 4
-DEAL::2526 4
-DEAL::2527 4
-DEAL::2528 3
-DEAL::2529 4
-DEAL::2530 3
-DEAL::2531 4
-DEAL::2532 4
-DEAL::2533 4
-DEAL::2534 4
-DEAL::2535 4
-DEAL::2536 4
-DEAL::2537 4
-DEAL::2538 4
-DEAL::2539 4
-DEAL::2540 4
-DEAL::2541 3
-DEAL::2542 3
-DEAL::2543 4
-DEAL::2544 4
-DEAL::2545 4
-DEAL::2546 3
-DEAL::2547 3
-DEAL::2548 3
-DEAL::2549 4
-DEAL::2550 4
-DEAL::2551 4
-DEAL::2552 4
-DEAL::2553 4
-DEAL::2554 4
-DEAL::2555 4
-DEAL::2556 4
-DEAL::2557 4
-DEAL::2558 4
-DEAL::2559 4
-DEAL::2560 4
-DEAL::2561 3
-DEAL::2562 4
-DEAL::2563 4
-DEAL::2564 4
-DEAL::2565 4
-DEAL::2566 4
-DEAL::2567 4
-DEAL::2568 4
-DEAL::2569 4
-DEAL::2570 4
-DEAL::2571 3
-DEAL::2572 4
-DEAL::2573 4
-DEAL::2574 4
-DEAL::2575 4
-DEAL::2576 4
-DEAL::2577 4
-DEAL::2578 3
-DEAL::2579 3
-DEAL::2580 4
-DEAL::2581 3
-DEAL::2582 3
-DEAL::2583 3
-DEAL::2584 3
-DEAL::2585 3
-DEAL::2586 3
-DEAL::2587 3
-DEAL::2588 3
-DEAL::2589 3
-DEAL::2590 3
-DEAL::2591 3
-DEAL::2592 4
-DEAL::2593 4
-DEAL::2594 4
-DEAL::2595 4
-DEAL::2596 3
-DEAL::2597 3
-DEAL::2598 3
-DEAL::2599 3
-DEAL::2600 3
-DEAL::2601 4
-DEAL::2602 4
-DEAL::2603 4
-DEAL::2604 4
-DEAL::2605 4
-DEAL::2606 4
-DEAL::2607 4
-DEAL::2608 3
-DEAL::2609 3
-DEAL::2610 3
-DEAL::2611 4
-DEAL::2612 4
-DEAL::2613 4
-DEAL::2614 4
-DEAL::2615 4
-DEAL::2616 4
-DEAL::2617 4
-DEAL::2618 4
-DEAL::2619 4
-DEAL::2620 4
-DEAL::2621 3
-DEAL::2622 3
-DEAL::2623 4
-DEAL::2624 4
-DEAL::2625 4
-DEAL::2626 4
-DEAL::2627 3
-DEAL::2628 4
-DEAL::2629 4
-DEAL::2630 4
-DEAL::2631 4
-DEAL::2632 4
-DEAL::2633 4
-DEAL::2634 4
-DEAL::2635 4
-DEAL::2636 4
-DEAL::2637 4
-DEAL::2638 4
-DEAL::2639 4
-DEAL::2640 4
-DEAL::2641 4
-DEAL::2642 4
-DEAL::2643 4
-DEAL::2644 3
-DEAL::2645 4
-DEAL::2646 4
-DEAL::2647 3
-DEAL::2648 4
-DEAL::2649 3
-DEAL::2650 3
-DEAL::2651 3
-DEAL::2652 3
-DEAL::2653 3
-DEAL::2654 3
-DEAL::2655 3
-DEAL::2656 3
-DEAL::2657 3
-DEAL::2658 3
-DEAL::2659 3
-DEAL::2660 3
-DEAL::2661 3
-DEAL::2662 3
-DEAL::2663 3
-DEAL::2664 3
-DEAL::2665 3
-DEAL::2666 3
-DEAL::2667 3
-DEAL::2668 3
-DEAL::2669 4
-DEAL::2670 4
-DEAL::2671 4
-DEAL::2672 4
-DEAL::2673 4
-DEAL::2674 4
-DEAL::2675 4
-DEAL::2676 4
+DEAL::2502 2
+DEAL::2503 2
+DEAL::2504 2
+DEAL::2505 2
+DEAL::2506 1
+DEAL::2507 1
+DEAL::2508 2
+DEAL::2509 1
+DEAL::2510 1
+DEAL::2511 2
+DEAL::2512 1
+DEAL::2513 1
+DEAL::2514 2
+DEAL::2515 2
+DEAL::2516 2
+DEAL::2517 2
+DEAL::2518 2
+DEAL::2519 2
+DEAL::2520 2
+DEAL::2521 0
+DEAL::2522 0
+DEAL::2523 0
+DEAL::2524 0
+DEAL::2525 0
+DEAL::2526 0
+DEAL::2527 0
+DEAL::2528 0
+DEAL::2529 0
+DEAL::2530 1
+DEAL::2531 0
+DEAL::2532 0
+DEAL::2533 0
+DEAL::2534 0
+DEAL::2535 0
+DEAL::2536 0
+DEAL::2537 0
+DEAL::2538 0
+DEAL::2539 0
+DEAL::2540 0
+DEAL::2541 0
+DEAL::2542 0
+DEAL::2543 0
+DEAL::2544 0
+DEAL::2545 0
+DEAL::2546 0
+DEAL::2547 0
+DEAL::2548 0
+DEAL::2549 0
+DEAL::2550 0
+DEAL::2551 0
+DEAL::2552 0
+DEAL::2553 0
+DEAL::2554 0
+DEAL::2555 0
+DEAL::2556 0
+DEAL::2557 0
+DEAL::2558 0
+DEAL::2559 0
+DEAL::2560 0
+DEAL::2561 0
+DEAL::2562 0
+DEAL::2563 0
+DEAL::2564 0
+DEAL::2565 0
+DEAL::2566 0
+DEAL::2567 0
+DEAL::2568 0
+DEAL::2569 0
+DEAL::2570 0
+DEAL::2571 0
+DEAL::2572 0
+DEAL::2573 0
+DEAL::2574 0
+DEAL::2575 0
+DEAL::2576 0
+DEAL::2577 0
+DEAL::2578 1
+DEAL::2579 0
+DEAL::2580 0
+DEAL::2581 0
+DEAL::2582 1
+DEAL::2583 1
+DEAL::2584 1
+DEAL::2585 1
+DEAL::2586 0
+DEAL::2587 0
+DEAL::2588 0
+DEAL::2589 0
+DEAL::2590 0
+DEAL::2591 0
+DEAL::2592 0
+DEAL::2593 0
+DEAL::2594 0
+DEAL::2595 0
+DEAL::2596 0
+DEAL::2597 0
+DEAL::2598 0
+DEAL::2599 0
+DEAL::2600 0
+DEAL::2601 0
+DEAL::2602 0
+DEAL::2603 0
+DEAL::2604 0
+DEAL::2605 0
+DEAL::2606 0
+DEAL::2607 0
+DEAL::2608 0
+DEAL::2609 0
+DEAL::2610 0
+DEAL::2611 0
+DEAL::2612 0
+DEAL::2613 0
+DEAL::2614 0
+DEAL::2615 0
+DEAL::2616 0
+DEAL::2617 0
+DEAL::2618 0
+DEAL::2619 0
+DEAL::2620 0
+DEAL::2621 0
+DEAL::2622 0
+DEAL::2623 0
+DEAL::2624 0
+DEAL::2625 0
+DEAL::2626 0
+DEAL::2627 0
+DEAL::2628 0
+DEAL::2629 0
+DEAL::2630 0
+DEAL::2631 0
+DEAL::2632 0
+DEAL::2633 0
+DEAL::2634 0
+DEAL::2635 0
+DEAL::2636 0
+DEAL::2637 0
+DEAL::2638 0
+DEAL::2639 0
+DEAL::2640 0
+DEAL::2641 0
+DEAL::2642 0
+DEAL::2643 0
+DEAL::2644 0
+DEAL::2645 0
+DEAL::2646 0
+DEAL::2647 0
+DEAL::2648 0
+DEAL::2649 0
+DEAL::2650 0
+DEAL::2651 0
+DEAL::2652 0
+DEAL::2653 0
+DEAL::2654 0
+DEAL::2655 0
+DEAL::2656 0
+DEAL::2657 0
+DEAL::2658 0
+DEAL::2659 0
+DEAL::2660 0
+DEAL::2661 0
+DEAL::2662 0
+DEAL::2663 0
+DEAL::2664 0
+DEAL::2665 0
+DEAL::2666 0
+DEAL::2667 0
+DEAL::2668 0
+DEAL::2669 0
+DEAL::2670 0
+DEAL::2671 0
+DEAL::2672 0
+DEAL::2673 0
+DEAL::2674 0
+DEAL::2675 0
+DEAL::2676 0
DEAL::2677 4
-DEAL::2678 4
-DEAL::2679 4
-DEAL::2680 4
-DEAL::2681 4
-DEAL::2682 4
-DEAL::2683 4
-DEAL::2684 4
-DEAL::2685 4
-DEAL::2686 4
+DEAL::2678 0
+DEAL::2679 0
+DEAL::2680 0
+DEAL::2681 0
+DEAL::2682 0
+DEAL::2683 0
+DEAL::2684 0
+DEAL::2685 0
+DEAL::2686 0
DEAL::2687 4
-DEAL::2688 4
+DEAL::2688 0
DEAL::2689 4
DEAL::2690 4
-DEAL::2691 4
+DEAL::2691 0
DEAL::2692 4
DEAL::2693 4
DEAL::2694 4
DEAL::2695 4
DEAL::2696 4
-DEAL::2697 4
+DEAL::2697 0
DEAL::2698 4
-DEAL::2699 4
-DEAL::2700 4
+DEAL::2699 0
+DEAL::2700 0
DEAL::2701 4
-DEAL::2702 4
-DEAL::2703 4
-DEAL::2704 4
-DEAL::2705 4
-DEAL::2706 4
-DEAL::2707 4
-DEAL::2708 4
-DEAL::2709 4
-DEAL::2710 4
-DEAL::2711 4
-DEAL::2712 4
-DEAL::2713 4
-DEAL::2714 4
-DEAL::2715 4
-DEAL::2716 4
-DEAL::2717 4
-DEAL::2718 1
-DEAL::2719 1
-DEAL::2720 1
-DEAL::2721 1
-DEAL::2722 1
-DEAL::2723 1
-DEAL::2724 1
-DEAL::2725 1
-DEAL::2726 1
-DEAL::2727 1
-DEAL::2728 1
-DEAL::2729 1
-DEAL::2730 1
-DEAL::2731 1
-DEAL::2732 1
-DEAL::2733 1
-DEAL::2734 1
-DEAL::2735 1
-DEAL::2736 1
-DEAL::2737 1
-DEAL::2738 1
-DEAL::2739 1
-DEAL::2740 1
-DEAL::2741 1
-DEAL::2742 1
-DEAL::2743 1
-DEAL::2744 1
-DEAL::2745 1
-DEAL::2746 1
-DEAL::2747 1
-DEAL::2748 1
-DEAL::2749 1
-DEAL::2750 1
-DEAL::2751 1
-DEAL::2752 1
-DEAL::2753 1
-DEAL::2754 1
-DEAL::2755 1
-DEAL::2756 1
-DEAL::2757 1
-DEAL::2758 1
-DEAL::2759 1
-DEAL::2760 1
-DEAL::2761 1
-DEAL::2762 1
-DEAL::2763 1
-DEAL::2764 1
-DEAL::2765 1
-DEAL::2766 1
-DEAL::2767 1
-DEAL::2768 1
-DEAL::2769 1
-DEAL::2770 1
-DEAL::2771 1
-DEAL::2772 1
-DEAL::2773 1
-DEAL::2774 1
-DEAL::2775 1
-DEAL::2776 1
-DEAL::2777 1
-DEAL::2778 1
-DEAL::2779 1
-DEAL::2780 1
-DEAL::2781 1
-DEAL::2782 1
-DEAL::2783 1
-DEAL::2784 1
-DEAL::2785 1
-DEAL::2786 1
-DEAL::2787 1
-DEAL::2788 1
-DEAL::2789 1
-DEAL::2790 1
-DEAL::2791 1
-DEAL::2792 1
-DEAL::2793 1
-DEAL::2794 1
-DEAL::2795 1
-DEAL::2796 1
-DEAL::2797 1
-DEAL::2798 1
-DEAL::2799 1
-DEAL::2800 1
-DEAL::2801 1
-DEAL::2802 1
-DEAL::2803 1
-DEAL::2804 1
-DEAL::2805 1
-DEAL::2806 1
-DEAL::2807 1
-DEAL::2808 1
-DEAL::2809 1
-DEAL::2810 1
-DEAL::2811 1
-DEAL::2812 1
-DEAL::2813 1
-DEAL::2814 1
-DEAL::2815 1
-DEAL::2816 1
-DEAL::2817 1
+DEAL::2702 0
+DEAL::2703 0
+DEAL::2704 0
+DEAL::2705 0
+DEAL::2706 0
+DEAL::2707 0
+DEAL::2708 0
+DEAL::2709 0
+DEAL::2710 0
+DEAL::2711 0
+DEAL::2712 0
+DEAL::2713 0
+DEAL::2714 0
+DEAL::2715 0
+DEAL::2716 0
+DEAL::2717 0
+DEAL::2718 3
+DEAL::2719 3
+DEAL::2720 3
+DEAL::2721 3
+DEAL::2722 3
+DEAL::2723 3
+DEAL::2724 3
+DEAL::2725 3
+DEAL::2726 3
+DEAL::2727 3
+DEAL::2728 3
+DEAL::2729 3
+DEAL::2730 3
+DEAL::2731 3
+DEAL::2732 3
+DEAL::2733 3
+DEAL::2734 3
+DEAL::2735 3
+DEAL::2736 3
+DEAL::2737 3
+DEAL::2738 3
+DEAL::2739 3
+DEAL::2740 3
+DEAL::2741 3
+DEAL::2742 3
+DEAL::2743 3
+DEAL::2744 3
+DEAL::2745 3
+DEAL::2746 3
+DEAL::2747 3
+DEAL::2748 3
+DEAL::2749 3
+DEAL::2750 3
+DEAL::2751 3
+DEAL::2752 3
+DEAL::2753 3
+DEAL::2754 3
+DEAL::2755 3
+DEAL::2756 3
+DEAL::2757 3
+DEAL::2758 3
+DEAL::2759 3
+DEAL::2760 3
+DEAL::2761 3
+DEAL::2762 3
+DEAL::2763 3
+DEAL::2764 3
+DEAL::2765 3
+DEAL::2766 3
+DEAL::2767 3
+DEAL::2768 3
+DEAL::2769 3
+DEAL::2770 3
+DEAL::2771 3
+DEAL::2772 3
+DEAL::2773 3
+DEAL::2774 3
+DEAL::2775 3
+DEAL::2776 3
+DEAL::2777 3
+DEAL::2778 3
+DEAL::2779 3
+DEAL::2780 3
+DEAL::2781 3
+DEAL::2782 3
+DEAL::2783 3
+DEAL::2784 3
+DEAL::2785 3
+DEAL::2786 3
+DEAL::2787 3
+DEAL::2788 3
+DEAL::2789 3
+DEAL::2790 3
+DEAL::2791 3
+DEAL::2792 3
+DEAL::2793 3
+DEAL::2794 3
+DEAL::2795 3
+DEAL::2796 3
+DEAL::2797 3
+DEAL::2798 3
+DEAL::2799 3
+DEAL::2800 3
+DEAL::2801 3
+DEAL::2802 3
+DEAL::2803 3
+DEAL::2804 3
+DEAL::2805 3
+DEAL::2806 3
+DEAL::2807 3
+DEAL::2808 3
+DEAL::2809 3
+DEAL::2810 3
+DEAL::2811 3
+DEAL::2812 3
+DEAL::2813 3
+DEAL::2814 3
+DEAL::2815 3
+DEAL::2816 4
+DEAL::2817 3
DEAL::2818 4
-DEAL::2819 1
-DEAL::2820 1
-DEAL::2821 1
-DEAL::2822 1
-DEAL::2823 1
-DEAL::2824 1
-DEAL::2825 1
-DEAL::2826 1
-DEAL::2827 1
-DEAL::2828 1
-DEAL::2829 1
-DEAL::2830 1
-DEAL::2831 1
-DEAL::2832 1
-DEAL::2833 1
-DEAL::2834 1
-DEAL::2835 1
-DEAL::2836 1
-DEAL::2837 1
-DEAL::2838 1
-DEAL::2839 1
-DEAL::2840 1
-DEAL::2841 1
-DEAL::2842 1
-DEAL::2843 1
-DEAL::2844 1
-DEAL::2845 1
-DEAL::2846 1
-DEAL::2847 1
-DEAL::2848 1
-DEAL::2849 1
-DEAL::2850 1
-DEAL::2851 1
-DEAL::2852 1
-DEAL::2853 1
-DEAL::2854 1
-DEAL::2855 1
-DEAL::2856 1
-DEAL::2857 1
-DEAL::2858 1
-DEAL::2859 1
-DEAL::2860 1
-DEAL::2861 1
-DEAL::2862 1
-DEAL::2863 1
-DEAL::2864 1
-DEAL::2865 1
-DEAL::2866 1
-DEAL::2867 1
-DEAL::2868 1
-DEAL::2869 1
-DEAL::2870 1
-DEAL::2871 1
-DEAL::2872 1
-DEAL::2873 1
-DEAL::2874 1
-DEAL::2875 1
+DEAL::2819 3
+DEAL::2820 4
+DEAL::2821 3
+DEAL::2822 4
+DEAL::2823 3
+DEAL::2824 3
+DEAL::2825 3
+DEAL::2826 3
+DEAL::2827 3
+DEAL::2828 3
+DEAL::2829 3
+DEAL::2830 3
+DEAL::2831 3
+DEAL::2832 3
+DEAL::2833 3
+DEAL::2834 3
+DEAL::2835 3
+DEAL::2836 3
+DEAL::2837 3
+DEAL::2838 3
+DEAL::2839 3
+DEAL::2840 4
+DEAL::2841 3
+DEAL::2842 4
+DEAL::2843 3
+DEAL::2844 4
+DEAL::2845 3
+DEAL::2846 4
+DEAL::2847 3
+DEAL::2848 3
+DEAL::2849 3
+DEAL::2850 3
+DEAL::2851 3
+DEAL::2852 3
+DEAL::2853 3
+DEAL::2854 3
+DEAL::2855 3
+DEAL::2856 4
+DEAL::2857 3
+DEAL::2858 3
+DEAL::2859 3
+DEAL::2860 3
+DEAL::2861 3
+DEAL::2862 3
+DEAL::2863 3
+DEAL::2864 3
+DEAL::2865 3
+DEAL::2866 3
+DEAL::2867 3
+DEAL::2868 3
+DEAL::2869 4
+DEAL::2870 3
+DEAL::2871 4
+DEAL::2872 3
+DEAL::2873 3
+DEAL::2874 3
+DEAL::2875 3
DEAL::2876 2
-DEAL::2877 0
+DEAL::2877 2
DEAL::2878 2
-DEAL::2879 0
-DEAL::2880 0
+DEAL::2879 2
+DEAL::2880 2
DEAL::2881 2
-DEAL::2882 0
+DEAL::2882 2
DEAL::2883 2
DEAL::2884 2
DEAL::2885 2
DEAL::2886 2
DEAL::2887 2
-DEAL::2888 0
-DEAL::2889 0
-DEAL::2890 0
-DEAL::2891 0
-DEAL::2892 0
-DEAL::2893 0
-DEAL::2894 0
-DEAL::2895 0
-DEAL::2896 0
-DEAL::2897 0
-DEAL::2898 0
-DEAL::2899 0
-DEAL::2900 0
-DEAL::2901 0
-DEAL::2902 0
-DEAL::2903 0
-DEAL::2904 0
-DEAL::2905 0
-DEAL::2906 0
-DEAL::2907 0
-DEAL::2908 0
-DEAL::2909 0
-DEAL::2910 0
-DEAL::2911 0
-DEAL::2912 0
-DEAL::2913 0
-DEAL::2914 0
-DEAL::2915 0
-DEAL::2916 0
-DEAL::2917 0
-DEAL::2918 0
-DEAL::2919 0
-DEAL::2920 0
-DEAL::2921 0
-DEAL::2922 0
-DEAL::2923 0
+DEAL::2888 2
+DEAL::2889 2
+DEAL::2890 2
+DEAL::2891 2
+DEAL::2892 2
+DEAL::2893 2
+DEAL::2894 2
+DEAL::2895 2
+DEAL::2896 2
+DEAL::2897 2
+DEAL::2898 2
+DEAL::2899 2
+DEAL::2900 2
+DEAL::2901 2
+DEAL::2902 2
+DEAL::2903 2
+DEAL::2904 2
+DEAL::2905 2
+DEAL::2906 2
+DEAL::2907 2
+DEAL::2908 2
+DEAL::2909 2
+DEAL::2910 2
+DEAL::2911 2
+DEAL::2912 2
+DEAL::2913 2
+DEAL::2914 2
+DEAL::2915 2
+DEAL::2916 2
+DEAL::2917 2
+DEAL::2918 2
+DEAL::2919 2
+DEAL::2920 2
+DEAL::2921 2
+DEAL::2922 2
+DEAL::2923 2
DEAL::2924 4
DEAL::2925 4
DEAL::2926 4
DEAL::2927 4
-DEAL::2928 4
-DEAL::2929 4
+DEAL::2928 0
+DEAL::2929 3
DEAL::2930 4
DEAL::2931 4
DEAL::2932 4
DEAL::2933 4
-DEAL::2934 4
+DEAL::2934 3
DEAL::2935 4
DEAL::2936 4
-DEAL::2937 4
+DEAL::2937 0
DEAL::2938 4
DEAL::2939 4
DEAL::2940 4
DEAL::2941 4
DEAL::2942 4
-DEAL::2943 4
+DEAL::2943 0
DEAL::2944 4
DEAL::2945 4
DEAL::2946 4
DEAL::2949 4
DEAL::2950 4
DEAL::2951 4
-DEAL::2952 4
-DEAL::2953 1
+DEAL::2952 3
+DEAL::2953 4
DEAL::2954 4
DEAL::2955 4
DEAL::2956 4
DEAL::2957 4
-DEAL::2958 4
+DEAL::2958 3
DEAL::2959 4
-DEAL::2960 4
+DEAL::2960 0
DEAL::2961 4
DEAL::2962 4
-DEAL::2963 4
+DEAL::2963 0
DEAL::2964 4
DEAL::2965 4
-DEAL::2966 4
+DEAL::2966 0
DEAL::2967 4
DEAL::2968 4
DEAL::2969 4
DEAL::2970 4
DEAL::2971 4
-DEAL::2972 4
-DEAL::2973 1
-DEAL::2974 4
-DEAL::2975 4
-DEAL::2976 4
-DEAL::2977 4
-DEAL::2978 4
-DEAL::2979 4
-DEAL::2980 4
+DEAL::2972 0
+DEAL::2973 3
+DEAL::2974 3
+DEAL::2975 3
+DEAL::2976 3
+DEAL::2977 3
+DEAL::2978 3
+DEAL::2979 0
+DEAL::2980 0
DEAL::2981 4
DEAL::2982 4
-DEAL::2983 4
-DEAL::2984 4
-DEAL::2985 4
-DEAL::2986 4
+DEAL::2983 0
+DEAL::2984 0
+DEAL::2985 0
+DEAL::2986 0
DEAL::2987 4
DEAL::2988 4
-DEAL::2989 4
-DEAL::2990 4
+DEAL::2989 3
+DEAL::2990 3
DEAL::2991 4
-DEAL::2992 1
-DEAL::2993 4
-DEAL::2994 4
-DEAL::2995 4
+DEAL::2992 4
+DEAL::2993 3
+DEAL::2994 3
+DEAL::2995 0
DEAL::2996 4
DEAL::2997 4
-DEAL::2998 4
+DEAL::2998 0
DEAL::2999 4
DEAL::3000 4
DEAL::3001 4
-DEAL::3002 4
-DEAL::3003 4
-DEAL::3004 4
-DEAL::3005 4
-DEAL::3006 4
-DEAL::3007 4
-DEAL::3008 4
-DEAL::3009 4
-DEAL::3010 4
-DEAL::3011 4
-DEAL::3012 4
-DEAL::3013 4
-DEAL::3014 4
-DEAL::3015 4
-DEAL::3016 4
-DEAL::3017 4
-DEAL::3018 4
-DEAL::3019 4
-DEAL::3020 4
-DEAL::3021 4
-DEAL::3022 4
-DEAL::3023 4
-DEAL::3024 4
-DEAL::3025 4
-DEAL::3026 4
-DEAL::3027 4
-DEAL::3028 4
-DEAL::3029 4
-DEAL::3030 4
-DEAL::3031 4
-DEAL::3032 4
-DEAL::3033 4
-DEAL::3034 4
-DEAL::3035 4
-DEAL::3036 4
-DEAL::3037 4
-DEAL::3038 4
-DEAL::3039 4
-DEAL::3040 4
-DEAL::3041 4
-DEAL::3042 4
-DEAL::3043 4
-DEAL::3044 4
-DEAL::3045 4
-DEAL::3046 4
-DEAL::3047 4
-DEAL::3048 4
-DEAL::3049 4
-DEAL::3050 4
-DEAL::3051 4
-DEAL::3052 4
-DEAL::3053 4
-DEAL::3054 4
-DEAL::3055 4
-DEAL::3056 4
-DEAL::3057 4
-DEAL::3058 4
-DEAL::3059 4
-DEAL::3060 4
-DEAL::3061 4
-DEAL::3062 4
-DEAL::3063 4
-DEAL::3064 4
-DEAL::3065 4
-DEAL::3066 4
-DEAL::3067 4
-DEAL::3068 4
-DEAL::3069 4
-DEAL::3070 4
-DEAL::3071 4
-DEAL::3072 4
-DEAL::3073 4
-DEAL::3074 4
-DEAL::3075 4
-DEAL::3076 4
+DEAL::3002 0
+DEAL::3003 0
+DEAL::3004 0
+DEAL::3005 0
+DEAL::3006 0
+DEAL::3007 0
+DEAL::3008 0
+DEAL::3009 0
+DEAL::3010 0
+DEAL::3011 0
+DEAL::3012 0
+DEAL::3013 0
+DEAL::3014 0
+DEAL::3015 0
+DEAL::3016 0
+DEAL::3017 0
+DEAL::3018 0
+DEAL::3019 0
+DEAL::3020 0
+DEAL::3021 0
+DEAL::3022 0
+DEAL::3023 0
+DEAL::3024 0
+DEAL::3025 0
+DEAL::3026 0
+DEAL::3027 0
+DEAL::3028 0
+DEAL::3029 0
+DEAL::3030 0
+DEAL::3031 0
+DEAL::3032 0
+DEAL::3033 0
+DEAL::3034 0
+DEAL::3035 0
+DEAL::3036 0
+DEAL::3037 0
+DEAL::3038 0
+DEAL::3039 0
+DEAL::3040 0
+DEAL::3041 0
+DEAL::3042 0
+DEAL::3043 0
+DEAL::3044 0
+DEAL::3045 0
+DEAL::3046 0
+DEAL::3047 0
+DEAL::3048 0
+DEAL::3049 0
+DEAL::3050 0
+DEAL::3051 0
+DEAL::3052 0
+DEAL::3053 0
+DEAL::3054 0
+DEAL::3055 0
+DEAL::3056 0
+DEAL::3057 0
+DEAL::3058 0
+DEAL::3059 0
+DEAL::3060 0
+DEAL::3061 0
+DEAL::3062 0
+DEAL::3063 0
+DEAL::3064 0
+DEAL::3065 0
+DEAL::3066 0
+DEAL::3067 0
+DEAL::3068 0
+DEAL::3069 0
+DEAL::3070 0
+DEAL::3071 0
+DEAL::3072 0
+DEAL::3073 0
+DEAL::3074 0
+DEAL::3075 0
+DEAL::3076 0
DEAL::3077 4
DEAL::3078 4
DEAL::3079 4
DEAL::3080 4
DEAL::3081 4
-DEAL::3082 1
+DEAL::3082 4
DEAL::3083 4
DEAL::3084 4
-DEAL::3085 1
+DEAL::3085 4
DEAL::3086 4
DEAL::3087 4
DEAL::3088 4
DEAL::3098 4
DEAL::3099 4
DEAL::3100 4
-DEAL::3101 1
+DEAL::3101 4
DEAL::3102 4
DEAL::3103 4
-DEAL::3104 1
+DEAL::3104 4
DEAL::3105 4
-DEAL::3106 1
+DEAL::3106 4
DEAL::3107 4
-DEAL::3108 1
-DEAL::3109 1
-DEAL::3110 1
-DEAL::3111 1
-DEAL::3112 1
+DEAL::3108 4
+DEAL::3109 4
+DEAL::3110 4
+DEAL::3111 4
+DEAL::3112 4
DEAL::3113 4
DEAL::3114 4
DEAL::3115 4
DEAL::3122 4
DEAL::3123 4
DEAL::3124 4
-DEAL::3125 1
-DEAL::3126 1
-DEAL::3127 1
+DEAL::3125 3
+DEAL::3126 3
+DEAL::3127 4
DEAL::3128 4
-DEAL::3129 1
-DEAL::3130 1
-DEAL::3131 1
-DEAL::3132 1
+DEAL::3129 4
+DEAL::3130 3
+DEAL::3131 4
+DEAL::3132 4
DEAL::3133 4
DEAL::3134 4
DEAL::3135 4
DEAL::3136 4
DEAL::3137 4
DEAL::3138 4
-DEAL::3139 1
-DEAL::3140 1
-DEAL::3141 1
+DEAL::3139 3
+DEAL::3140 3
+DEAL::3141 4
DEAL::3142 4
-DEAL::3143 1
-DEAL::3144 1
-DEAL::3145 1
-DEAL::3146 1
+DEAL::3143 4
+DEAL::3144 3
+DEAL::3145 4
+DEAL::3146 4
DEAL::3147 4
DEAL::3148 4
DEAL::3149 4
DEAL::3150 4
DEAL::3151 4
-DEAL::3152 0
-DEAL::3153 3
-DEAL::3154 1
+DEAL::3152 4
+DEAL::3153 0
+DEAL::3154 3
DEAL::3155 4
-DEAL::3156 4
-DEAL::3157 1
-DEAL::3158 0
-DEAL::3159 4
+DEAL::3156 0
+DEAL::3157 3
+DEAL::3158 4
+DEAL::3159 3
DEAL::3160 4
-DEAL::3161 4
-DEAL::3162 4
-DEAL::3163 4
-DEAL::3164 4
-DEAL::3165 4
-DEAL::3166 4
-DEAL::3167 4
+DEAL::3161 0
+DEAL::3162 0
+DEAL::3163 0
+DEAL::3164 0
+DEAL::3165 0
+DEAL::3166 0
+DEAL::3167 0
DEAL::3168 4
DEAL::3169 4
-DEAL::3170 1
-DEAL::3171 1
+DEAL::3170 3
+DEAL::3171 4
DEAL::3172 4
-DEAL::3173 1
-DEAL::3174 1
-DEAL::3175 1
+DEAL::3173 3
+DEAL::3174 3
+DEAL::3175 3
DEAL::3176 4
-DEAL::3177 1
+DEAL::3177 4
DEAL::3178 4
-DEAL::3179 1
-DEAL::3180 1
+DEAL::3179 4
+DEAL::3180 4
DEAL::3181 4
-DEAL::3182 0
-DEAL::3183 0
-DEAL::3184 0
-DEAL::3185 1
-DEAL::3186 0
-DEAL::3187 0
-DEAL::3188 0
-DEAL::3189 0
-DEAL::3190 0
-DEAL::3191 1
-DEAL::3192 3
-DEAL::3193 1
-DEAL::3194 3
-DEAL::3195 3
-DEAL::3196 3
-DEAL::3197 3
-DEAL::3198 3
-DEAL::3199 1
-DEAL::3200 1
-DEAL::3201 1
-DEAL::3202 1
-DEAL::3203 0
-DEAL::3204 1
-DEAL::3205 1
-DEAL::3206 1
-DEAL::3207 1
-DEAL::3208 1
-DEAL::3209 1
-DEAL::3210 4
-DEAL::3211 4
+DEAL::3182 4
+DEAL::3183 1
+DEAL::3184 4
+DEAL::3185 4
+DEAL::3186 4
+DEAL::3187 4
+DEAL::3188 4
+DEAL::3189 4
+DEAL::3190 4
+DEAL::3191 4
+DEAL::3192 0
+DEAL::3193 4
+DEAL::3194 0
+DEAL::3195 0
+DEAL::3196 0
+DEAL::3197 0
+DEAL::3198 0
+DEAL::3199 3
+DEAL::3200 4
+DEAL::3201 4
+DEAL::3202 3
+DEAL::3203 4
+DEAL::3204 3
+DEAL::3205 4
+DEAL::3206 4
+DEAL::3207 4
+DEAL::3208 4
+DEAL::3209 4
+DEAL::3210 0
+DEAL::3211 0
DEAL::3212 4
-DEAL::3213 4
-DEAL::3214 4
-DEAL::3215 4
-DEAL::3216 4
-DEAL::3217 3
-DEAL::3218 4
+DEAL::3213 0
+DEAL::3214 0
+DEAL::3215 0
+DEAL::3216 0
+DEAL::3217 0
+DEAL::3218 0
DEAL::3219 4
-DEAL::3220 4
-DEAL::3221 4
-DEAL::3222 4
-DEAL::3223 4
-DEAL::3224 4
-DEAL::3225 4
-DEAL::3226 4
-DEAL::3227 4
-DEAL::3228 4
+DEAL::3220 0
+DEAL::3221 0
+DEAL::3222 0
+DEAL::3223 0
+DEAL::3224 0
+DEAL::3225 0
+DEAL::3226 0
+DEAL::3227 0
+DEAL::3228 0
DEAL::3229 4
-DEAL::3230 4
+DEAL::3230 0
DEAL::3231 4
-DEAL::3232 4
-DEAL::3233 4
-DEAL::3234 4
-DEAL::3235 3
-DEAL::3236 3
-DEAL::3237 3
+DEAL::3232 0
+DEAL::3233 0
+DEAL::3234 0
+DEAL::3235 0
+DEAL::3236 1
+DEAL::3237 1
DEAL::3238 4
-DEAL::3239 3
+DEAL::3239 0
DEAL::3240 4
-DEAL::3241 3
-DEAL::3242 3
+DEAL::3241 1
+DEAL::3242 0
DEAL::3243 4
-DEAL::3244 4
+DEAL::3244 0
DEAL::3245 4
-DEAL::3246 4
-DEAL::3247 4
-DEAL::3248 4
-DEAL::3249 4
-DEAL::3250 4
+DEAL::3246 0
+DEAL::3247 0
+DEAL::3248 0
+DEAL::3249 0
+DEAL::3250 0
DEAL::3251 4
DEAL::3252 4
-DEAL::3253 1
+DEAL::3253 4
DEAL::3254 4
DEAL::3255 4
DEAL::3256 4
DEAL::3257 4
DEAL::3258 4
-DEAL::3259 1
-DEAL::3260 1
-DEAL::3261 1
-DEAL::3262 1
-DEAL::3263 1
-DEAL::3264 1
-DEAL::3265 1
-DEAL::3266 1
-DEAL::3267 1
-DEAL::3268 1
-DEAL::3269 1
-DEAL::3270 1
-DEAL::3271 1
-DEAL::3272 1
-DEAL::3273 1
-DEAL::3274 1
-DEAL::3275 1
-DEAL::3276 1
-DEAL::3277 1
-DEAL::3278 1
-DEAL::3279 1
-DEAL::3280 1
-DEAL::3281 1
-DEAL::3282 1
-DEAL::3283 1
-DEAL::3284 1
-DEAL::3285 1
-DEAL::3286 1
-DEAL::3287 1
-DEAL::3288 1
-DEAL::3289 1
-DEAL::3290 1
-DEAL::3291 1
-DEAL::3292 1
-DEAL::3293 1
-DEAL::3294 1
-DEAL::3295 1
-DEAL::3296 1
-DEAL::3297 0
-DEAL::3298 0
+DEAL::3259 3
+DEAL::3260 3
+DEAL::3261 3
+DEAL::3262 4
+DEAL::3263 4
+DEAL::3264 3
+DEAL::3265 3
+DEAL::3266 3
+DEAL::3267 4
+DEAL::3268 4
+DEAL::3269 4
+DEAL::3270 4
+DEAL::3271 3
+DEAL::3272 3
+DEAL::3273 3
+DEAL::3274 3
+DEAL::3275 4
+DEAL::3276 3
+DEAL::3277 4
+DEAL::3278 3
+DEAL::3279 3
+DEAL::3280 3
+DEAL::3281 4
+DEAL::3282 4
+DEAL::3283 4
+DEAL::3284 4
+DEAL::3285 3
+DEAL::3286 3
+DEAL::3287 3
+DEAL::3288 3
+DEAL::3289 4
+DEAL::3290 4
+DEAL::3291 3
+DEAL::3292 3
+DEAL::3293 3
+DEAL::3294 3
+DEAL::3295 4
+DEAL::3296 4
+DEAL::3297 2
+DEAL::3298 2
DEAL::3299 2
-DEAL::3300 0
-DEAL::3301 0
+DEAL::3300 2
+DEAL::3301 2
DEAL::3302 2
-DEAL::3303 0
+DEAL::3303 2
DEAL::3304 2
DEAL::3305 2
DEAL::3306 2
DEAL::3307 2
DEAL::3308 2
-DEAL::3309 0
-DEAL::3310 0
-DEAL::3311 0
-DEAL::3312 0
-DEAL::3313 0
-DEAL::3314 0
-DEAL::3315 0
-DEAL::3316 0
-DEAL::3317 0
-DEAL::3318 0
-DEAL::3319 0
-DEAL::3320 0
-DEAL::3321 0
-DEAL::3322 0
-DEAL::3323 0
-DEAL::3324 0
-DEAL::3325 0
-DEAL::3326 0
-DEAL::3327 0
-DEAL::3328 0
-DEAL::3329 0
-DEAL::3330 0
-DEAL::3331 0
-DEAL::3332 0
-DEAL::3333 0
-DEAL::3334 0
-DEAL::3335 0
-DEAL::3336 0
+DEAL::3309 2
+DEAL::3310 2
+DEAL::3311 2
+DEAL::3312 2
+DEAL::3313 2
+DEAL::3314 2
+DEAL::3315 2
+DEAL::3316 2
+DEAL::3317 2
+DEAL::3318 2
+DEAL::3319 2
+DEAL::3320 2
+DEAL::3321 2
+DEAL::3322 2
+DEAL::3323 2
+DEAL::3324 2
+DEAL::3325 2
+DEAL::3326 2
+DEAL::3327 2
+DEAL::3328 2
+DEAL::3329 2
+DEAL::3330 2
+DEAL::3331 2
+DEAL::3332 2
+DEAL::3333 2
+DEAL::3334 2
+DEAL::3335 2
+DEAL::3336 2
DEAL::3337 2
-DEAL::3338 0
+DEAL::3338 2
DEAL::3339 2
-DEAL::3340 0
-DEAL::3341 0
+DEAL::3340 2
+DEAL::3341 2
DEAL::3342 2
DEAL::3343 2
-DEAL::3344 0
+DEAL::3344 2
DEAL::3345 2
DEAL::3346 2
-DEAL::3347 0
-DEAL::3348 0
-DEAL::3349 0
-DEAL::3350 0
-DEAL::3351 0
-DEAL::3352 0
-DEAL::3353 0
-DEAL::3354 0
-DEAL::3355 0
-DEAL::3356 0
-DEAL::3357 0
-DEAL::3358 0
-DEAL::3359 0
-DEAL::3360 0
-DEAL::3361 0
-DEAL::3362 0
-DEAL::3363 0
-DEAL::3364 0
-DEAL::3365 0
-DEAL::3366 0
-DEAL::3367 0
-DEAL::3368 0
-DEAL::3369 0
-DEAL::3370 0
-DEAL::3371 0
-DEAL::3372 0
-DEAL::3373 0
-DEAL::3374 0
-DEAL::3375 0
-DEAL::3376 0
-DEAL::3377 0
-DEAL::3378 0
-DEAL::3379 0
-DEAL::3380 0
-DEAL::3381 0
-DEAL::3382 0
-DEAL::3383 0
-DEAL::3384 0
-DEAL::3385 0
-DEAL::3386 0
-DEAL::3387 0
-DEAL::3388 0
-DEAL::3389 0
-DEAL::3390 0
-DEAL::3391 0
-DEAL::3392 0
-DEAL::3393 0
-DEAL::3394 0
-DEAL::3395 0
-DEAL::3396 0
-DEAL::3397 0
-DEAL::3398 0
-DEAL::3399 0
-DEAL::3400 0
-DEAL::3401 0
-DEAL::3402 0
-DEAL::3403 0
-DEAL::3404 0
-DEAL::3405 0
-DEAL::3406 0
-DEAL::3407 0
-DEAL::3408 0
-DEAL::3409 0
-DEAL::3410 0
-DEAL::3411 0
-DEAL::3412 2
-DEAL::3413 2
-DEAL::3414 2
-DEAL::3415 2
-DEAL::3416 2
+DEAL::3347 2
+DEAL::3348 2
+DEAL::3349 2
+DEAL::3350 2
+DEAL::3351 2
+DEAL::3352 2
+DEAL::3353 2
+DEAL::3354 2
+DEAL::3355 2
+DEAL::3356 2
+DEAL::3357 2
+DEAL::3358 2
+DEAL::3359 2
+DEAL::3360 2
+DEAL::3361 2
+DEAL::3362 2
+DEAL::3363 2
+DEAL::3364 2
+DEAL::3365 2
+DEAL::3366 2
+DEAL::3367 2
+DEAL::3368 2
+DEAL::3369 2
+DEAL::3370 2
+DEAL::3371 2
+DEAL::3372 2
+DEAL::3373 2
+DEAL::3374 2
+DEAL::3375 2
+DEAL::3376 2
+DEAL::3377 1
+DEAL::3378 2
+DEAL::3379 2
+DEAL::3380 2
+DEAL::3381 2
+DEAL::3382 2
+DEAL::3383 2
+DEAL::3384 1
+DEAL::3385 2
+DEAL::3386 2
+DEAL::3387 2
+DEAL::3388 2
+DEAL::3389 2
+DEAL::3390 2
+DEAL::3391 2
+DEAL::3392 2
+DEAL::3393 2
+DEAL::3394 2
+DEAL::3395 2
+DEAL::3396 2
+DEAL::3397 2
+DEAL::3398 2
+DEAL::3399 2
+DEAL::3400 2
+DEAL::3401 2
+DEAL::3402 2
+DEAL::3403 2
+DEAL::3404 2
+DEAL::3405 2
+DEAL::3406 2
+DEAL::3407 2
+DEAL::3408 2
+DEAL::3409 2
+DEAL::3410 2
+DEAL::3411 2
+DEAL::3412 2
+DEAL::3413 2
+DEAL::3414 2
+DEAL::3415 2
+DEAL::3416 2
DEAL::3417 2
DEAL::3418 2
DEAL::3419 2
DEAL::3451 2
DEAL::3452 2
DEAL::3453 2
-DEAL::3454 0
+DEAL::3454 2
DEAL::3455 2
DEAL::3456 2
DEAL::3457 2
DEAL::3506 2
DEAL::3507 2
DEAL::3508 2
-DEAL::3509 0
-DEAL::3510 0
-DEAL::3511 0
-DEAL::3512 0
+DEAL::3509 2
+DEAL::3510 2
+DEAL::3511 2
+DEAL::3512 2
DEAL::3513 2
-DEAL::3514 0
-DEAL::3515 0
+DEAL::3514 2
+DEAL::3515 2
DEAL::3516 2
-DEAL::3517 0
-DEAL::3518 0
-DEAL::3519 0
+DEAL::3517 2
+DEAL::3518 2
+DEAL::3519 2
DEAL::3520 2
-DEAL::3521 0
-DEAL::3522 0
-DEAL::3523 0
-DEAL::3524 0
+DEAL::3521 2
+DEAL::3522 2
+DEAL::3523 2
+DEAL::3524 2
DEAL::3525 2
-DEAL::3526 0
+DEAL::3526 2
DEAL::3527 2
DEAL::3528 2
DEAL::3529 2
DEAL::3531 2
DEAL::3532 2
DEAL::3533 2
-DEAL::3534 0
+DEAL::3534 2
DEAL::3535 2
DEAL::3536 2
-DEAL::3537 0
-DEAL::3538 0
-DEAL::3539 0
-DEAL::3540 0
-DEAL::3541 0
-DEAL::3542 0
-DEAL::3543 0
-DEAL::3544 0
-DEAL::3545 0
-DEAL::3546 0
-DEAL::3547 0
-DEAL::3548 0
-DEAL::3549 0
-DEAL::3550 0
-DEAL::3551 0
-DEAL::3552 0
-DEAL::3553 0
-DEAL::3554 0
-DEAL::3555 0
-DEAL::3556 0
-DEAL::3557 0
-DEAL::3558 0
-DEAL::3559 0
-DEAL::3560 0
+DEAL::3537 4
+DEAL::3538 4
+DEAL::3539 2
+DEAL::3540 2
+DEAL::3541 2
+DEAL::3542 2
+DEAL::3543 4
+DEAL::3544 2
+DEAL::3545 2
+DEAL::3546 2
+DEAL::3547 2
+DEAL::3548 2
+DEAL::3549 2
+DEAL::3550 2
+DEAL::3551 4
+DEAL::3552 4
+DEAL::3553 2
+DEAL::3554 2
+DEAL::3555 2
+DEAL::3556 2
+DEAL::3557 2
+DEAL::3558 2
+DEAL::3559 2
+DEAL::3560 2
DEAL::3561 2
-DEAL::3562 0
-DEAL::3563 0
-DEAL::3564 0
-DEAL::3565 0
-DEAL::3566 0
-DEAL::3567 0
-DEAL::3568 0
-DEAL::3569 0
-DEAL::3570 0
-DEAL::3571 0
-DEAL::3572 0
-DEAL::3573 0
+DEAL::3562 2
+DEAL::3563 2
+DEAL::3564 2
+DEAL::3565 2
+DEAL::3566 2
+DEAL::3567 2
+DEAL::3568 2
+DEAL::3569 2
+DEAL::3570 2
+DEAL::3571 2
+DEAL::3572 2
+DEAL::3573 2
DEAL::3574 2
DEAL::3575 2
-DEAL::3576 0
+DEAL::3576 2
DEAL::3577 2
-DEAL::3578 0
+DEAL::3578 2
DEAL::3579 2
DEAL::3580 2
DEAL::3581 2
DEAL::3582 2
DEAL::3583 2
-DEAL::3584 0
-DEAL::3585 0
-DEAL::3586 0
-DEAL::3587 0
-DEAL::3588 0
-DEAL::3589 0
-DEAL::3590 0
-DEAL::3591 0
-DEAL::3592 0
-DEAL::3593 0
-DEAL::3594 0
-DEAL::3595 0
-DEAL::3596 0
-DEAL::3597 0
-DEAL::3598 0
-DEAL::3599 0
-DEAL::3600 0
-DEAL::3601 0
-DEAL::3602 3
-DEAL::3603 3
-DEAL::3604 3
-DEAL::3605 3
-DEAL::3606 3
-DEAL::3607 3
-DEAL::3608 3
-DEAL::3609 3
-DEAL::3610 3
-DEAL::3611 3
-DEAL::3612 3
-DEAL::3613 3
-DEAL::3614 3
-DEAL::3615 3
-DEAL::3616 3
-DEAL::3617 3
-DEAL::3618 3
-DEAL::3619 3
-DEAL::3620 3
-DEAL::3621 3
-DEAL::3622 3
-DEAL::3623 3
-DEAL::3624 3
-DEAL::3625 3
-DEAL::3626 3
-DEAL::3627 3
-DEAL::3628 3
-DEAL::3629 3
-DEAL::3630 3
-DEAL::3631 3
-DEAL::3632 3
-DEAL::3633 3
-DEAL::3634 3
-DEAL::3635 3
-DEAL::3636 3
-DEAL::3637 3
-DEAL::3638 3
-DEAL::3639 3
-DEAL::3640 3
-DEAL::3641 3
-DEAL::3642 3
-DEAL::3643 3
-DEAL::3644 3
-DEAL::3645 3
-DEAL::3646 3
-DEAL::3647 3
-DEAL::3648 3
-DEAL::3649 3
-DEAL::3650 3
-DEAL::3651 3
-DEAL::3652 3
-DEAL::3653 3
-DEAL::3654 3
-DEAL::3655 3
-DEAL::3656 3
-DEAL::3657 3
-DEAL::3658 3
-DEAL::3659 3
-DEAL::3660 3
-DEAL::3661 3
-DEAL::3662 3
-DEAL::3663 3
-DEAL::3664 3
-DEAL::3665 3
-DEAL::3666 3
-DEAL::3667 3
-DEAL::3668 0
-DEAL::3669 0
-DEAL::3670 0
-DEAL::3671 0
-DEAL::3672 0
-DEAL::3673 0
-DEAL::3674 0
-DEAL::3675 0
-DEAL::3676 0
-DEAL::3677 0
-DEAL::3678 0
-DEAL::3679 0
-DEAL::3680 0
-DEAL::3681 0
-DEAL::3682 0
-DEAL::3683 0
-DEAL::3684 0
-DEAL::3685 0
-DEAL::3686 0
-DEAL::3687 0
-DEAL::3688 0
-DEAL::3689 0
-DEAL::3690 0
-DEAL::3691 0
-DEAL::3692 0
-DEAL::3693 0
-DEAL::3694 0
-DEAL::3695 0
-DEAL::3696 0
-DEAL::3697 0
-DEAL::3698 0
-DEAL::3699 0
-DEAL::3700 0
-DEAL::3701 0
-DEAL::3702 0
-DEAL::3703 0
-DEAL::3704 0
-DEAL::3705 0
-DEAL::3706 0
-DEAL::3707 0
-DEAL::3708 0
-DEAL::3709 0
-DEAL::3710 0
-DEAL::3711 0
-DEAL::3712 0
-DEAL::3713 0
-DEAL::3714 0
-DEAL::3715 0
-DEAL::3716 0
-DEAL::3717 0
-DEAL::3718 0
-DEAL::3719 0
-DEAL::3720 0
-DEAL::3721 0
-DEAL::3722 0
-DEAL::3723 0
-DEAL::3724 0
-DEAL::3725 0
-DEAL::3726 0
-DEAL::3727 0
-DEAL::3728 0
-DEAL::3729 0
-DEAL::3730 0
-DEAL::3731 0
-DEAL::3732 0
-DEAL::3733 0
-DEAL::3734 0
-DEAL::3735 0
-DEAL::3736 0
-DEAL::3737 0
-DEAL::3738 0
-DEAL::3739 0
-DEAL::3740 0
-DEAL::3741 0
-DEAL::3742 0
-DEAL::3743 0
-DEAL::3744 0
-DEAL::3745 0
-DEAL::3746 0
-DEAL::3747 0
-DEAL::3748 0
-DEAL::3749 0
-DEAL::3750 0
-DEAL::3751 0
-DEAL::3752 0
-DEAL::3753 0
-DEAL::3754 0
-DEAL::3755 0
-DEAL::3756 0
-DEAL::3757 0
-DEAL::3758 0
-DEAL::3759 0
-DEAL::3760 0
-DEAL::3761 0
-DEAL::3762 0
-DEAL::3763 0
-DEAL::3764 0
-DEAL::3765 0
-DEAL::3766 0
-DEAL::3767 0
-DEAL::3768 0
-DEAL::3769 0
-DEAL::3770 0
-DEAL::3771 0
-DEAL::3772 0
-DEAL::3773 0
-DEAL::3774 0
-DEAL::3775 0
-DEAL::3776 0
-DEAL::3777 0
-DEAL::3778 0
-DEAL::3779 0
-DEAL::3780 0
-DEAL::3781 0
-DEAL::3782 0
-DEAL::3783 0
-DEAL::3784 0
-DEAL::3785 0
-DEAL::3786 0
-DEAL::3787 0
-DEAL::3788 0
-DEAL::3789 0
-DEAL::3790 0
-DEAL::3791 0
-DEAL::3792 0
-DEAL::3793 0
-DEAL::3794 0
-DEAL::3795 0
-DEAL::3796 0
-DEAL::3797 0
-DEAL::3798 0
-DEAL::3799 0
-DEAL::3800 0
-DEAL::3801 0
-DEAL::3802 0
-DEAL::3803 0
-DEAL::3804 0
-DEAL::3805 0
-DEAL::3806 0
-DEAL::3807 0
-DEAL::3808 0
-DEAL::3809 0
-DEAL::3810 0
-DEAL::3811 0
-DEAL::3812 0
-DEAL::3813 0
-DEAL::3814 0
-DEAL::3815 0
-DEAL::3816 0
-DEAL::3817 0
-DEAL::3818 0
-DEAL::3819 0
-DEAL::3820 0
-DEAL::3821 0
-DEAL::3822 0
-DEAL::3823 0
-DEAL::3824 0
-DEAL::3825 0
-DEAL::3826 0
-DEAL::3827 0
-DEAL::3828 0
-DEAL::3829 0
-DEAL::3830 0
-DEAL::3831 0
-DEAL::3832 0
-DEAL::3833 0
-DEAL::3834 0
-DEAL::3835 0
-DEAL::3836 0
-DEAL::3837 0
-DEAL::3838 0
-DEAL::3839 0
-DEAL::3840 0
-DEAL::3841 0
-DEAL::3842 0
-DEAL::3843 1
-DEAL::3844 0
-DEAL::3845 0
-DEAL::3846 0
-DEAL::3847 0
-DEAL::3848 0
-DEAL::3849 0
-DEAL::3850 0
-DEAL::3851 0
-DEAL::3852 0
-DEAL::3853 0
-DEAL::3854 0
-DEAL::3855 0
-DEAL::3856 0
-DEAL::3857 0
-DEAL::3858 0
-DEAL::3859 0
-DEAL::3860 0
-DEAL::3861 0
-DEAL::3862 0
-DEAL::3863 0
-DEAL::3864 0
-DEAL::3865 0
-DEAL::3866 0
-DEAL::3867 0
-DEAL::3868 0
-DEAL::3869 0
-DEAL::3870 0
-DEAL::3871 0
-DEAL::3872 0
-DEAL::3873 0
-DEAL::3874 1
-DEAL::3875 0
-DEAL::3876 0
-DEAL::3877 0
-DEAL::3878 0
-DEAL::3879 0
-DEAL::3880 0
-DEAL::3881 0
-DEAL::3882 0
-DEAL::3883 0
-DEAL::3884 0
-DEAL::3885 0
-DEAL::3886 0
-DEAL::3887 0
-DEAL::3888 0
-DEAL::3889 0
-DEAL::3890 0
-DEAL::3891 0
-DEAL::3892 0
-DEAL::3893 0
-DEAL::3894 0
-DEAL::3895 0
-DEAL::3896 0
-DEAL::3897 0
-DEAL::3898 0
-DEAL::3899 0
-DEAL::3900 0
-DEAL::3901 0
-DEAL::3902 0
-DEAL::3903 0
-DEAL::3904 0
-DEAL::3905 0
-DEAL::3906 0
-DEAL::3907 0
-DEAL::3908 0
-DEAL::3909 0
-DEAL::3910 0
-DEAL::3911 0
-DEAL::3912 0
-DEAL::3913 0
-DEAL::3914 0
-DEAL::3915 0
-DEAL::3916 0
-DEAL::3917 0
-DEAL::3918 0
-DEAL::3919 0
-DEAL::3920 0
-DEAL::3921 0
-DEAL::3922 0
-DEAL::3923 0
-DEAL::3924 0
-DEAL::3925 0
-DEAL::3926 0
-DEAL::3927 0
-DEAL::3928 0
-DEAL::3929 0
-DEAL::3930 0
-DEAL::3931 0
-DEAL::3932 0
-DEAL::3933 0
-DEAL::3934 0
-DEAL::3935 0
-DEAL::3936 0
-DEAL::3937 0
-DEAL::3938 0
-DEAL::3939 0
-DEAL::3940 0
-DEAL::3941 0
-DEAL::3942 0
-DEAL::3943 0
-DEAL::3944 0
-DEAL::3945 0
-DEAL::3946 0
-DEAL::3947 0
-DEAL::3948 0
-DEAL::3949 0
-DEAL::3950 0
-DEAL::3951 0
-DEAL::3952 0
-DEAL::3953 0
-DEAL::3954 0
-DEAL::3955 0
-DEAL::3956 0
-DEAL::3957 0
-DEAL::3958 0
-DEAL::3959 0
-DEAL::3960 0
-DEAL::3961 0
-DEAL::3962 0
-DEAL::3963 0
-DEAL::3964 0
-DEAL::3965 0
-DEAL::3966 0
-DEAL::3967 0
-DEAL::3968 1
-DEAL::3969 0
-DEAL::3970 0
-DEAL::3971 1
-DEAL::3972 1
-DEAL::3973 0
-DEAL::3974 0
-DEAL::3975 0
-DEAL::3976 0
-DEAL::3977 0
-DEAL::3978 0
-DEAL::3979 0
-DEAL::3980 0
-DEAL::3981 0
-DEAL::3982 0
-DEAL::3983 0
-DEAL::3984 0
-DEAL::3985 0
-DEAL::3986 0
-DEAL::3987 1
-DEAL::3988 0
-DEAL::3989 1
-DEAL::3990 0
-DEAL::3991 0
-DEAL::3992 0
-DEAL::3993 0
-DEAL::3994 0
-DEAL::3995 0
-DEAL::3996 0
-DEAL::3997 0
-DEAL::3998 0
-DEAL::3999 0
-DEAL::4000 0
-DEAL::4001 0
-DEAL::4002 1
-DEAL::4003 0
-DEAL::4004 0
-DEAL::4005 1
-DEAL::4006 1
-DEAL::4007 0
-DEAL::4008 0
-DEAL::4009 0
-DEAL::4010 0
-DEAL::4011 0
-DEAL::4012 0
-DEAL::4013 0
-DEAL::4014 0
-DEAL::4015 0
-DEAL::4016 0
-DEAL::4017 0
-DEAL::4018 0
-DEAL::4019 1
-DEAL::4020 0
-DEAL::4021 1
-DEAL::4022 0
-DEAL::4023 0
-DEAL::4024 0
-DEAL::4025 0
-DEAL::4026 0
-DEAL::4027 0
-DEAL::4028 0
-DEAL::4029 1
-DEAL::4030 0
-DEAL::4031 0
-DEAL::4032 0
-DEAL::4033 0
-DEAL::4034 0
-DEAL::4035 1
-DEAL::4036 0
-DEAL::4037 1
-DEAL::4038 0
-DEAL::4039 3
-DEAL::4040 0
-DEAL::4041 0
-DEAL::4042 0
-DEAL::4043 0
-DEAL::4044 1
-DEAL::4045 0
-DEAL::4046 0
-DEAL::4047 1
-DEAL::4048 1
-DEAL::4049 1
-DEAL::4050 1
-DEAL::4051 0
-DEAL::4052 0
-DEAL::4053 0
-DEAL::4054 1
-DEAL::4055 0
-DEAL::4056 0
-DEAL::4057 0
-DEAL::4058 0
-DEAL::4059 1
+DEAL::3584 4
+DEAL::3585 2
+DEAL::3586 2
+DEAL::3587 2
+DEAL::3588 2
+DEAL::3589 2
+DEAL::3590 2
+DEAL::3591 2
+DEAL::3592 2
+DEAL::3593 2
+DEAL::3594 2
+DEAL::3595 2
+DEAL::3596 4
+DEAL::3597 4
+DEAL::3598 2
+DEAL::3599 2
+DEAL::3600 2
+DEAL::3601 2
+DEAL::3602 1
+DEAL::3603 1
+DEAL::3604 1
+DEAL::3605 1
+DEAL::3606 0
+DEAL::3607 1
+DEAL::3608 1
+DEAL::3609 0
+DEAL::3610 1
+DEAL::3611 1
+DEAL::3612 1
+DEAL::3613 1
+DEAL::3614 1
+DEAL::3615 1
+DEAL::3616 1
+DEAL::3617 1
+DEAL::3618 1
+DEAL::3619 1
+DEAL::3620 1
+DEAL::3621 1
+DEAL::3622 1
+DEAL::3623 1
+DEAL::3624 1
+DEAL::3625 1
+DEAL::3626 1
+DEAL::3627 1
+DEAL::3628 1
+DEAL::3629 0
+DEAL::3630 0
+DEAL::3631 0
+DEAL::3632 0
+DEAL::3633 0
+DEAL::3634 0
+DEAL::3635 1
+DEAL::3636 0
+DEAL::3637 1
+DEAL::3638 1
+DEAL::3639 1
+DEAL::3640 1
+DEAL::3641 1
+DEAL::3642 1
+DEAL::3643 1
+DEAL::3644 1
+DEAL::3645 1
+DEAL::3646 1
+DEAL::3647 1
+DEAL::3648 1
+DEAL::3649 1
+DEAL::3650 1
+DEAL::3651 1
+DEAL::3652 1
+DEAL::3653 1
+DEAL::3654 1
+DEAL::3655 1
+DEAL::3656 1
+DEAL::3657 1
+DEAL::3658 1
+DEAL::3659 1
+DEAL::3660 1
+DEAL::3661 1
+DEAL::3662 1
+DEAL::3663 1
+DEAL::3664 1
+DEAL::3665 1
+DEAL::3666 1
+DEAL::3667 1
+DEAL::3668 2
+DEAL::3669 3
+DEAL::3670 2
+DEAL::3671 2
+DEAL::3672 2
+DEAL::3673 2
+DEAL::3674 2
+DEAL::3675 2
+DEAL::3676 2
+DEAL::3677 2
+DEAL::3678 2
+DEAL::3679 2
+DEAL::3680 3
+DEAL::3681 2
+DEAL::3682 2
+DEAL::3683 2
+DEAL::3684 2
+DEAL::3685 3
+DEAL::3686 2
+DEAL::3687 2
+DEAL::3688 2
+DEAL::3689 2
+DEAL::3690 3
+DEAL::3691 2
+DEAL::3692 2
+DEAL::3693 2
+DEAL::3694 2
+DEAL::3695 2
+DEAL::3696 2
+DEAL::3697 2
+DEAL::3698 2
+DEAL::3699 2
+DEAL::3700 2
+DEAL::3701 2
+DEAL::3702 2
+DEAL::3703 2
+DEAL::3704 2
+DEAL::3705 2
+DEAL::3706 2
+DEAL::3707 2
+DEAL::3708 2
+DEAL::3709 2
+DEAL::3710 2
+DEAL::3711 2
+DEAL::3712 2
+DEAL::3713 2
+DEAL::3714 2
+DEAL::3715 2
+DEAL::3716 4
+DEAL::3717 3
+DEAL::3718 2
+DEAL::3719 3
+DEAL::3720 2
+DEAL::3721 2
+DEAL::3722 2
+DEAL::3723 2
+DEAL::3724 2
+DEAL::3725 2
+DEAL::3726 2
+DEAL::3727 2
+DEAL::3728 2
+DEAL::3729 2
+DEAL::3730 2
+DEAL::3731 2
+DEAL::3732 2
+DEAL::3733 2
+DEAL::3734 2
+DEAL::3735 2
+DEAL::3736 2
+DEAL::3737 2
+DEAL::3738 4
+DEAL::3739 2
+DEAL::3740 2
+DEAL::3741 2
+DEAL::3742 4
+DEAL::3743 4
+DEAL::3744 2
+DEAL::3745 2
+DEAL::3746 2
+DEAL::3747 2
+DEAL::3748 4
+DEAL::3749 4
+DEAL::3750 2
+DEAL::3751 2
+DEAL::3752 4
+DEAL::3753 2
+DEAL::3754 4
+DEAL::3755 2
+DEAL::3756 2
+DEAL::3757 2
+DEAL::3758 2
+DEAL::3759 2
+DEAL::3760 4
+DEAL::3761 4
+DEAL::3762 2
+DEAL::3763 4
+DEAL::3764 2
+DEAL::3765 4
+DEAL::3766 2
+DEAL::3767 2
+DEAL::3768 2
+DEAL::3769 2
+DEAL::3770 2
+DEAL::3771 2
+DEAL::3772 2
+DEAL::3773 2
+DEAL::3774 2
+DEAL::3775 2
+DEAL::3776 2
+DEAL::3777 2
+DEAL::3778 2
+DEAL::3779 2
+DEAL::3780 2
+DEAL::3781 2
+DEAL::3782 2
+DEAL::3783 2
+DEAL::3784 2
+DEAL::3785 2
+DEAL::3786 2
+DEAL::3787 2
+DEAL::3788 2
+DEAL::3789 4
+DEAL::3790 2
+DEAL::3791 2
+DEAL::3792 2
+DEAL::3793 2
+DEAL::3794 2
+DEAL::3795 2
+DEAL::3796 4
+DEAL::3797 2
+DEAL::3798 2
+DEAL::3799 2
+DEAL::3800 4
+DEAL::3801 2
+DEAL::3802 2
+DEAL::3803 2
+DEAL::3804 4
+DEAL::3805 2
+DEAL::3806 2
+DEAL::3807 2
+DEAL::3808 4
+DEAL::3809 4
+DEAL::3810 4
+DEAL::3811 2
+DEAL::3812 2
+DEAL::3813 2
+DEAL::3814 2
+DEAL::3815 4
+DEAL::3816 4
+DEAL::3817 4
+DEAL::3818 4
+DEAL::3819 4
+DEAL::3820 4
+DEAL::3821 4
+DEAL::3822 4
+DEAL::3823 4
+DEAL::3824 4
+DEAL::3825 4
+DEAL::3826 4
+DEAL::3827 4
+DEAL::3828 4
+DEAL::3829 4
+DEAL::3830 4
+DEAL::3831 4
+DEAL::3832 4
+DEAL::3833 4
+DEAL::3834 4
+DEAL::3835 4
+DEAL::3836 4
+DEAL::3837 4
+DEAL::3838 4
+DEAL::3839 4
+DEAL::3840 4
+DEAL::3841 4
+DEAL::3842 4
+DEAL::3843 4
+DEAL::3844 4
+DEAL::3845 4
+DEAL::3846 4
+DEAL::3847 4
+DEAL::3848 4
+DEAL::3849 2
+DEAL::3850 2
+DEAL::3851 4
+DEAL::3852 4
+DEAL::3853 4
+DEAL::3854 2
+DEAL::3855 2
+DEAL::3856 4
+DEAL::3857 4
+DEAL::3858 4
+DEAL::3859 4
+DEAL::3860 4
+DEAL::3861 4
+DEAL::3862 4
+DEAL::3863 4
+DEAL::3864 4
+DEAL::3865 4
+DEAL::3866 4
+DEAL::3867 4
+DEAL::3868 4
+DEAL::3869 4
+DEAL::3870 4
+DEAL::3871 4
+DEAL::3872 4
+DEAL::3873 4
+DEAL::3874 4
+DEAL::3875 4
+DEAL::3876 4
+DEAL::3877 4
+DEAL::3878 4
+DEAL::3879 4
+DEAL::3880 4
+DEAL::3881 4
+DEAL::3882 4
+DEAL::3883 4
+DEAL::3884 4
+DEAL::3885 4
+DEAL::3886 4
+DEAL::3887 4
+DEAL::3888 4
+DEAL::3889 4
+DEAL::3890 4
+DEAL::3891 4
+DEAL::3892 4
+DEAL::3893 4
+DEAL::3894 4
+DEAL::3895 4
+DEAL::3896 4
+DEAL::3897 4
+DEAL::3898 4
+DEAL::3899 4
+DEAL::3900 4
+DEAL::3901 4
+DEAL::3902 4
+DEAL::3903 4
+DEAL::3904 4
+DEAL::3905 4
+DEAL::3906 4
+DEAL::3907 4
+DEAL::3908 4
+DEAL::3909 4
+DEAL::3910 4
+DEAL::3911 4
+DEAL::3912 4
+DEAL::3913 4
+DEAL::3914 4
+DEAL::3915 4
+DEAL::3916 4
+DEAL::3917 4
+DEAL::3918 4
+DEAL::3919 4
+DEAL::3920 4
+DEAL::3921 4
+DEAL::3922 4
+DEAL::3923 4
+DEAL::3924 4
+DEAL::3925 4
+DEAL::3926 4
+DEAL::3927 4
+DEAL::3928 4
+DEAL::3929 4
+DEAL::3930 4
+DEAL::3931 4
+DEAL::3932 4
+DEAL::3933 4
+DEAL::3934 4
+DEAL::3935 4
+DEAL::3936 4
+DEAL::3937 4
+DEAL::3938 4
+DEAL::3939 4
+DEAL::3940 4
+DEAL::3941 4
+DEAL::3942 4
+DEAL::3943 4
+DEAL::3944 4
+DEAL::3945 4
+DEAL::3946 4
+DEAL::3947 4
+DEAL::3948 4
+DEAL::3949 4
+DEAL::3950 4
+DEAL::3951 4
+DEAL::3952 4
+DEAL::3953 4
+DEAL::3954 4
+DEAL::3955 4
+DEAL::3956 4
+DEAL::3957 4
+DEAL::3958 4
+DEAL::3959 4
+DEAL::3960 4
+DEAL::3961 4
+DEAL::3962 4
+DEAL::3963 4
+DEAL::3964 4
+DEAL::3965 4
+DEAL::3966 4
+DEAL::3967 4
+DEAL::3968 4
+DEAL::3969 4
+DEAL::3970 4
+DEAL::3971 4
+DEAL::3972 4
+DEAL::3973 4
+DEAL::3974 4
+DEAL::3975 4
+DEAL::3976 4
+DEAL::3977 4
+DEAL::3978 4
+DEAL::3979 4
+DEAL::3980 4
+DEAL::3981 4
+DEAL::3982 4
+DEAL::3983 4
+DEAL::3984 4
+DEAL::3985 4
+DEAL::3986 4
+DEAL::3987 4
+DEAL::3988 4
+DEAL::3989 4
+DEAL::3990 4
+DEAL::3991 4
+DEAL::3992 4
+DEAL::3993 4
+DEAL::3994 4
+DEAL::3995 4
+DEAL::3996 4
+DEAL::3997 4
+DEAL::3998 4
+DEAL::3999 4
+DEAL::4000 4
+DEAL::4001 4
+DEAL::4002 4
+DEAL::4003 4
+DEAL::4004 4
+DEAL::4005 4
+DEAL::4006 4
+DEAL::4007 4
+DEAL::4008 4
+DEAL::4009 4
+DEAL::4010 4
+DEAL::4011 4
+DEAL::4012 4
+DEAL::4013 4
+DEAL::4014 4
+DEAL::4015 4
+DEAL::4016 4
+DEAL::4017 4
+DEAL::4018 4
+DEAL::4019 4
+DEAL::4020 4
+DEAL::4021 4
+DEAL::4022 4
+DEAL::4023 4
+DEAL::4024 4
+DEAL::4025 4
+DEAL::4026 4
+DEAL::4027 4
+DEAL::4028 4
+DEAL::4029 4
+DEAL::4030 4
+DEAL::4031 4
+DEAL::4032 4
+DEAL::4033 4
+DEAL::4034 4
+DEAL::4035 4
+DEAL::4036 1
+DEAL::4037 4
+DEAL::4038 1
+DEAL::4039 1
+DEAL::4040 1
+DEAL::4041 1
+DEAL::4042 1
+DEAL::4043 4
+DEAL::4044 4
+DEAL::4045 4
+DEAL::4046 4
+DEAL::4047 4
+DEAL::4048 4
+DEAL::4049 4
+DEAL::4050 4
+DEAL::4051 4
+DEAL::4052 4
+DEAL::4053 4
+DEAL::4054 4
+DEAL::4055 4
+DEAL::4056 4
+DEAL::4057 4
+DEAL::4058 4
+DEAL::4059 4
DEAL::4060 1
-DEAL::4061 1
-DEAL::4062 0
-DEAL::4063 3
-DEAL::4064 0
-DEAL::4065 0
-DEAL::4066 0
-DEAL::4067 0
-DEAL::4068 1
-DEAL::4069 0
-DEAL::4070 0
-DEAL::4071 1
-DEAL::4072 1
-DEAL::4073 1
-DEAL::4074 1
-DEAL::4075 3
-DEAL::4076 3
-DEAL::4077 3
+DEAL::4061 4
+DEAL::4062 4
+DEAL::4063 1
+DEAL::4064 4
+DEAL::4065 4
+DEAL::4066 4
+DEAL::4067 4
+DEAL::4068 4
+DEAL::4069 4
+DEAL::4070 4
+DEAL::4071 4
+DEAL::4072 4
+DEAL::4073 4
+DEAL::4074 4
+DEAL::4075 1
+DEAL::4076 1
+DEAL::4077 1
DEAL::4078 4
-DEAL::4079 3
-DEAL::4080 3
-DEAL::4081 3
-DEAL::4082 3
+DEAL::4079 1
+DEAL::4080 1
+DEAL::4081 1
+DEAL::4082 1
DEAL::4083 4
-DEAL::4084 3
+DEAL::4084 1
DEAL::4085 4
-DEAL::4086 3
-DEAL::4087 3
-DEAL::4088 3
-DEAL::4089 3
+DEAL::4086 1
+DEAL::4087 1
+DEAL::4088 1
+DEAL::4089 1
DEAL::4090 4
-DEAL::4091 3
-DEAL::4092 3
-DEAL::4093 1
+DEAL::4091 1
+DEAL::4092 1
+DEAL::4093 4
DEAL::4094 4
-DEAL::4095 1
+DEAL::4095 4
DEAL::4096 4
-DEAL::4097 1
-DEAL::4098 1
-DEAL::4099 1
-DEAL::4100 1
-DEAL::4101 1
+DEAL::4097 4
+DEAL::4098 4
+DEAL::4099 4
+DEAL::4100 4
+DEAL::4101 4
DEAL::4102 4
-DEAL::4103 1
+DEAL::4103 4
DEAL::4104 4
DEAL::4105 4
DEAL::4106 4
DEAL::4107 4
DEAL::4108 4
-DEAL::4109 3
-DEAL::4110 3
-DEAL::4111 1
+DEAL::4109 1
+DEAL::4110 1
+DEAL::4111 4
DEAL::4112 4
-DEAL::4113 3
-DEAL::4114 3
+DEAL::4113 1
+DEAL::4114 1
DEAL::4115 1
-DEAL::4116 3
+DEAL::4116 1
DEAL::4117 4
-DEAL::4118 3
+DEAL::4118 1
DEAL::4119 4
-DEAL::4120 3
-DEAL::4121 3
+DEAL::4120 1
+DEAL::4121 1
DEAL::4122 4
-DEAL::4123 3
-DEAL::4124 3
-DEAL::4125 1
+DEAL::4123 1
+DEAL::4124 1
+DEAL::4125 4
DEAL::4126 4
-DEAL::4127 1
-DEAL::4128 1
-DEAL::4129 1
-DEAL::4130 1
-DEAL::4131 1
-DEAL::4132 1
+DEAL::4127 4
+DEAL::4128 4
+DEAL::4129 4
+DEAL::4130 4
+DEAL::4131 4
+DEAL::4132 4
DEAL::4133 4
DEAL::4134 4
DEAL::4135 4
DEAL::4136 4
DEAL::4137 4
-DEAL::4138 1
+DEAL::4138 4
DEAL::4139 4
DEAL::4140 4
DEAL::4141 4
-DEAL::4142 1
-DEAL::4143 1
-DEAL::4144 1
-DEAL::4145 1
-DEAL::4146 1
-DEAL::4147 1
-DEAL::4148 1
-DEAL::4149 1
+DEAL::4142 4
+DEAL::4143 4
+DEAL::4144 4
+DEAL::4145 4
+DEAL::4146 4
+DEAL::4147 4
+DEAL::4148 4
+DEAL::4149 4
DEAL::4150 4
-DEAL::4151 1
+DEAL::4151 4
DEAL::4152 4
DEAL::4153 4
DEAL::4154 4
DEAL::4155 4
DEAL::4156 4
DEAL::4157 4
-DEAL::4158 1
-DEAL::4159 1
-DEAL::4160 1
+DEAL::4158 4
+DEAL::4159 4
+DEAL::4160 4
DEAL::4161 4
-DEAL::4162 1
-DEAL::4163 1
-DEAL::4164 1
+DEAL::4162 4
+DEAL::4163 4
+DEAL::4164 4
DEAL::4165 4
-DEAL::4166 1
+DEAL::4166 4
DEAL::4167 4
DEAL::4168 4
DEAL::4169 4
DEAL::4174 4
DEAL::4175 4
DEAL::4176 4
-DEAL::4177 1
-DEAL::4178 1
-DEAL::4179 1
-DEAL::4180 1
-DEAL::4181 1
-DEAL::4182 1
-DEAL::4183 1
-DEAL::4184 1
-DEAL::4185 1
-DEAL::4186 1
-DEAL::4187 1
-DEAL::4188 1
-DEAL::4189 1
-DEAL::4190 1
-DEAL::4191 1
-DEAL::4192 1
-DEAL::4193 1
-DEAL::4194 1
-DEAL::4195 1
-DEAL::4196 1
-DEAL::4197 1
-DEAL::4198 1
-DEAL::4199 1
-DEAL::4200 1
-DEAL::4201 1
-DEAL::4202 1
-DEAL::4203 1
-DEAL::4204 1
-DEAL::4205 1
-DEAL::4206 1
-DEAL::4207 1
-DEAL::4208 1
-DEAL::4209 1
-DEAL::4210 1
-DEAL::4211 1
-DEAL::4212 1
+DEAL::4177 4
+DEAL::4178 4
+DEAL::4179 4
+DEAL::4180 4
+DEAL::4181 4
+DEAL::4182 4
+DEAL::4183 4
+DEAL::4184 4
+DEAL::4185 4
+DEAL::4186 4
+DEAL::4187 4
+DEAL::4188 4
+DEAL::4189 4
+DEAL::4190 4
+DEAL::4191 4
+DEAL::4192 4
+DEAL::4193 4
+DEAL::4194 4
+DEAL::4195 4
+DEAL::4196 4
+DEAL::4197 4
+DEAL::4198 4
+DEAL::4199 4
+DEAL::4200 4
+DEAL::4201 4
+DEAL::4202 4
+DEAL::4203 4
+DEAL::4204 4
+DEAL::4205 4
+DEAL::4206 4
+DEAL::4207 4
+DEAL::4208 4
+DEAL::4209 4
+DEAL::4210 4
+DEAL::4211 4
+DEAL::4212 4
DEAL::4213 1
-DEAL::4214 3
-DEAL::4215 1
+DEAL::4214 1
+DEAL::4215 4
DEAL::4216 4
DEAL::4217 1
DEAL::4218 1
DEAL::4219 1
DEAL::4220 1
DEAL::4221 1
-DEAL::4222 3
+DEAL::4222 1
DEAL::4223 1
DEAL::4224 4
DEAL::4225 1
-DEAL::4226 3
+DEAL::4226 1
DEAL::4227 1
DEAL::4228 1
DEAL::4229 1
DEAL::4230 1
-DEAL::4231 3
+DEAL::4231 1
DEAL::4232 4
-DEAL::4233 3
-DEAL::4234 3
-DEAL::4235 3
-DEAL::4236 3
-DEAL::4237 3
-DEAL::4238 3
-DEAL::4239 3
+DEAL::4233 1
+DEAL::4234 1
+DEAL::4235 1
+DEAL::4236 1
+DEAL::4237 1
+DEAL::4238 1
+DEAL::4239 1
DEAL::4240 4
-DEAL::4241 3
-DEAL::4242 3
-DEAL::4243 1
-DEAL::4244 1
-DEAL::4245 1
-DEAL::4246 1
-DEAL::4247 1
-DEAL::4248 1
+DEAL::4241 1
+DEAL::4242 1
+DEAL::4243 4
+DEAL::4244 4
+DEAL::4245 4
+DEAL::4246 4
+DEAL::4247 4
+DEAL::4248 4
DEAL::4249 4
-DEAL::4250 1
-DEAL::4251 1
-DEAL::4252 1
-DEAL::4253 1
-DEAL::4254 1
+DEAL::4250 4
+DEAL::4251 4
+DEAL::4252 4
+DEAL::4253 4
+DEAL::4254 4
DEAL::4255 4
DEAL::4256 4
-DEAL::4257 1
-DEAL::4258 1
+DEAL::4257 4
+DEAL::4258 4
DEAL::4259 4
DEAL::4260 4
DEAL::4261 4
DEAL::4262 4
-DEAL::4263 3
-DEAL::4264 1
+DEAL::4263 1
+DEAL::4264 4
DEAL::4265 4
DEAL::4266 1
DEAL::4267 1
DEAL::4268 1
DEAL::4269 1
DEAL::4270 1
-DEAL::4271 3
-DEAL::4272 1
+DEAL::4271 1
+DEAL::4272 4
DEAL::4273 1
DEAL::4274 1
-DEAL::4275 3
+DEAL::4275 1
DEAL::4276 1
-DEAL::4277 1
+DEAL::4277 4
DEAL::4278 1
DEAL::4279 1
-DEAL::4280 3
-DEAL::4281 3
-DEAL::4282 3
+DEAL::4280 1
+DEAL::4281 1
+DEAL::4282 1
DEAL::4283 4
-DEAL::4284 3
+DEAL::4284 1
DEAL::4285 4
-DEAL::4286 3
-DEAL::4287 3
-DEAL::4288 3
-DEAL::4289 3
-DEAL::4290 3
-DEAL::4291 1
-DEAL::4292 1
-DEAL::4293 1
-DEAL::4294 1
-DEAL::4295 1
-DEAL::4296 1
-DEAL::4297 1
+DEAL::4286 1
+DEAL::4287 1
+DEAL::4288 1
+DEAL::4289 1
+DEAL::4290 1
+DEAL::4291 4
+DEAL::4292 4
+DEAL::4293 4
+DEAL::4294 4
+DEAL::4295 4
+DEAL::4296 4
+DEAL::4297 4
DEAL::4298 4
-DEAL::4299 1
-DEAL::4300 1
-DEAL::4301 1
+DEAL::4299 4
+DEAL::4300 4
+DEAL::4301 4
DEAL::4302 4
DEAL::4303 4
-DEAL::4304 1
-DEAL::4305 1
+DEAL::4304 4
+DEAL::4305 4
DEAL::4306 4
DEAL::4307 4
DEAL::4308 4
DEAL::4309 4
-DEAL::4310 1
-DEAL::4311 1
-DEAL::4312 1
-DEAL::4313 1
-DEAL::4314 1
-DEAL::4315 1
-DEAL::4316 1
-DEAL::4317 1
-DEAL::4318 1
-DEAL::4319 1
-DEAL::4320 1
-DEAL::4321 1
-DEAL::4322 1
-DEAL::4323 1
-DEAL::4324 1
-DEAL::4325 1
-DEAL::4326 1
-DEAL::4327 1
-DEAL::4328 1
-DEAL::4329 1
-DEAL::4330 1
-DEAL::4331 1
-DEAL::4332 1
-DEAL::4333 1
-DEAL::4334 1
-DEAL::4335 1
-DEAL::4336 1
-DEAL::4337 1
-DEAL::4338 1
-DEAL::4339 1
-DEAL::4340 1
-DEAL::4341 1
-DEAL::4342 1
-DEAL::4343 1
-DEAL::4344 1
-DEAL::4345 1
-DEAL::4346 1
-DEAL::4347 1
-DEAL::4348 1
-DEAL::4349 1
-DEAL::4350 1
-DEAL::4351 1
-DEAL::4352 1
-DEAL::4353 1
-DEAL::4354 1
-DEAL::4355 1
-DEAL::4356 1
-DEAL::4357 1
-DEAL::4358 1
-DEAL::4359 1
-DEAL::4360 1
-DEAL::4361 1
-DEAL::4362 1
-DEAL::4363 1
-DEAL::4364 1
-DEAL::4365 1
-DEAL::4366 1
-DEAL::4367 1
-DEAL::4368 1
-DEAL::4369 1
-DEAL::4370 1
-DEAL::4371 1
-DEAL::4372 1
-DEAL::4373 1
-DEAL::4374 1
-DEAL::4375 1
-DEAL::4376 1
-DEAL::4377 1
-DEAL::4378 1
-DEAL::4379 1
-DEAL::4380 1
-DEAL::4381 1
-DEAL::4382 1
-DEAL::4383 1
-DEAL::4384 1
-DEAL::4385 1
-DEAL::4386 1
-DEAL::4387 1
-DEAL::4388 1
-DEAL::4389 1
-DEAL::4390 1
-DEAL::4391 1
-DEAL::4392 1
-DEAL::4393 1
-DEAL::4394 1
-DEAL::4395 1
-DEAL::4396 1
-DEAL::4397 1
-DEAL::4398 1
-DEAL::4399 1
-DEAL::4400 1
-DEAL::4401 1
-DEAL::4402 1
-DEAL::4403 1
-DEAL::4404 1
-DEAL::4405 1
-DEAL::4406 1
-DEAL::4407 1
-DEAL::4408 1
-DEAL::4409 1
-DEAL::4410 1
-DEAL::4411 1
-DEAL::4412 1
-DEAL::4413 1
-DEAL::4414 1
-DEAL::4415 1
-DEAL::4416 1
-DEAL::4417 1
-DEAL::4418 1
-DEAL::4419 1
-DEAL::4420 1
-DEAL::4421 1
-DEAL::4422 1
-DEAL::4423 1
-DEAL::4424 1
-DEAL::4425 1
-DEAL::4426 1
-DEAL::4427 1
-DEAL::4428 1
-DEAL::4429 1
-DEAL::4430 1
-DEAL::4431 1
-DEAL::4432 1
-DEAL::4433 1
-DEAL::4434 1
-DEAL::4435 1
-DEAL::4436 1
-DEAL::4437 1
-DEAL::4438 1
-DEAL::4439 1
-DEAL::4440 1
-DEAL::4441 1
-DEAL::4442 1
-DEAL::4443 1
-DEAL::4444 1
-DEAL::4445 1
-DEAL::4446 1
-DEAL::4447 1
-DEAL::4448 1
-DEAL::4449 1
-DEAL::4450 1
-DEAL::4451 1
-DEAL::4452 4
-DEAL::4453 4
-DEAL::4454 4
-DEAL::4455 4
-DEAL::4456 4
-DEAL::4457 4
-DEAL::4458 4
-DEAL::4459 4
-DEAL::4460 4
-DEAL::4461 4
-DEAL::4462 4
-DEAL::4463 4
-DEAL::4464 4
-DEAL::4465 4
-DEAL::4466 4
-DEAL::4467 4
-DEAL::4468 4
-DEAL::4469 4
-DEAL::4470 4
-DEAL::4471 4
-DEAL::4472 4
-DEAL::4473 4
-DEAL::4474 4
-DEAL::4475 4
-DEAL::4476 4
-DEAL::4477 4
-DEAL::4478 4
-DEAL::4479 4
-DEAL::4480 4
-DEAL::4481 4
-DEAL::4482 4
-DEAL::4483 4
-DEAL::4484 4
-DEAL::4485 4
-DEAL::4486 4
-DEAL::4487 4
-DEAL::4488 4
-DEAL::4489 4
-DEAL::4490 4
-DEAL::4491 4
-DEAL::4492 4
-DEAL::4493 4
-DEAL::4494 4
-DEAL::4495 4
-DEAL::4496 4
-DEAL::4497 4
-DEAL::4498 4
-DEAL::4499 4
-DEAL::4500 4
-DEAL::4501 4
-DEAL::4502 4
-DEAL::4503 4
-DEAL::4504 4
-DEAL::4505 4
-DEAL::4506 4
-DEAL::4507 4
-DEAL::4508 4
-DEAL::4509 4
-DEAL::4510 4
-DEAL::4511 4
-DEAL::4512 4
-DEAL::4513 4
-DEAL::4514 4
-DEAL::4515 4
-DEAL::4516 4
-DEAL::4517 4
-DEAL::4518 4
-DEAL::4519 4
-DEAL::4520 4
-DEAL::4521 4
-DEAL::4522 4
-DEAL::4523 4
-DEAL::4524 4
-DEAL::4525 4
-DEAL::4526 4
-DEAL::4527 4
-DEAL::4528 4
-DEAL::4529 4
-DEAL::4530 4
-DEAL::4531 4
-DEAL::4532 4
-DEAL::4533 4
-DEAL::4534 4
-DEAL::4535 4
-DEAL::4536 4
-DEAL::4537 4
-DEAL::4538 4
-DEAL::4539 4
-DEAL::4540 4
-DEAL::4541 4
-DEAL::4542 4
-DEAL::4543 4
-DEAL::4544 4
-DEAL::4545 4
-DEAL::4546 4
-DEAL::4547 4
-DEAL::4548 4
-DEAL::4549 4
-DEAL::4550 4
-DEAL::4551 4
-DEAL::4552 4
-DEAL::4553 4
-DEAL::4554 4
-DEAL::4555 4
-DEAL::4556 4
-DEAL::4557 4
-DEAL::4558 4
-DEAL::4559 4
-DEAL::4560 4
-DEAL::4561 4
-DEAL::4562 4
-DEAL::4563 4
-DEAL::4564 4
-DEAL::4565 4
-DEAL::4566 4
-DEAL::4567 4
-DEAL::4568 4
-DEAL::4569 2
-DEAL::4570 2
-DEAL::4571 2
-DEAL::4572 2
-DEAL::4573 2
-DEAL::4574 2
-DEAL::4575 2
-DEAL::4576 2
-DEAL::4577 2
-DEAL::4578 2
-DEAL::4579 2
-DEAL::4580 2
-DEAL::4581 2
-DEAL::4582 2
-DEAL::4583 2
-DEAL::4584 2
-DEAL::4585 2
-DEAL::4586 2
-DEAL::4587 2
-DEAL::4588 2
-DEAL::4589 2
-DEAL::4590 2
-DEAL::4591 2
-DEAL::4592 2
-DEAL::4593 2
-DEAL::4594 2
-DEAL::4595 2
-DEAL::4596 2
-DEAL::4597 2
-DEAL::4598 2
-DEAL::4599 2
-DEAL::4600 2
-DEAL::4601 2
-DEAL::4602 2
-DEAL::4603 2
-DEAL::4604 2
-DEAL::4605 2
-DEAL::4606 2
-DEAL::4607 2
-DEAL::4608 2
-DEAL::4609 2
-DEAL::4610 2
-DEAL::4611 2
-DEAL::4612 2
-DEAL::4613 2
-DEAL::4614 2
-DEAL::4615 2
-DEAL::4616 2
-DEAL::4617 2
-DEAL::4618 2
-DEAL::4619 2
-DEAL::4620 2
-DEAL::4621 2
-DEAL::4622 2
-DEAL::4623 2
-DEAL::4624 2
-DEAL::4625 2
-DEAL::4626 2
-DEAL::4627 2
-DEAL::4628 2
-DEAL::4629 2
-DEAL::4630 2
-DEAL::4631 2
-DEAL::4632 2
-DEAL::4633 2
-DEAL::4634 2
-DEAL::4635 2
-DEAL::4636 2
-DEAL::4637 2
-DEAL::4638 2
-DEAL::4639 2
-DEAL::4640 2
-DEAL::4641 2
-DEAL::4642 2
-DEAL::4643 2
-DEAL::4644 2
-DEAL::4645 2
-DEAL::4646 2
-DEAL::4647 2
-DEAL::4648 2
-DEAL::4649 2
-DEAL::4650 2
-DEAL::4651 2
-DEAL::4652 2
-DEAL::4653 2
-DEAL::4654 2
-DEAL::4655 2
-DEAL::4656 2
-DEAL::4657 2
-DEAL::4658 2
-DEAL::4659 2
-DEAL::4660 2
-DEAL::4661 2
-DEAL::4662 2
-DEAL::4663 2
-DEAL::4664 2
-DEAL::4665 2
-DEAL::4666 2
-DEAL::4667 2
-DEAL::4668 2
-DEAL::4669 2
-DEAL::4670 2
-DEAL::4671 2
-DEAL::4672 2
-DEAL::4673 2
-DEAL::4674 2
-DEAL::4675 2
-DEAL::4676 2
-DEAL::4677 2
-DEAL::4678 2
-DEAL::4679 3
-DEAL::4680 3
-DEAL::4681 3
-DEAL::4682 3
-DEAL::4683 3
-DEAL::4684 3
-DEAL::4685 3
-DEAL::4686 3
-DEAL::4687 3
-DEAL::4688 3
-DEAL::4689 3
-DEAL::4690 3
-DEAL::4691 3
-DEAL::4692 3
-DEAL::4693 3
-DEAL::4694 3
-DEAL::4695 3
-DEAL::4696 3
-DEAL::4697 3
-DEAL::4698 3
-DEAL::4699 3
-DEAL::4700 3
-DEAL::4701 3
-DEAL::4702 3
-DEAL::4703 3
-DEAL::4704 3
-DEAL::4705 3
-DEAL::4706 3
-DEAL::4707 3
-DEAL::4708 3
-DEAL::4709 3
-DEAL::4710 3
-DEAL::4711 3
-DEAL::4712 3
-DEAL::4713 3
-DEAL::4714 3
-DEAL::4715 3
-DEAL::4716 3
-DEAL::4717 3
-DEAL::4718 3
-DEAL::4719 3
-DEAL::4720 3
-DEAL::4721 3
-DEAL::4722 3
-DEAL::4723 3
-DEAL::4724 3
-DEAL::4725 3
-DEAL::4726 3
-DEAL::4727 3
-DEAL::4728 3
-DEAL::4729 3
-DEAL::4730 3
-DEAL::4731 3
-DEAL::4732 3
-DEAL::4733 3
-DEAL::4734 3
-DEAL::4735 3
-DEAL::4736 3
-DEAL::4737 3
-DEAL::4738 3
-DEAL::4739 3
-DEAL::4740 3
-DEAL::4741 3
-DEAL::4742 3
-DEAL::4743 3
-DEAL::4744 3
-DEAL::4745 3
-DEAL::4746 3
-DEAL::4747 3
-DEAL::4748 3
-DEAL::4749 3
-DEAL::4750 3
-DEAL::4751 3
-DEAL::4752 3
-DEAL::4753 3
-DEAL::4754 3
-DEAL::4755 3
-DEAL::4756 3
-DEAL::4757 3
-DEAL::4758 3
-DEAL::4759 3
-DEAL::4760 3
-DEAL::4761 3
-DEAL::4762 3
-DEAL::4763 3
-DEAL::4764 3
-DEAL::4765 3
-DEAL::4766 3
-DEAL::4767 3
-DEAL::4768 3
-DEAL::4769 3
-DEAL::4770 3
-DEAL::4771 3
-DEAL::4772 3
-DEAL::4773 3
-DEAL::4774 3
-DEAL::4775 3
-DEAL::4776 3
-DEAL::4777 3
-DEAL::4778 3
-DEAL::4779 3
-DEAL::4780 3
-DEAL::4781 3
-DEAL::4782 3
-DEAL::4783 3
-DEAL::4784 3
-DEAL::4785 3
-DEAL::4786 3
-DEAL::4787 3
-DEAL::4788 3
-DEAL::4789 1
-DEAL::4790 1
-DEAL::4791 1
-DEAL::4792 1
-DEAL::4793 1
-DEAL::4794 1
-DEAL::4795 1
-DEAL::4796 1
-DEAL::4797 1
-DEAL::4798 1
-DEAL::4799 1
-DEAL::4800 1
-DEAL::4801 1
-DEAL::4802 1
-DEAL::4803 1
-DEAL::4804 1
-DEAL::4805 1
-DEAL::4806 1
-DEAL::4807 1
-DEAL::4808 1
-DEAL::4809 1
-DEAL::4810 1
-DEAL::4811 1
-DEAL::4812 1
-DEAL::4813 1
-DEAL::4814 1
-DEAL::4815 1
-DEAL::4816 1
-DEAL::4817 1
-DEAL::4818 1
-DEAL::4819 1
-DEAL::4820 1
-DEAL::4821 1
-DEAL::4822 1
-DEAL::4823 1
-DEAL::4824 1
-DEAL::4825 1
-DEAL::4826 1
-DEAL::4827 1
-DEAL::4828 1
-DEAL::4829 1
-DEAL::4830 1
-DEAL::4831 1
-DEAL::4832 1
-DEAL::4833 1
-DEAL::4834 1
-DEAL::4835 1
-DEAL::4836 1
-DEAL::4837 1
-DEAL::4838 1
-DEAL::4839 1
-DEAL::4840 1
-DEAL::4841 1
-DEAL::4842 1
-DEAL::4843 1
-DEAL::4844 1
-DEAL::4845 1
-DEAL::4846 1
-DEAL::4847 1
-DEAL::4848 1
-DEAL::4849 1
-DEAL::4850 1
-DEAL::4851 1
-DEAL::4852 1
-DEAL::4853 1
-DEAL::4854 1
-DEAL::4855 1
-DEAL::4856 1
-DEAL::4857 1
-DEAL::4858 1
-DEAL::4859 1
-DEAL::4860 1
-DEAL::4861 1
-DEAL::4862 1
-DEAL::4863 1
-DEAL::4864 1
-DEAL::4865 1
-DEAL::4866 1
-DEAL::4867 1
-DEAL::4868 1
-DEAL::4869 1
-DEAL::4870 1
-DEAL::4871 1
-DEAL::4872 1
-DEAL::4873 1
-DEAL::4874 1
-DEAL::4875 1
-DEAL::4876 1
-DEAL::4877 1
-DEAL::4878 1
-DEAL::4879 1
-DEAL::4880 1
-DEAL::4881 1
-DEAL::4882 1
-DEAL::4883 1
-DEAL::4884 1
-DEAL::4885 1
-DEAL::4886 1
-DEAL::4887 1
-DEAL::4888 1
-DEAL::4889 1
-DEAL::4890 1
-DEAL::4891 1
-DEAL::4892 1
-DEAL::4893 1
-DEAL::4894 1
-DEAL::4895 1
-DEAL::4896 1
-DEAL::4897 1
-DEAL::4898 1
-DEAL::4899 4
-DEAL::4900 4
-DEAL::4901 4
-DEAL::4902 4
-DEAL::4903 4
-DEAL::4904 4
-DEAL::4905 4
-DEAL::4906 4
-DEAL::4907 4
-DEAL::4908 4
-DEAL::4909 4
-DEAL::4910 4
-DEAL::4911 4
-DEAL::4912 4
-DEAL::4913 4
-DEAL::4914 4
-DEAL::4915 4
-DEAL::4916 4
-DEAL::4917 4
-DEAL::4918 4
-DEAL::4919 4
-DEAL::4920 4
-DEAL::4921 4
-DEAL::4922 4
-DEAL::4923 4
-DEAL::4924 4
-DEAL::4925 4
-DEAL::4926 4
-DEAL::4927 4
-DEAL::4928 4
-DEAL::4929 4
-DEAL::4930 4
-DEAL::4931 4
-DEAL::4932 4
-DEAL::4933 4
-DEAL::4934 4
-DEAL::4935 4
-DEAL::4936 4
-DEAL::4937 4
-DEAL::4938 4
-DEAL::4939 4
-DEAL::4940 4
-DEAL::4941 4
-DEAL::4942 4
-DEAL::4943 4
-DEAL::4944 4
-DEAL::4945 4
-DEAL::4946 4
-DEAL::4947 4
-DEAL::4948 4
-DEAL::4949 4
-DEAL::4950 4
-DEAL::4951 4
-DEAL::4952 4
-DEAL::4953 4
-DEAL::4954 4
-DEAL::4955 4
-DEAL::4956 4
-DEAL::4957 4
-DEAL::4958 4
-DEAL::4959 4
-DEAL::4960 4
-DEAL::4961 4
-DEAL::4962 4
-DEAL::4963 4
-DEAL::4964 4
-DEAL::4965 4
-DEAL::4966 4
-DEAL::4967 4
-DEAL::4968 4
-DEAL::4969 4
-DEAL::4970 4
-DEAL::4971 4
-DEAL::4972 4
-DEAL::4973 4
-DEAL::4974 4
-DEAL::4975 4
-DEAL::4976 4
-DEAL::4977 4
-DEAL::4978 4
-DEAL::4979 4
-DEAL::4980 4
-DEAL::4981 4
-DEAL::4982 4
-DEAL::4983 4
-DEAL::4984 4
-DEAL::4985 4
-DEAL::4986 4
-DEAL::4987 4
-DEAL::4988 4
-DEAL::4989 4
-DEAL::4990 0
-DEAL::4991 4
-DEAL::4992 4
-DEAL::4993 4
-DEAL::4994 4
-DEAL::4995 2
+DEAL::4310 4
+DEAL::4311 4
+DEAL::4312 4
+DEAL::4313 4
+DEAL::4314 4
+DEAL::4315 4
+DEAL::4316 4
+DEAL::4317 4
+DEAL::4318 4
+DEAL::4319 4
+DEAL::4320 4
+DEAL::4321 4
+DEAL::4322 4
+DEAL::4323 4
+DEAL::4324 4
+DEAL::4325 4
+DEAL::4326 4
+DEAL::4327 4
+DEAL::4328 4
+DEAL::4329 4
+DEAL::4330 4
+DEAL::4331 4
+DEAL::4332 4
+DEAL::4333 4
+DEAL::4334 4
+DEAL::4335 4
+DEAL::4336 4
+DEAL::4337 4
+DEAL::4338 4
+DEAL::4339 4
+DEAL::4340 4
+DEAL::4341 4
+DEAL::4342 4
+DEAL::4343 4
+DEAL::4344 4
+DEAL::4345 4
+DEAL::4346 4
+DEAL::4347 4
+DEAL::4348 4
+DEAL::4349 4
+DEAL::4350 4
+DEAL::4351 4
+DEAL::4352 4
+DEAL::4353 4
+DEAL::4354 4
+DEAL::4355 4
+DEAL::4356 4
+DEAL::4357 4
+DEAL::4358 4
+DEAL::4359 4
+DEAL::4360 4
+DEAL::4361 4
+DEAL::4362 4
+DEAL::4363 4
+DEAL::4364 4
+DEAL::4365 4
+DEAL::4366 4
+DEAL::4367 4
+DEAL::4368 4
+DEAL::4369 4
+DEAL::4370 4
+DEAL::4371 4
+DEAL::4372 4
+DEAL::4373 4
+DEAL::4374 4
+DEAL::4375 4
+DEAL::4376 4
+DEAL::4377 4
+DEAL::4378 4
+DEAL::4379 4
+DEAL::4380 4
+DEAL::4381 4
+DEAL::4382 4
+DEAL::4383 4
+DEAL::4384 4
+DEAL::4385 4
+DEAL::4386 4
+DEAL::4387 4
+DEAL::4388 4
+DEAL::4389 4
+DEAL::4390 4
+DEAL::4391 4
+DEAL::4392 4
+DEAL::4393 4
+DEAL::4394 4
+DEAL::4395 4
+DEAL::4396 4
+DEAL::4397 4
+DEAL::4398 4
+DEAL::4399 4
+DEAL::4400 4
+DEAL::4401 4
+DEAL::4402 4
+DEAL::4403 4
+DEAL::4404 4
+DEAL::4405 4
+DEAL::4406 4
+DEAL::4407 4
+DEAL::4408 4
+DEAL::4409 4
+DEAL::4410 4
+DEAL::4411 4
+DEAL::4412 4
+DEAL::4413 4
+DEAL::4414 4
+DEAL::4415 4
+DEAL::4416 4
+DEAL::4417 4
+DEAL::4418 4
+DEAL::4419 4
+DEAL::4420 4
+DEAL::4421 4
+DEAL::4422 4
+DEAL::4423 4
+DEAL::4424 4
+DEAL::4425 4
+DEAL::4426 4
+DEAL::4427 4
+DEAL::4428 4
+DEAL::4429 4
+DEAL::4430 4
+DEAL::4431 4
+DEAL::4432 4
+DEAL::4433 4
+DEAL::4434 4
+DEAL::4435 4
+DEAL::4436 4
+DEAL::4437 4
+DEAL::4438 4
+DEAL::4439 4
+DEAL::4440 4
+DEAL::4441 4
+DEAL::4442 4
+DEAL::4443 4
+DEAL::4444 4
+DEAL::4445 4
+DEAL::4446 4
+DEAL::4447 4
+DEAL::4448 4
+DEAL::4449 4
+DEAL::4450 4
+DEAL::4451 4
+DEAL::4452 2
+DEAL::4453 2
+DEAL::4454 2
+DEAL::4455 2
+DEAL::4456 2
+DEAL::4457 2
+DEAL::4458 2
+DEAL::4459 2
+DEAL::4460 2
+DEAL::4461 2
+DEAL::4462 2
+DEAL::4463 2
+DEAL::4464 2
+DEAL::4465 2
+DEAL::4466 2
+DEAL::4467 2
+DEAL::4468 2
+DEAL::4469 2
+DEAL::4470 2
+DEAL::4471 2
+DEAL::4472 2
+DEAL::4473 2
+DEAL::4474 2
+DEAL::4475 2
+DEAL::4476 2
+DEAL::4477 2
+DEAL::4478 2
+DEAL::4479 2
+DEAL::4480 2
+DEAL::4481 2
+DEAL::4482 2
+DEAL::4483 2
+DEAL::4484 2
+DEAL::4485 2
+DEAL::4486 2
+DEAL::4487 2
+DEAL::4488 2
+DEAL::4489 2
+DEAL::4490 2
+DEAL::4491 2
+DEAL::4492 2
+DEAL::4493 2
+DEAL::4494 2
+DEAL::4495 2
+DEAL::4496 2
+DEAL::4497 2
+DEAL::4498 2
+DEAL::4499 2
+DEAL::4500 2
+DEAL::4501 2
+DEAL::4502 2
+DEAL::4503 2
+DEAL::4504 2
+DEAL::4505 2
+DEAL::4506 2
+DEAL::4507 2
+DEAL::4508 2
+DEAL::4509 2
+DEAL::4510 2
+DEAL::4511 2
+DEAL::4512 2
+DEAL::4513 2
+DEAL::4514 2
+DEAL::4515 2
+DEAL::4516 2
+DEAL::4517 2
+DEAL::4518 2
+DEAL::4519 2
+DEAL::4520 2
+DEAL::4521 2
+DEAL::4522 2
+DEAL::4523 2
+DEAL::4524 2
+DEAL::4525 2
+DEAL::4526 2
+DEAL::4527 2
+DEAL::4528 2
+DEAL::4529 2
+DEAL::4530 2
+DEAL::4531 2
+DEAL::4532 2
+DEAL::4533 2
+DEAL::4534 2
+DEAL::4535 2
+DEAL::4536 2
+DEAL::4537 2
+DEAL::4538 2
+DEAL::4539 2
+DEAL::4540 2
+DEAL::4541 2
+DEAL::4542 2
+DEAL::4543 2
+DEAL::4544 2
+DEAL::4545 2
+DEAL::4546 2
+DEAL::4547 2
+DEAL::4548 2
+DEAL::4549 2
+DEAL::4550 2
+DEAL::4551 2
+DEAL::4552 2
+DEAL::4553 2
+DEAL::4554 2
+DEAL::4555 2
+DEAL::4556 2
+DEAL::4557 2
+DEAL::4558 2
+DEAL::4559 2
+DEAL::4560 2
+DEAL::4561 2
+DEAL::4562 2
+DEAL::4563 2
+DEAL::4564 2
+DEAL::4565 2
+DEAL::4566 2
+DEAL::4567 2
+DEAL::4568 2
+DEAL::4569 1
+DEAL::4570 1
+DEAL::4571 1
+DEAL::4572 1
+DEAL::4573 1
+DEAL::4574 1
+DEAL::4575 1
+DEAL::4576 1
+DEAL::4577 1
+DEAL::4578 1
+DEAL::4579 1
+DEAL::4580 1
+DEAL::4581 1
+DEAL::4582 1
+DEAL::4583 1
+DEAL::4584 1
+DEAL::4585 1
+DEAL::4586 1
+DEAL::4587 1
+DEAL::4588 1
+DEAL::4589 1
+DEAL::4590 1
+DEAL::4591 1
+DEAL::4592 1
+DEAL::4593 1
+DEAL::4594 1
+DEAL::4595 1
+DEAL::4596 1
+DEAL::4597 1
+DEAL::4598 1
+DEAL::4599 1
+DEAL::4600 1
+DEAL::4601 1
+DEAL::4602 1
+DEAL::4603 1
+DEAL::4604 1
+DEAL::4605 1
+DEAL::4606 1
+DEAL::4607 1
+DEAL::4608 1
+DEAL::4609 1
+DEAL::4610 1
+DEAL::4611 1
+DEAL::4612 1
+DEAL::4613 1
+DEAL::4614 1
+DEAL::4615 1
+DEAL::4616 1
+DEAL::4617 1
+DEAL::4618 1
+DEAL::4619 1
+DEAL::4620 1
+DEAL::4621 1
+DEAL::4622 1
+DEAL::4623 1
+DEAL::4624 1
+DEAL::4625 1
+DEAL::4626 1
+DEAL::4627 1
+DEAL::4628 1
+DEAL::4629 1
+DEAL::4630 1
+DEAL::4631 1
+DEAL::4632 1
+DEAL::4633 1
+DEAL::4634 1
+DEAL::4635 1
+DEAL::4636 1
+DEAL::4637 1
+DEAL::4638 1
+DEAL::4639 1
+DEAL::4640 1
+DEAL::4641 1
+DEAL::4642 1
+DEAL::4643 1
+DEAL::4644 1
+DEAL::4645 1
+DEAL::4646 1
+DEAL::4647 1
+DEAL::4648 1
+DEAL::4649 1
+DEAL::4650 1
+DEAL::4651 1
+DEAL::4652 1
+DEAL::4653 1
+DEAL::4654 1
+DEAL::4655 1
+DEAL::4656 1
+DEAL::4657 1
+DEAL::4658 1
+DEAL::4659 1
+DEAL::4660 1
+DEAL::4661 1
+DEAL::4662 1
+DEAL::4663 1
+DEAL::4664 1
+DEAL::4665 1
+DEAL::4666 1
+DEAL::4667 1
+DEAL::4668 1
+DEAL::4669 1
+DEAL::4670 1
+DEAL::4671 1
+DEAL::4672 1
+DEAL::4673 1
+DEAL::4674 1
+DEAL::4675 1
+DEAL::4676 1
+DEAL::4677 1
+DEAL::4678 1
+DEAL::4679 0
+DEAL::4680 0
+DEAL::4681 0
+DEAL::4682 1
+DEAL::4683 0
+DEAL::4684 1
+DEAL::4685 0
+DEAL::4686 0
+DEAL::4687 0
+DEAL::4688 0
+DEAL::4689 0
+DEAL::4690 0
+DEAL::4691 0
+DEAL::4692 0
+DEAL::4693 1
+DEAL::4694 1
+DEAL::4695 0
+DEAL::4696 0
+DEAL::4697 0
+DEAL::4698 0
+DEAL::4699 0
+DEAL::4700 0
+DEAL::4701 0
+DEAL::4702 0
+DEAL::4703 0
+DEAL::4704 0
+DEAL::4705 0
+DEAL::4706 1
+DEAL::4707 0
+DEAL::4708 0
+DEAL::4709 0
+DEAL::4710 0
+DEAL::4711 0
+DEAL::4712 0
+DEAL::4713 1
+DEAL::4714 0
+DEAL::4715 0
+DEAL::4716 0
+DEAL::4717 0
+DEAL::4718 0
+DEAL::4719 0
+DEAL::4720 0
+DEAL::4721 0
+DEAL::4722 0
+DEAL::4723 0
+DEAL::4724 0
+DEAL::4725 0
+DEAL::4726 0
+DEAL::4727 0
+DEAL::4728 0
+DEAL::4729 0
+DEAL::4730 0
+DEAL::4731 0
+DEAL::4732 0
+DEAL::4733 0
+DEAL::4734 0
+DEAL::4735 0
+DEAL::4736 0
+DEAL::4737 0
+DEAL::4738 0
+DEAL::4739 1
+DEAL::4740 1
+DEAL::4741 0
+DEAL::4742 1
+DEAL::4743 0
+DEAL::4744 1
+DEAL::4745 1
+DEAL::4746 1
+DEAL::4747 1
+DEAL::4748 1
+DEAL::4749 0
+DEAL::4750 1
+DEAL::4751 1
+DEAL::4752 1
+DEAL::4753 1
+DEAL::4754 1
+DEAL::4755 1
+DEAL::4756 0
+DEAL::4757 0
+DEAL::4758 0
+DEAL::4759 1
+DEAL::4760 0
+DEAL::4761 0
+DEAL::4762 0
+DEAL::4763 0
+DEAL::4764 0
+DEAL::4765 0
+DEAL::4766 1
+DEAL::4767 0
+DEAL::4768 0
+DEAL::4769 0
+DEAL::4770 0
+DEAL::4771 0
+DEAL::4772 1
+DEAL::4773 0
+DEAL::4774 1
+DEAL::4775 1
+DEAL::4776 0
+DEAL::4777 1
+DEAL::4778 1
+DEAL::4779 1
+DEAL::4780 1
+DEAL::4781 1
+DEAL::4782 0
+DEAL::4783 0
+DEAL::4784 0
+DEAL::4785 0
+DEAL::4786 0
+DEAL::4787 0
+DEAL::4788 0
+DEAL::4789 3
+DEAL::4790 3
+DEAL::4791 3
+DEAL::4792 3
+DEAL::4793 3
+DEAL::4794 3
+DEAL::4795 3
+DEAL::4796 3
+DEAL::4797 3
+DEAL::4798 3
+DEAL::4799 3
+DEAL::4800 3
+DEAL::4801 3
+DEAL::4802 3
+DEAL::4803 3
+DEAL::4804 3
+DEAL::4805 3
+DEAL::4806 3
+DEAL::4807 3
+DEAL::4808 3
+DEAL::4809 3
+DEAL::4810 3
+DEAL::4811 3
+DEAL::4812 3
+DEAL::4813 3
+DEAL::4814 3
+DEAL::4815 3
+DEAL::4816 3
+DEAL::4817 3
+DEAL::4818 3
+DEAL::4819 3
+DEAL::4820 3
+DEAL::4821 3
+DEAL::4822 3
+DEAL::4823 3
+DEAL::4824 3
+DEAL::4825 3
+DEAL::4826 3
+DEAL::4827 3
+DEAL::4828 3
+DEAL::4829 3
+DEAL::4830 3
+DEAL::4831 3
+DEAL::4832 3
+DEAL::4833 3
+DEAL::4834 3
+DEAL::4835 3
+DEAL::4836 3
+DEAL::4837 3
+DEAL::4838 3
+DEAL::4839 3
+DEAL::4840 3
+DEAL::4841 3
+DEAL::4842 3
+DEAL::4843 3
+DEAL::4844 3
+DEAL::4845 3
+DEAL::4846 3
+DEAL::4847 3
+DEAL::4848 3
+DEAL::4849 3
+DEAL::4850 3
+DEAL::4851 3
+DEAL::4852 3
+DEAL::4853 3
+DEAL::4854 3
+DEAL::4855 3
+DEAL::4856 3
+DEAL::4857 3
+DEAL::4858 3
+DEAL::4859 3
+DEAL::4860 3
+DEAL::4861 3
+DEAL::4862 3
+DEAL::4863 3
+DEAL::4864 3
+DEAL::4865 3
+DEAL::4866 3
+DEAL::4867 3
+DEAL::4868 3
+DEAL::4869 3
+DEAL::4870 3
+DEAL::4871 3
+DEAL::4872 3
+DEAL::4873 3
+DEAL::4874 3
+DEAL::4875 3
+DEAL::4876 3
+DEAL::4877 3
+DEAL::4878 3
+DEAL::4879 3
+DEAL::4880 3
+DEAL::4881 3
+DEAL::4882 3
+DEAL::4883 3
+DEAL::4884 3
+DEAL::4885 3
+DEAL::4886 3
+DEAL::4887 3
+DEAL::4888 3
+DEAL::4889 3
+DEAL::4890 3
+DEAL::4891 3
+DEAL::4892 3
+DEAL::4893 3
+DEAL::4894 3
+DEAL::4895 3
+DEAL::4896 3
+DEAL::4897 3
+DEAL::4898 3
+DEAL::4899 2
+DEAL::4900 2
+DEAL::4901 2
+DEAL::4902 2
+DEAL::4903 2
+DEAL::4904 2
+DEAL::4905 2
+DEAL::4906 2
+DEAL::4907 2
+DEAL::4908 2
+DEAL::4909 2
+DEAL::4910 2
+DEAL::4911 2
+DEAL::4912 2
+DEAL::4913 2
+DEAL::4914 2
+DEAL::4915 2
+DEAL::4916 2
+DEAL::4917 2
+DEAL::4918 2
+DEAL::4919 2
+DEAL::4920 2
+DEAL::4921 2
+DEAL::4922 2
+DEAL::4923 2
+DEAL::4924 2
+DEAL::4925 2
+DEAL::4926 2
+DEAL::4927 2
+DEAL::4928 2
+DEAL::4929 2
+DEAL::4930 2
+DEAL::4931 2
+DEAL::4932 2
+DEAL::4933 2
+DEAL::4934 2
+DEAL::4935 2
+DEAL::4936 2
+DEAL::4937 2
+DEAL::4938 2
+DEAL::4939 2
+DEAL::4940 2
+DEAL::4941 2
+DEAL::4942 2
+DEAL::4943 2
+DEAL::4944 2
+DEAL::4945 2
+DEAL::4946 2
+DEAL::4947 2
+DEAL::4948 2
+DEAL::4949 2
+DEAL::4950 2
+DEAL::4951 2
+DEAL::4952 2
+DEAL::4953 2
+DEAL::4954 2
+DEAL::4955 2
+DEAL::4956 2
+DEAL::4957 2
+DEAL::4958 2
+DEAL::4959 2
+DEAL::4960 2
+DEAL::4961 2
+DEAL::4962 2
+DEAL::4963 2
+DEAL::4964 2
+DEAL::4965 2
+DEAL::4966 2
+DEAL::4967 2
+DEAL::4968 2
+DEAL::4969 2
+DEAL::4970 2
+DEAL::4971 2
+DEAL::4972 2
+DEAL::4973 2
+DEAL::4974 2
+DEAL::4975 2
+DEAL::4976 2
+DEAL::4977 2
+DEAL::4978 2
+DEAL::4979 2
+DEAL::4980 2
+DEAL::4981 2
+DEAL::4982 2
+DEAL::4983 2
+DEAL::4984 2
+DEAL::4985 2
+DEAL::4986 2
+DEAL::4987 2
+DEAL::4988 2
+DEAL::4989 2
+DEAL::4990 3
+DEAL::4991 2
+DEAL::4992 2
+DEAL::4993 2
+DEAL::4994 2
+DEAL::4995 1
DEAL::4996 2
-DEAL::4997 2
+DEAL::4997 1
DEAL::4998 2
-DEAL::4999 2
+DEAL::4999 1
DEAL::5000 2
-DEAL::5001 2
+DEAL::5001 1
DEAL::5002 2
-DEAL::5003 2
-DEAL::5004 2
-DEAL::5005 2
+DEAL::5003 1
+DEAL::5004 1
+DEAL::5005 1
DEAL::5006 2
-DEAL::5007 2
-DEAL::5008 2
-DEAL::5009 2
+DEAL::5007 1
+DEAL::5008 1
+DEAL::5009 1
DEAL::5010 2
-DEAL::5011 2
+DEAL::5011 1
DEAL::5012 2
-DEAL::5013 2
+DEAL::5013 1
DEAL::5014 2
-DEAL::5015 2
-DEAL::5016 2
-DEAL::5017 2
-DEAL::5018 2
-DEAL::5019 2
-DEAL::5020 2
-DEAL::5021 2
-DEAL::5022 2
-DEAL::5023 2
-DEAL::5024 2
-DEAL::5025 2
-DEAL::5026 2
-DEAL::5027 2
-DEAL::5028 2
-DEAL::5029 2
-DEAL::5030 2
-DEAL::5031 2
-DEAL::5032 2
-DEAL::5033 2
-DEAL::5034 2
-DEAL::5035 2
-DEAL::5036 2
-DEAL::5037 2
-DEAL::5038 2
+DEAL::5015 1
+DEAL::5016 1
+DEAL::5017 1
+DEAL::5018 1
+DEAL::5019 1
+DEAL::5020 1
+DEAL::5021 1
+DEAL::5022 1
+DEAL::5023 1
+DEAL::5024 1
+DEAL::5025 1
+DEAL::5026 1
+DEAL::5027 1
+DEAL::5028 1
+DEAL::5029 1
+DEAL::5030 1
+DEAL::5031 1
+DEAL::5032 1
+DEAL::5033 1
+DEAL::5034 1
+DEAL::5035 1
+DEAL::5036 1
+DEAL::5037 1
+DEAL::5038 1
DEAL::5039 2
-DEAL::5040 2
+DEAL::5040 1
DEAL::5041 2
-DEAL::5042 2
-DEAL::5043 2
+DEAL::5042 1
+DEAL::5043 1
DEAL::5044 2
-DEAL::5045 2
-DEAL::5046 2
-DEAL::5047 2
-DEAL::5048 2
-DEAL::5049 2
-DEAL::5050 2
-DEAL::5051 2
-DEAL::5052 2
-DEAL::5053 2
-DEAL::5054 2
-DEAL::5055 2
-DEAL::5056 2
-DEAL::5057 2
-DEAL::5058 2
-DEAL::5059 2
-DEAL::5060 2
-DEAL::5061 2
-DEAL::5062 2
-DEAL::5063 2
-DEAL::5064 2
-DEAL::5065 2
-DEAL::5066 2
-DEAL::5067 2
-DEAL::5068 2
-DEAL::5069 2
-DEAL::5070 2
-DEAL::5071 2
-DEAL::5072 2
-DEAL::5073 2
-DEAL::5074 2
-DEAL::5075 2
-DEAL::5076 2
-DEAL::5077 2
-DEAL::5078 2
-DEAL::5079 2
-DEAL::5080 2
-DEAL::5081 2
-DEAL::5082 2
-DEAL::5083 2
-DEAL::5084 2
-DEAL::5085 2
-DEAL::5086 2
-DEAL::5087 2
-DEAL::5088 2
-DEAL::5089 2
-DEAL::5090 2
-DEAL::5091 2
-DEAL::5092 2
-DEAL::5093 2
-DEAL::5094 2
-DEAL::5095 3
-DEAL::5096 4
-DEAL::5097 4
-DEAL::5098 3
-DEAL::5099 3
-DEAL::5100 3
-DEAL::5101 3
-DEAL::5102 3
-DEAL::5103 3
-DEAL::5104 3
-DEAL::5105 3
-DEAL::5106 3
-DEAL::5107 3
-DEAL::5108 3
-DEAL::5109 3
-DEAL::5110 3
-DEAL::5111 3
-DEAL::5112 3
-DEAL::5113 4
-DEAL::5114 3
-DEAL::5115 3
-DEAL::5116 3
-DEAL::5117 3
-DEAL::5118 3
-DEAL::5119 3
-DEAL::5120 3
-DEAL::5121 3
-DEAL::5122 3
-DEAL::5123 3
-DEAL::5124 3
-DEAL::5125 3
-DEAL::5126 4
-DEAL::5127 3
-DEAL::5128 3
-DEAL::5129 4
-DEAL::5130 3
-DEAL::5131 3
-DEAL::5132 3
-DEAL::5133 3
-DEAL::5134 3
-DEAL::5135 3
-DEAL::5136 3
-DEAL::5137 3
-DEAL::5138 4
-DEAL::5139 3
-DEAL::5140 4
-DEAL::5141 4
-DEAL::5142 4
-DEAL::5143 4
-DEAL::5144 3
-DEAL::5145 4
-DEAL::5146 4
-DEAL::5147 4
-DEAL::5148 4
-DEAL::5149 4
-DEAL::5150 4
-DEAL::5151 4
-DEAL::5152 4
-DEAL::5153 4
-DEAL::5154 4
-DEAL::5155 4
-DEAL::5156 3
-DEAL::5157 4
-DEAL::5158 3
-DEAL::5159 3
-DEAL::5160 4
-DEAL::5161 4
-DEAL::5162 4
-DEAL::5163 4
-DEAL::5164 3
-DEAL::5165 4
-DEAL::5166 3
-DEAL::5167 3
-DEAL::5168 3
-DEAL::5169 3
-DEAL::5170 3
-DEAL::5171 3
-DEAL::5172 3
-DEAL::5173 3
-DEAL::5174 3
-DEAL::5175 3
-DEAL::5176 3
-DEAL::5177 3
-DEAL::5178 3
-DEAL::5179 3
-DEAL::5180 3
-DEAL::5181 3
-DEAL::5182 3
-DEAL::5183 3
-DEAL::5184 3
-DEAL::5185 3
-DEAL::5186 3
-DEAL::5187 3
-DEAL::5188 3
-DEAL::5189 3
-DEAL::5190 3
-DEAL::5191 3
-DEAL::5192 3
-DEAL::5193 3
-DEAL::5194 1
-DEAL::5195 1
-DEAL::5196 1
-DEAL::5197 1
-DEAL::5198 1
-DEAL::5199 1
-DEAL::5200 1
-DEAL::5201 1
-DEAL::5202 1
-DEAL::5203 1
-DEAL::5204 1
-DEAL::5205 1
-DEAL::5206 1
-DEAL::5207 1
-DEAL::5208 1
-DEAL::5209 1
-DEAL::5210 1
-DEAL::5211 1
-DEAL::5212 1
-DEAL::5213 1
-DEAL::5214 1
-DEAL::5215 1
-DEAL::5216 1
-DEAL::5217 1
-DEAL::5218 1
-DEAL::5219 1
-DEAL::5220 1
-DEAL::5221 1
-DEAL::5222 1
-DEAL::5223 1
-DEAL::5224 1
-DEAL::5225 1
-DEAL::5226 1
-DEAL::5227 1
-DEAL::5228 1
-DEAL::5229 1
-DEAL::5230 1
-DEAL::5231 1
-DEAL::5232 1
-DEAL::5233 1
-DEAL::5234 1
-DEAL::5235 1
-DEAL::5236 1
-DEAL::5237 1
-DEAL::5238 1
-DEAL::5239 1
-DEAL::5240 1
-DEAL::5241 1
-DEAL::5242 1
-DEAL::5243 1
-DEAL::5244 1
-DEAL::5245 1
-DEAL::5246 1
-DEAL::5247 1
-DEAL::5248 1
-DEAL::5249 1
-DEAL::5250 1
-DEAL::5251 1
-DEAL::5252 1
-DEAL::5253 1
-DEAL::5254 1
-DEAL::5255 1
-DEAL::5256 1
-DEAL::5257 1
-DEAL::5258 1
-DEAL::5259 1
-DEAL::5260 1
-DEAL::5261 1
-DEAL::5262 1
-DEAL::5263 1
-DEAL::5264 1
-DEAL::5265 1
-DEAL::5266 1
-DEAL::5267 1
-DEAL::5268 1
-DEAL::5269 1
-DEAL::5270 1
-DEAL::5271 1
-DEAL::5272 1
-DEAL::5273 1
-DEAL::5274 1
-DEAL::5275 1
-DEAL::5276 1
-DEAL::5277 1
-DEAL::5278 1
-DEAL::5279 1
-DEAL::5280 1
-DEAL::5281 1
-DEAL::5282 1
-DEAL::5283 1
-DEAL::5284 1
-DEAL::5285 1
-DEAL::5286 1
-DEAL::5287 1
-DEAL::5288 1
-DEAL::5289 1
-DEAL::5290 1
-DEAL::5291 1
-DEAL::5292 1
-DEAL::5293 1
-DEAL::5294 1
-DEAL::5295 1
-DEAL::5296 1
-DEAL::5297 1
-DEAL::5298 1
-DEAL::5299 1
-DEAL::5300 1
-DEAL::5301 1
-DEAL::5302 1
-DEAL::5303 1
-DEAL::5304 1
-DEAL::5305 1
-DEAL::5306 1
-DEAL::5307 1
-DEAL::5308 1
-DEAL::5309 1
-DEAL::5310 1
-DEAL::5311 1
-DEAL::5312 1
-DEAL::5313 1
-DEAL::5314 1
-DEAL::5315 1
-DEAL::5316 1
-DEAL::5317 1
-DEAL::5318 1
-DEAL::5319 1
-DEAL::5320 1
-DEAL::5321 1
-DEAL::5322 1
-DEAL::5323 1
-DEAL::5324 1
-DEAL::5325 1
-DEAL::5326 1
-DEAL::5327 1
-DEAL::5328 1
-DEAL::5329 1
-DEAL::5330 1
-DEAL::5331 1
-DEAL::5332 1
-DEAL::5333 1
-DEAL::5334 1
-DEAL::5335 1
-DEAL::5336 1
-DEAL::5337 1
-DEAL::5338 1
-DEAL::5339 1
-DEAL::5340 1
-DEAL::5341 1
-DEAL::5342 1
-DEAL::5343 1
-DEAL::5344 1
-DEAL::5345 1
-DEAL::5346 1
-DEAL::5347 1
-DEAL::5348 1
-DEAL::5349 1
-DEAL::5350 1
-DEAL::5351 1
-DEAL::5352 1
-DEAL::5353 1
-DEAL::5354 1
-DEAL::5355 1
-DEAL::5356 1
-DEAL::5357 1
-DEAL::5358 1
-DEAL::5359 1
-DEAL::5360 1
-DEAL::5361 1
-DEAL::5362 1
-DEAL::5363 1
-DEAL::5364 1
-DEAL::5365 1
-DEAL::5366 1
-DEAL::5367 1
-DEAL::5368 1
-DEAL::5369 1
-DEAL::5370 1
-DEAL::5371 1
-DEAL::5372 1
-DEAL::5373 1
-DEAL::5374 1
-DEAL::5375 1
-DEAL::5376 1
-DEAL::5377 1
-DEAL::5378 1
-DEAL::5379 1
-DEAL::5380 1
-DEAL::5381 1
-DEAL::5382 1
-DEAL::5383 1
-DEAL::5384 1
-DEAL::5385 1
-DEAL::5386 1
-DEAL::5387 1
-DEAL::5388 1
-DEAL::5389 1
+DEAL::5045 1
+DEAL::5046 1
+DEAL::5047 1
+DEAL::5048 1
+DEAL::5049 1
+DEAL::5050 1
+DEAL::5051 1
+DEAL::5052 1
+DEAL::5053 1
+DEAL::5054 1
+DEAL::5055 1
+DEAL::5056 1
+DEAL::5057 1
+DEAL::5058 1
+DEAL::5059 1
+DEAL::5060 1
+DEAL::5061 1
+DEAL::5062 1
+DEAL::5063 1
+DEAL::5064 1
+DEAL::5065 1
+DEAL::5066 1
+DEAL::5067 1
+DEAL::5068 1
+DEAL::5069 1
+DEAL::5070 1
+DEAL::5071 1
+DEAL::5072 1
+DEAL::5073 1
+DEAL::5074 1
+DEAL::5075 1
+DEAL::5076 1
+DEAL::5077 1
+DEAL::5078 1
+DEAL::5079 1
+DEAL::5080 1
+DEAL::5081 1
+DEAL::5082 1
+DEAL::5083 1
+DEAL::5084 1
+DEAL::5085 1
+DEAL::5086 1
+DEAL::5087 1
+DEAL::5088 1
+DEAL::5089 1
+DEAL::5090 1
+DEAL::5091 1
+DEAL::5092 1
+DEAL::5093 1
+DEAL::5094 1
+DEAL::5095 0
+DEAL::5096 0
+DEAL::5097 0
+DEAL::5098 0
+DEAL::5099 0
+DEAL::5100 0
+DEAL::5101 0
+DEAL::5102 0
+DEAL::5103 0
+DEAL::5104 0
+DEAL::5105 0
+DEAL::5106 0
+DEAL::5107 0
+DEAL::5108 0
+DEAL::5109 0
+DEAL::5110 0
+DEAL::5111 0
+DEAL::5112 0
+DEAL::5113 0
+DEAL::5114 0
+DEAL::5115 0
+DEAL::5116 0
+DEAL::5117 0
+DEAL::5118 0
+DEAL::5119 0
+DEAL::5120 0
+DEAL::5121 0
+DEAL::5122 0
+DEAL::5123 0
+DEAL::5124 0
+DEAL::5125 0
+DEAL::5126 0
+DEAL::5127 0
+DEAL::5128 0
+DEAL::5129 0
+DEAL::5130 0
+DEAL::5131 0
+DEAL::5132 0
+DEAL::5133 0
+DEAL::5134 0
+DEAL::5135 0
+DEAL::5136 0
+DEAL::5137 0
+DEAL::5138 0
+DEAL::5139 0
+DEAL::5140 0
+DEAL::5141 0
+DEAL::5142 0
+DEAL::5143 0
+DEAL::5144 0
+DEAL::5145 0
+DEAL::5146 0
+DEAL::5147 0
+DEAL::5148 0
+DEAL::5149 0
+DEAL::5150 0
+DEAL::5151 0
+DEAL::5152 0
+DEAL::5153 0
+DEAL::5154 0
+DEAL::5155 0
+DEAL::5156 0
+DEAL::5157 0
+DEAL::5158 0
+DEAL::5159 0
+DEAL::5160 0
+DEAL::5161 0
+DEAL::5162 0
+DEAL::5163 0
+DEAL::5164 0
+DEAL::5165 0
+DEAL::5166 0
+DEAL::5167 0
+DEAL::5168 0
+DEAL::5169 0
+DEAL::5170 0
+DEAL::5171 0
+DEAL::5172 0
+DEAL::5173 0
+DEAL::5174 0
+DEAL::5175 0
+DEAL::5176 0
+DEAL::5177 0
+DEAL::5178 0
+DEAL::5179 0
+DEAL::5180 0
+DEAL::5181 0
+DEAL::5182 0
+DEAL::5183 0
+DEAL::5184 0
+DEAL::5185 0
+DEAL::5186 0
+DEAL::5187 0
+DEAL::5188 0
+DEAL::5189 0
+DEAL::5190 0
+DEAL::5191 0
+DEAL::5192 0
+DEAL::5193 0
+DEAL::5194 3
+DEAL::5195 3
+DEAL::5196 3
+DEAL::5197 3
+DEAL::5198 3
+DEAL::5199 3
+DEAL::5200 3
+DEAL::5201 3
+DEAL::5202 3
+DEAL::5203 3
+DEAL::5204 3
+DEAL::5205 3
+DEAL::5206 3
+DEAL::5207 3
+DEAL::5208 3
+DEAL::5209 3
+DEAL::5210 3
+DEAL::5211 3
+DEAL::5212 3
+DEAL::5213 3
+DEAL::5214 3
+DEAL::5215 3
+DEAL::5216 3
+DEAL::5217 3
+DEAL::5218 3
+DEAL::5219 3
+DEAL::5220 3
+DEAL::5221 3
+DEAL::5222 3
+DEAL::5223 3
+DEAL::5224 3
+DEAL::5225 3
+DEAL::5226 3
+DEAL::5227 3
+DEAL::5228 3
+DEAL::5229 3
+DEAL::5230 3
+DEAL::5231 3
+DEAL::5232 3
+DEAL::5233 3
+DEAL::5234 3
+DEAL::5235 3
+DEAL::5236 3
+DEAL::5237 3
+DEAL::5238 3
+DEAL::5239 3
+DEAL::5240 3
+DEAL::5241 3
+DEAL::5242 3
+DEAL::5243 3
+DEAL::5244 3
+DEAL::5245 3
+DEAL::5246 3
+DEAL::5247 3
+DEAL::5248 3
+DEAL::5249 3
+DEAL::5250 3
+DEAL::5251 3
+DEAL::5252 3
+DEAL::5253 3
+DEAL::5254 3
+DEAL::5255 3
+DEAL::5256 3
+DEAL::5257 3
+DEAL::5258 3
+DEAL::5259 3
+DEAL::5260 3
+DEAL::5261 3
+DEAL::5262 3
+DEAL::5263 3
+DEAL::5264 3
+DEAL::5265 3
+DEAL::5266 3
+DEAL::5267 3
+DEAL::5268 3
+DEAL::5269 3
+DEAL::5270 3
+DEAL::5271 3
+DEAL::5272 3
+DEAL::5273 3
+DEAL::5274 3
+DEAL::5275 3
+DEAL::5276 3
+DEAL::5277 3
+DEAL::5278 3
+DEAL::5279 3
+DEAL::5280 3
+DEAL::5281 3
+DEAL::5282 3
+DEAL::5283 3
+DEAL::5284 3
+DEAL::5285 3
+DEAL::5286 3
+DEAL::5287 3
+DEAL::5288 3
+DEAL::5289 3
+DEAL::5290 3
+DEAL::5291 3
+DEAL::5292 3
+DEAL::5293 3
+DEAL::5294 3
+DEAL::5295 3
+DEAL::5296 3
+DEAL::5297 3
+DEAL::5298 3
+DEAL::5299 3
+DEAL::5300 3
+DEAL::5301 3
+DEAL::5302 3
+DEAL::5303 3
+DEAL::5304 3
+DEAL::5305 3
+DEAL::5306 3
+DEAL::5307 3
+DEAL::5308 3
+DEAL::5309 3
+DEAL::5310 3
+DEAL::5311 3
+DEAL::5312 3
+DEAL::5313 3
+DEAL::5314 3
+DEAL::5315 3
+DEAL::5316 3
+DEAL::5317 3
+DEAL::5318 3
+DEAL::5319 3
+DEAL::5320 3
+DEAL::5321 3
+DEAL::5322 3
+DEAL::5323 3
+DEAL::5324 3
+DEAL::5325 3
+DEAL::5326 3
+DEAL::5327 3
+DEAL::5328 3
+DEAL::5329 3
+DEAL::5330 3
+DEAL::5331 3
+DEAL::5332 3
+DEAL::5333 3
+DEAL::5334 3
+DEAL::5335 3
+DEAL::5336 3
+DEAL::5337 3
+DEAL::5338 3
+DEAL::5339 3
+DEAL::5340 3
+DEAL::5341 3
+DEAL::5342 3
+DEAL::5343 3
+DEAL::5344 3
+DEAL::5345 3
+DEAL::5346 3
+DEAL::5347 3
+DEAL::5348 3
+DEAL::5349 3
+DEAL::5350 3
+DEAL::5351 3
+DEAL::5352 3
+DEAL::5353 3
+DEAL::5354 3
+DEAL::5355 3
+DEAL::5356 3
+DEAL::5357 3
+DEAL::5358 3
+DEAL::5359 3
+DEAL::5360 3
+DEAL::5361 3
+DEAL::5362 3
+DEAL::5363 3
+DEAL::5364 3
+DEAL::5365 3
+DEAL::5366 3
+DEAL::5367 3
+DEAL::5368 3
+DEAL::5369 3
+DEAL::5370 3
+DEAL::5371 3
+DEAL::5372 3
+DEAL::5373 3
+DEAL::5374 3
+DEAL::5375 3
+DEAL::5376 3
+DEAL::5377 3
+DEAL::5378 3
+DEAL::5379 3
+DEAL::5380 3
+DEAL::5381 3
+DEAL::5382 3
+DEAL::5383 3
+DEAL::5384 3
+DEAL::5385 3
+DEAL::5386 3
+DEAL::5387 3
+DEAL::5388 3
+DEAL::5389 3
DEAL::5390 2
DEAL::5391 2
DEAL::5392 2
DEAL::5395 2
DEAL::5396 2
DEAL::5397 2
-DEAL::5398 2
+DEAL::5398 1
DEAL::5399 2
DEAL::5400 2
DEAL::5401 2
DEAL::5403 2
DEAL::5404 2
DEAL::5405 2
-DEAL::5406 2
+DEAL::5406 1
DEAL::5407 2
-DEAL::5408 2
+DEAL::5408 1
DEAL::5409 2
-DEAL::5410 2
+DEAL::5410 1
DEAL::5411 2
DEAL::5412 2
DEAL::5413 2
DEAL::5414 2
DEAL::5415 2
-DEAL::5416 2
-DEAL::5417 2
-DEAL::5418 2
-DEAL::5419 2
-DEAL::5420 2
-DEAL::5421 2
-DEAL::5422 2
-DEAL::5423 2
-DEAL::5424 2
-DEAL::5425 2
-DEAL::5426 2
-DEAL::5427 2
-DEAL::5428 2
-DEAL::5429 2
-DEAL::5430 2
-DEAL::5431 2
-DEAL::5432 2
+DEAL::5416 1
+DEAL::5417 1
+DEAL::5418 1
+DEAL::5419 1
+DEAL::5420 1
+DEAL::5421 1
+DEAL::5422 1
+DEAL::5423 1
+DEAL::5424 1
+DEAL::5425 1
+DEAL::5426 1
+DEAL::5427 1
+DEAL::5428 1
+DEAL::5429 1
+DEAL::5430 1
+DEAL::5431 1
+DEAL::5432 1
DEAL::5433 2
DEAL::5434 2
DEAL::5435 2
DEAL::5436 2
-DEAL::5437 2
+DEAL::5437 1
DEAL::5438 2
DEAL::5439 2
-DEAL::5440 2
+DEAL::5440 1
DEAL::5441 2
DEAL::5442 2
-DEAL::5443 2
+DEAL::5443 1
DEAL::5444 2
DEAL::5445 2
DEAL::5446 2
DEAL::5447 2
DEAL::5448 2
DEAL::5449 2
-DEAL::5450 2
-DEAL::5451 2
-DEAL::5452 2
-DEAL::5453 2
-DEAL::5454 2
-DEAL::5455 2
-DEAL::5456 2
-DEAL::5457 2
-DEAL::5458 2
-DEAL::5459 2
-DEAL::5460 2
+DEAL::5450 1
+DEAL::5451 1
+DEAL::5452 1
+DEAL::5453 1
+DEAL::5454 1
+DEAL::5455 1
+DEAL::5456 1
+DEAL::5457 1
+DEAL::5458 1
+DEAL::5459 1
+DEAL::5460 1
DEAL::5461 2
DEAL::5462 2
DEAL::5463 2
DEAL::5468 2
DEAL::5469 2
DEAL::5470 2
-DEAL::5471 2
+DEAL::5471 1
DEAL::5472 2
DEAL::5473 2
DEAL::5474 2
DEAL::5475 2
DEAL::5476 2
DEAL::5477 2
-DEAL::5478 2
+DEAL::5478 1
DEAL::5479 2
-DEAL::5480 2
-DEAL::5481 2
-DEAL::5482 2
-DEAL::5483 2
-DEAL::5484 2
-DEAL::5485 2
-DEAL::5486 2
+DEAL::5480 1
+DEAL::5481 1
+DEAL::5482 1
+DEAL::5483 1
+DEAL::5484 1
+DEAL::5485 1
+DEAL::5486 1
DEAL::5487 2
DEAL::5488 2
DEAL::5489 2
DEAL::5490 2
DEAL::5491 2
-DEAL::5492 2
+DEAL::5492 1
DEAL::5493 2
DEAL::5494 2
DEAL::5495 2
DEAL::5496 2
DEAL::5497 2
DEAL::5498 2
-DEAL::5499 2
-DEAL::5500 2
-DEAL::5501 2
-DEAL::5502 2
-DEAL::5503 2
-DEAL::5504 4
-DEAL::5505 4
-DEAL::5506 4
-DEAL::5507 4
-DEAL::5508 4
-DEAL::5509 4
-DEAL::5510 4
-DEAL::5511 4
-DEAL::5512 4
-DEAL::5513 4
-DEAL::5514 4
-DEAL::5515 4
-DEAL::5516 4
-DEAL::5517 4
-DEAL::5518 4
-DEAL::5519 4
-DEAL::5520 4
-DEAL::5521 4
-DEAL::5522 4
-DEAL::5523 4
-DEAL::5524 4
-DEAL::5525 4
-DEAL::5526 4
-DEAL::5527 4
-DEAL::5528 4
-DEAL::5529 4
-DEAL::5530 4
-DEAL::5531 4
-DEAL::5532 4
-DEAL::5533 4
-DEAL::5534 4
-DEAL::5535 4
-DEAL::5536 4
-DEAL::5537 4
-DEAL::5538 4
-DEAL::5539 4
-DEAL::5540 0
-DEAL::5541 4
-DEAL::5542 4
-DEAL::5543 4
-DEAL::5544 4
-DEAL::5545 4
-DEAL::5546 4
-DEAL::5547 4
-DEAL::5548 4
-DEAL::5549 4
-DEAL::5550 4
-DEAL::5551 4
-DEAL::5552 4
-DEAL::5553 4
-DEAL::5554 4
-DEAL::5555 4
-DEAL::5556 4
-DEAL::5557 4
-DEAL::5558 4
-DEAL::5559 4
-DEAL::5560 4
-DEAL::5561 4
-DEAL::5562 4
-DEAL::5563 4
-DEAL::5564 4
-DEAL::5565 4
-DEAL::5566 4
-DEAL::5567 4
-DEAL::5568 4
-DEAL::5569 4
-DEAL::5570 4
-DEAL::5571 4
-DEAL::5572 4
-DEAL::5573 4
-DEAL::5574 4
-DEAL::5575 4
-DEAL::5576 4
-DEAL::5577 4
-DEAL::5578 4
-DEAL::5579 4
-DEAL::5580 4
-DEAL::5581 4
-DEAL::5582 4
-DEAL::5583 4
-DEAL::5584 4
-DEAL::5585 0
-DEAL::5586 4
-DEAL::5587 4
-DEAL::5588 4
-DEAL::5589 4
-DEAL::5590 0
-DEAL::5591 4
-DEAL::5592 4
-DEAL::5593 4
-DEAL::5594 0
-DEAL::5595 0
-DEAL::5596 4
-DEAL::5597 4
-DEAL::5598 4
-DEAL::5599 4
+DEAL::5499 1
+DEAL::5500 1
+DEAL::5501 1
+DEAL::5502 1
+DEAL::5503 1
+DEAL::5504 2
+DEAL::5505 2
+DEAL::5506 2
+DEAL::5507 2
+DEAL::5508 2
+DEAL::5509 2
+DEAL::5510 2
+DEAL::5511 2
+DEAL::5512 2
+DEAL::5513 2
+DEAL::5514 2
+DEAL::5515 2
+DEAL::5516 2
+DEAL::5517 2
+DEAL::5518 2
+DEAL::5519 2
+DEAL::5520 2
+DEAL::5521 2
+DEAL::5522 2
+DEAL::5523 2
+DEAL::5524 2
+DEAL::5525 2
+DEAL::5526 2
+DEAL::5527 2
+DEAL::5528 2
+DEAL::5529 2
+DEAL::5530 2
+DEAL::5531 2
+DEAL::5532 2
+DEAL::5533 2
+DEAL::5534 2
+DEAL::5535 2
+DEAL::5536 2
+DEAL::5537 2
+DEAL::5538 2
+DEAL::5539 3
+DEAL::5540 3
+DEAL::5541 2
+DEAL::5542 2
+DEAL::5543 2
+DEAL::5544 3
+DEAL::5545 3
+DEAL::5546 2
+DEAL::5547 2
+DEAL::5548 2
+DEAL::5549 2
+DEAL::5550 2
+DEAL::5551 3
+DEAL::5552 2
+DEAL::5553 2
+DEAL::5554 2
+DEAL::5555 2
+DEAL::5556 2
+DEAL::5557 2
+DEAL::5558 3
+DEAL::5559 2
+DEAL::5560 2
+DEAL::5561 2
+DEAL::5562 2
+DEAL::5563 2
+DEAL::5564 2
+DEAL::5565 2
+DEAL::5566 2
+DEAL::5567 2
+DEAL::5568 2
+DEAL::5569 2
+DEAL::5570 2
+DEAL::5571 2
+DEAL::5572 2
+DEAL::5573 2
+DEAL::5574 2
+DEAL::5575 2
+DEAL::5576 2
+DEAL::5577 2
+DEAL::5578 2
+DEAL::5579 2
+DEAL::5580 2
+DEAL::5581 2
+DEAL::5582 2
+DEAL::5583 2
+DEAL::5584 2
+DEAL::5585 3
+DEAL::5586 2
+DEAL::5587 2
+DEAL::5588 2
+DEAL::5589 2
+DEAL::5590 3
+DEAL::5591 2
+DEAL::5592 2
+DEAL::5593 2
+DEAL::5594 3
+DEAL::5595 3
+DEAL::5596 2
+DEAL::5597 2
+DEAL::5598 2
+DEAL::5599 2
DEAL::5600 2
DEAL::5601 2
DEAL::5602 2
DEAL::5655 2
DEAL::5656 2
DEAL::5657 2
-DEAL::5658 2
+DEAL::5658 1
DEAL::5659 2
DEAL::5660 2
DEAL::5661 2
DEAL::5671 2
DEAL::5672 2
DEAL::5673 2
-DEAL::5674 2
+DEAL::5674 1
DEAL::5675 2
DEAL::5676 2
DEAL::5677 2
DEAL::5678 2
-DEAL::5679 2
+DEAL::5679 1
DEAL::5680 2
DEAL::5681 2
DEAL::5682 2
-DEAL::5683 2
+DEAL::5683 1
DEAL::5684 2
DEAL::5685 2
DEAL::5686 2
DEAL::5687 2
DEAL::5688 2
-DEAL::5689 2
+DEAL::5689 1
DEAL::5690 2
-DEAL::5691 2
+DEAL::5691 1
DEAL::5692 2
DEAL::5693 2
DEAL::5694 2
DEAL::5695 2
-DEAL::5696 2
-DEAL::5697 2
-DEAL::5698 2
-DEAL::5699 2
-DEAL::5700 2
-DEAL::5701 2
-DEAL::5702 2
-DEAL::5703 2
+DEAL::5696 1
+DEAL::5697 1
+DEAL::5698 1
+DEAL::5699 1
+DEAL::5700 1
+DEAL::5701 1
+DEAL::5702 1
+DEAL::5703 1
DEAL::5704 2
-DEAL::5705 2
+DEAL::5705 1
DEAL::5706 2
DEAL::5707 2
DEAL::5708 2
DEAL::5709 2
-DEAL::5710 2
+DEAL::5710 1
DEAL::5711 2
-DEAL::5712 2
+DEAL::5712 1
DEAL::5713 2
DEAL::5714 2
DEAL::5715 2
-DEAL::5716 2
-DEAL::5717 2
-DEAL::5718 2
-DEAL::5719 2
-DEAL::5720 2
+DEAL::5716 1
+DEAL::5717 1
+DEAL::5718 1
+DEAL::5719 1
+DEAL::5720 1
DEAL::5721 2
DEAL::5722 2
DEAL::5723 2
-DEAL::5724 2
+DEAL::5724 1
DEAL::5725 2
DEAL::5726 2
DEAL::5727 2
-DEAL::5728 2
+DEAL::5728 1
DEAL::5729 2
-DEAL::5730 2
+DEAL::5730 1
DEAL::5731 2
-DEAL::5732 2
+DEAL::5732 1
DEAL::5733 2
DEAL::5734 2
DEAL::5735 2
DEAL::5736 2
-DEAL::5737 2
-DEAL::5738 2
-DEAL::5739 2
-DEAL::5740 2
-DEAL::5741 2
-DEAL::5742 2
+DEAL::5737 1
+DEAL::5738 1
+DEAL::5739 1
+DEAL::5740 1
+DEAL::5741 1
+DEAL::5742 1
DEAL::5743 2
DEAL::5744 2
DEAL::5745 2
DEAL::5746 2
DEAL::5747 2
-DEAL::5748 2
+DEAL::5748 1
DEAL::5749 2
-DEAL::5750 2
+DEAL::5750 1
DEAL::5751 2
DEAL::5752 2
DEAL::5753 2
-DEAL::5754 2
-DEAL::5755 2
-DEAL::5756 2
-DEAL::5757 2
+DEAL::5754 1
+DEAL::5755 1
+DEAL::5756 1
+DEAL::5757 1
DEAL::5758 2
-DEAL::5759 2
+DEAL::5759 1
DEAL::5760 2
-DEAL::5761 2
+DEAL::5761 1
DEAL::5762 2
DEAL::5763 2
DEAL::5764 2
DEAL::5765 2
-DEAL::5766 2
+DEAL::5766 1
DEAL::5767 2
DEAL::5768 2
DEAL::5769 2
DEAL::5770 2
-DEAL::5771 2
+DEAL::5771 1
DEAL::5772 2
DEAL::5773 2
DEAL::5774 2
DEAL::5775 2
-DEAL::5776 2
-DEAL::5777 2
-DEAL::5778 2
-DEAL::5779 2
-DEAL::5780 2
-DEAL::5781 2
-DEAL::5782 2
-DEAL::5783 2
-DEAL::5784 2
-DEAL::5785 2
-DEAL::5786 2
-DEAL::5787 2
-DEAL::5788 2
+DEAL::5776 1
+DEAL::5777 1
+DEAL::5778 1
+DEAL::5779 1
+DEAL::5780 1
+DEAL::5781 1
+DEAL::5782 1
+DEAL::5783 1
+DEAL::5784 1
+DEAL::5785 1
+DEAL::5786 1
+DEAL::5787 1
+DEAL::5788 1
DEAL::5789 2
-DEAL::5790 2
+DEAL::5790 1
DEAL::5791 2
DEAL::5792 2
DEAL::5793 2
DEAL::5794 2
-DEAL::5795 2
+DEAL::5795 1
DEAL::5796 2
DEAL::5797 2
DEAL::5798 2
DEAL::5799 2
-DEAL::5800 2
+DEAL::5800 1
DEAL::5801 2
DEAL::5802 2
DEAL::5803 2
DEAL::5804 2
-DEAL::5805 2
-DEAL::5806 2
-DEAL::5807 2
-DEAL::5808 2
-DEAL::5809 2
-DEAL::5810 2
-DEAL::5811 2
-DEAL::5812 2
-DEAL::5813 2
-DEAL::5814 2
-DEAL::5815 2
+DEAL::5805 1
+DEAL::5806 1
+DEAL::5807 1
+DEAL::5808 1
+DEAL::5809 1
+DEAL::5810 1
+DEAL::5811 1
+DEAL::5812 1
+DEAL::5813 1
+DEAL::5814 1
+DEAL::5815 1
DEAL::5816 2
-DEAL::5817 2
+DEAL::5817 1
DEAL::5818 2
-DEAL::5819 2
+DEAL::5819 1
DEAL::5820 2
DEAL::5821 2
-DEAL::5822 2
+DEAL::5822 1
DEAL::5823 2
DEAL::5824 2
DEAL::5825 2
DEAL::5826 2
DEAL::5827 2
-DEAL::5828 2
-DEAL::5829 2
-DEAL::5830 2
-DEAL::5831 2
-DEAL::5832 2
-DEAL::5833 2
-DEAL::5834 2
-DEAL::5835 2
-DEAL::5836 2
+DEAL::5828 1
+DEAL::5829 1
+DEAL::5830 1
+DEAL::5831 1
+DEAL::5832 1
+DEAL::5833 1
+DEAL::5834 1
+DEAL::5835 1
+DEAL::5836 1
DEAL::5837 2
-DEAL::5838 2
+DEAL::5838 1
DEAL::5839 2
DEAL::5840 2
-DEAL::5841 2
+DEAL::5841 1
DEAL::5842 2
DEAL::5843 2
DEAL::5844 2
DEAL::5845 2
DEAL::5846 2
-DEAL::5847 2
-DEAL::5848 2
-DEAL::5849 2
-DEAL::5850 2
-DEAL::5851 2
-DEAL::5852 2
-DEAL::5853 2
-DEAL::5854 3
-DEAL::5855 3
-DEAL::5856 3
-DEAL::5857 3
-DEAL::5858 3
-DEAL::5859 3
-DEAL::5860 3
-DEAL::5861 3
-DEAL::5862 3
-DEAL::5863 3
-DEAL::5864 3
-DEAL::5865 3
-DEAL::5866 3
-DEAL::5867 3
-DEAL::5868 3
-DEAL::5869 3
-DEAL::5870 3
-DEAL::5871 3
-DEAL::5872 3
-DEAL::5873 3
-DEAL::5874 3
-DEAL::5875 3
-DEAL::5876 3
-DEAL::5877 3
-DEAL::5878 3
-DEAL::5879 3
-DEAL::5880 3
-DEAL::5881 3
-DEAL::5882 3
-DEAL::5883 3
-DEAL::5884 3
-DEAL::5885 3
-DEAL::5886 3
-DEAL::5887 3
-DEAL::5888 3
-DEAL::5889 3
-DEAL::5890 3
-DEAL::5891 3
-DEAL::5892 3
-DEAL::5893 3
-DEAL::5894 3
-DEAL::5895 3
-DEAL::5896 3
-DEAL::5897 3
-DEAL::5898 3
-DEAL::5899 3
-DEAL::5900 3
-DEAL::5901 3
-DEAL::5902 3
-DEAL::5903 3
-DEAL::5904 3
-DEAL::5905 3
-DEAL::5906 3
-DEAL::5907 3
-DEAL::5908 3
-DEAL::5909 3
-DEAL::5910 3
-DEAL::5911 3
-DEAL::5912 3
-DEAL::5913 3
-DEAL::5914 3
-DEAL::5915 3
-DEAL::5916 3
-DEAL::5917 3
-DEAL::5918 3
-DEAL::5919 3
-DEAL::5920 3
-DEAL::5921 3
-DEAL::5922 3
-DEAL::5923 3
-DEAL::5924 3
-DEAL::5925 3
-DEAL::5926 3
-DEAL::5927 3
-DEAL::5928 3
-DEAL::5929 3
-DEAL::5930 3
-DEAL::5931 3
-DEAL::5932 3
-DEAL::5933 3
-DEAL::5934 3
-DEAL::5935 3
-DEAL::5936 3
-DEAL::5937 3
-DEAL::5938 3
-DEAL::5939 3
-DEAL::5940 3
-DEAL::5941 3
-DEAL::5942 3
-DEAL::5943 3
-DEAL::5944 3
-DEAL::5945 3
-DEAL::5946 3
-DEAL::5947 3
-DEAL::5948 3
-DEAL::5949 3
-DEAL::5950 3
-DEAL::5951 3
-DEAL::5952 3
-DEAL::5953 3
-DEAL::5954 3
-DEAL::5955 3
-DEAL::5956 3
-DEAL::5957 3
-DEAL::5958 3
-DEAL::5959 3
-DEAL::5960 3
-DEAL::5961 3
-DEAL::5962 3
-DEAL::5963 3
-DEAL::5964 3
-DEAL::5965 3
-DEAL::5966 3
-DEAL::5967 3
-DEAL::5968 3
-DEAL::5969 3
-DEAL::5970 3
-DEAL::5971 3
-DEAL::5972 3
-DEAL::5973 3
-DEAL::5974 3
-DEAL::5975 3
-DEAL::5976 3
-DEAL::5977 3
-DEAL::5978 3
-DEAL::5979 3
-DEAL::5980 3
-DEAL::5981 3
-DEAL::5982 3
-DEAL::5983 3
-DEAL::5984 3
-DEAL::5985 3
-DEAL::5986 3
-DEAL::5987 3
-DEAL::5988 3
-DEAL::5989 3
-DEAL::5990 3
-DEAL::5991 3
-DEAL::5992 3
-DEAL::5993 3
-DEAL::5994 3
-DEAL::5995 3
-DEAL::5996 3
-DEAL::5997 3
-DEAL::5998 3
-DEAL::5999 3
-DEAL::6000 3
-DEAL::6001 3
-DEAL::6002 3
-DEAL::6003 3
-DEAL::6004 3
-DEAL::6005 3
-DEAL::6006 3
-DEAL::6007 3
-DEAL::6008 3
-DEAL::6009 3
-DEAL::6010 3
-DEAL::6011 3
-DEAL::6012 3
-DEAL::6013 3
-DEAL::6014 3
-DEAL::6015 3
-DEAL::6016 3
-DEAL::6017 3
-DEAL::6018 3
-DEAL::6019 3
-DEAL::6020 3
-DEAL::6021 3
-DEAL::6022 3
-DEAL::6023 3
-DEAL::6024 3
-DEAL::6025 3
-DEAL::6026 3
-DEAL::6027 3
-DEAL::6028 3
-DEAL::6029 3
-DEAL::6030 3
-DEAL::6031 3
-DEAL::6032 3
-DEAL::6033 3
-DEAL::6034 3
-DEAL::6035 3
-DEAL::6036 3
-DEAL::6037 3
-DEAL::6038 3
-DEAL::6039 3
-DEAL::6040 3
-DEAL::6041 3
-DEAL::6042 3
-DEAL::6043 3
-DEAL::6044 3
-DEAL::6045 3
-DEAL::6046 3
-DEAL::6047 3
-DEAL::6048 3
-DEAL::6049 3
-DEAL::6050 3
-DEAL::6051 3
-DEAL::6052 3
-DEAL::6053 3
-DEAL::6054 3
-DEAL::6055 3
-DEAL::6056 3
-DEAL::6057 3
-DEAL::6058 3
-DEAL::6059 3
-DEAL::6060 3
-DEAL::6061 3
-DEAL::6062 3
-DEAL::6063 3
-DEAL::6064 3
-DEAL::6065 3
-DEAL::6066 3
-DEAL::6067 3
-DEAL::6068 3
-DEAL::6069 3
-DEAL::6070 3
-DEAL::6071 3
-DEAL::6072 3
-DEAL::6073 3
-DEAL::6074 3
-DEAL::6075 3
-DEAL::6076 3
-DEAL::6077 3
-DEAL::6078 3
-DEAL::6079 3
-DEAL::6080 3
-DEAL::6081 3
-DEAL::6082 3
-DEAL::6083 3
-DEAL::6084 3
-DEAL::6085 3
-DEAL::6086 3
-DEAL::6087 3
-DEAL::6088 3
-DEAL::6089 3
-DEAL::6090 3
-DEAL::6091 3
-DEAL::6092 3
-DEAL::6093 3
-DEAL::6094 3
-DEAL::6095 3
-DEAL::6096 3
-DEAL::6097 3
-DEAL::6098 3
-DEAL::6099 3
-DEAL::6100 3
-DEAL::6101 3
-DEAL::6102 3
-DEAL::6103 3
-DEAL::6104 3
-DEAL::6105 3
-DEAL::6106 3
-DEAL::6107 3
-DEAL::6108 3
-DEAL::6109 3
-DEAL::6110 3
-DEAL::6111 3
-DEAL::6112 3
-DEAL::6113 3
-DEAL::6114 3
-DEAL::6115 3
-DEAL::6116 3
-DEAL::6117 3
-DEAL::6118 3
-DEAL::6119 3
-DEAL::6120 3
-DEAL::6121 3
-DEAL::6122 3
-DEAL::6123 3
-DEAL::6124 3
-DEAL::6125 3
-DEAL::6126 3
-DEAL::6127 3
-DEAL::6128 3
-DEAL::6129 3
-DEAL::6130 3
-DEAL::6131 3
-DEAL::6132 3
-DEAL::6133 3
-DEAL::6134 3
-DEAL::6135 3
-DEAL::6136 3
-DEAL::6137 3
-DEAL::6138 3
-DEAL::6139 3
-DEAL::6140 3
-DEAL::6141 3
-DEAL::6142 3
-DEAL::6143 3
-DEAL::6144 3
-DEAL::6145 3
-DEAL::6146 3
-DEAL::6147 3
-DEAL::6148 3
-DEAL::6149 3
-DEAL::6150 3
-DEAL::6151 3
-DEAL::6152 3
-DEAL::6153 3
-DEAL::6154 3
-DEAL::6155 3
-DEAL::6156 3
-DEAL::6157 3
-DEAL::6158 3
-DEAL::6159 3
-DEAL::6160 3
-DEAL::6161 3
-DEAL::6162 3
-DEAL::6163 3
-DEAL::6164 3
-DEAL::6165 3
-DEAL::6166 3
-DEAL::6167 3
-DEAL::6168 3
-DEAL::6169 3
-DEAL::6170 3
-DEAL::6171 3
-DEAL::6172 3
-DEAL::6173 3
-DEAL::6174 3
-DEAL::6175 3
-DEAL::6176 3
-DEAL::6177 3
-DEAL::6178 3
-DEAL::6179 3
-DEAL::6180 3
-DEAL::6181 3
-DEAL::6182 3
-DEAL::6183 3
-DEAL::6184 3
-DEAL::6185 3
-DEAL::6186 3
-DEAL::6187 3
-DEAL::6188 3
-DEAL::6189 3
-DEAL::6190 3
-DEAL::6191 3
-DEAL::6192 3
-DEAL::6193 3
-DEAL::6194 3
-DEAL::6195 3
-DEAL::6196 3
-DEAL::6197 3
-DEAL::6198 3
-DEAL::6199 3
-DEAL::6200 3
-DEAL::6201 3
-DEAL::6202 3
-DEAL::6203 3
-DEAL::6204 3
-DEAL::6205 3
-DEAL::6206 3
-DEAL::6207 3
-DEAL::6208 3
-DEAL::6209 3
-DEAL::6210 3
-DEAL::6211 3
-DEAL::6212 3
-DEAL::6213 3
-DEAL::6214 3
-DEAL::6215 3
-DEAL::6216 3
-DEAL::6217 3
-DEAL::6218 3
-DEAL::6219 3
-DEAL::6220 3
-DEAL::6221 3
-DEAL::6222 3
-DEAL::6223 3
-DEAL::6224 3
-DEAL::6225 3
-DEAL::6226 3
-DEAL::6227 3
-DEAL::6228 3
-DEAL::6229 3
-DEAL::6230 3
-DEAL::6231 3
-DEAL::6232 3
-DEAL::6233 3
-DEAL::6234 3
-DEAL::6235 3
-DEAL::6236 3
-DEAL::6237 3
-DEAL::6238 3
-DEAL::6239 3
-DEAL::6240 3
-DEAL::6241 3
-DEAL::6242 3
-DEAL::6243 3
-DEAL::6244 3
-DEAL::6245 3
-DEAL::6246 3
-DEAL::6247 3
-DEAL::6248 3
-DEAL::6249 3
-DEAL::6250 3
-DEAL::6251 3
-DEAL::6252 3
-DEAL::6253 3
-DEAL::6254 3
-DEAL::6255 3
-DEAL::6256 3
-DEAL::6257 3
-DEAL::6258 3
-DEAL::6259 3
-DEAL::6260 3
-DEAL::6261 3
-DEAL::6262 3
-DEAL::6263 3
-DEAL::6264 3
-DEAL::6265 3
-DEAL::6266 3
-DEAL::6267 3
-DEAL::6268 3
-DEAL::6269 3
-DEAL::6270 3
-DEAL::6271 3
-DEAL::6272 3
-DEAL::6273 3
-DEAL::6274 3
-DEAL::6275 3
-DEAL::6276 3
-DEAL::6277 3
-DEAL::6278 3
-DEAL::6279 3
-DEAL::6280 3
-DEAL::6281 3
-DEAL::6282 3
-DEAL::6283 3
-DEAL::6284 3
-DEAL::6285 3
-DEAL::6286 3
-DEAL::6287 3
-DEAL::6288 3
-DEAL::6289 3
-DEAL::6290 3
-DEAL::6291 3
-DEAL::6292 3
-DEAL::6293 3
-DEAL::6294 3
-DEAL::6295 3
-DEAL::6296 3
-DEAL::6297 3
-DEAL::6298 3
-DEAL::6299 3
-DEAL::6300 3
-DEAL::6301 3
-DEAL::6302 3
-DEAL::6303 3
-DEAL::6304 3
-DEAL::6305 3
-DEAL::6306 3
-DEAL::6307 3
-DEAL::6308 3
-DEAL::6309 3
-DEAL::6310 3
-DEAL::6311 3
-DEAL::6312 3
-DEAL::6313 3
-DEAL::6314 3
-DEAL::6315 3
-DEAL::6316 3
-DEAL::6317 3
-DEAL::6318 3
-DEAL::6319 3
-DEAL::6320 3
-DEAL::6321 3
-DEAL::6322 3
-DEAL::6323 3
-DEAL::6324 3
-DEAL::6325 3
-DEAL::6326 3
-DEAL::6327 3
-DEAL::6328 3
-DEAL::6329 3
-DEAL::6330 3
-DEAL::6331 3
-DEAL::6332 3
-DEAL::6333 3
-DEAL::6334 3
-DEAL::6335 3
-DEAL::6336 3
-DEAL::6337 3
-DEAL::6338 3
-DEAL::6339 3
-DEAL::6340 3
-DEAL::6341 3
-DEAL::6342 3
-DEAL::6343 3
-DEAL::6344 3
-DEAL::6345 3
-DEAL::6346 3
-DEAL::6347 3
-DEAL::6348 3
-DEAL::6349 3
-DEAL::6350 3
-DEAL::6351 3
-DEAL::6352 3
-DEAL::6353 3
-DEAL::6354 3
-DEAL::6355 3
-DEAL::6356 3
-DEAL::6357 3
-DEAL::6358 3
-DEAL::6359 3
-DEAL::6360 3
-DEAL::6361 3
-DEAL::6362 3
-DEAL::6363 3
-DEAL::6364 3
-DEAL::6365 3
-DEAL::6366 3
-DEAL::6367 3
-DEAL::6368 3
-DEAL::6369 3
-DEAL::6370 3
-DEAL::6371 3
-DEAL::6372 3
-DEAL::6373 3
-DEAL::6374 3
-DEAL::6375 3
-DEAL::6376 3
-DEAL::6377 3
-DEAL::6378 3
-DEAL::6379 3
-DEAL::6380 3
-DEAL::6381 3
-DEAL::6382 3
-DEAL::6383 3
-DEAL::6384 3
-DEAL::6385 3
-DEAL::6386 3
-DEAL::6387 3
-DEAL::6388 3
-DEAL::6389 3
-DEAL::6390 3
-DEAL::6391 3
-DEAL::6392 3
-DEAL::6393 4
-DEAL::6394 3
-DEAL::6395 4
-DEAL::6396 3
-DEAL::6397 4
-DEAL::6398 3
-DEAL::6399 3
-DEAL::6400 4
-DEAL::6401 3
-DEAL::6402 3
-DEAL::6403 3
-DEAL::6404 4
-DEAL::6405 3
-DEAL::6406 4
-DEAL::6407 3
-DEAL::6408 4
-DEAL::6409 4
-DEAL::6410 3
-DEAL::6411 3
-DEAL::6412 3
-DEAL::6413 3
-DEAL::6414 3
-DEAL::6415 3
-DEAL::6416 3
-DEAL::6417 3
-DEAL::6418 3
-DEAL::6419 3
-DEAL::6420 3
-DEAL::6421 3
-DEAL::6422 3
-DEAL::6423 3
-DEAL::6424 3
-DEAL::6425 3
-DEAL::6426 3
-DEAL::6427 3
-DEAL::6428 3
-DEAL::6429 3
-DEAL::6430 3
-DEAL::6431 3
-DEAL::6432 3
-DEAL::6433 3
-DEAL::6434 3
-DEAL::6435 3
-DEAL::6436 3
-DEAL::6437 4
-DEAL::6438 4
-DEAL::6439 3
-DEAL::6440 3
-DEAL::6441 3
-DEAL::6442 3
-DEAL::6443 3
-DEAL::6444 3
-DEAL::6445 3
-DEAL::6446 3
-DEAL::6447 4
-DEAL::6448 3
-DEAL::6449 3
-DEAL::6450 4
-DEAL::6451 4
-DEAL::6452 4
-DEAL::6453 4
-DEAL::6454 4
-DEAL::6455 4
-DEAL::6456 4
-DEAL::6457 4
-DEAL::6458 4
-DEAL::6459 4
-DEAL::6460 4
-DEAL::6461 4
-DEAL::6462 4
-DEAL::6463 4
-DEAL::6464 4
-DEAL::6465 4
-DEAL::6466 4
-DEAL::6467 4
-DEAL::6468 4
-DEAL::6469 4
-DEAL::6470 4
-DEAL::6471 4
-DEAL::6472 4
-DEAL::6473 4
-DEAL::6474 4
-DEAL::6475 4
-DEAL::6476 4
-DEAL::6477 4
-DEAL::6478 4
-DEAL::6479 4
-DEAL::6480 4
-DEAL::6481 4
-DEAL::6482 4
-DEAL::6483 4
-DEAL::6484 4
-DEAL::6485 4
-DEAL::6486 4
-DEAL::6487 4
-DEAL::6488 4
-DEAL::6489 4
-DEAL::6490 4
-DEAL::6491 4
-DEAL::6492 4
-DEAL::6493 4
-DEAL::6494 4
-DEAL::6495 4
-DEAL::6496 4
-DEAL::6497 4
-DEAL::6498 4
-DEAL::6499 4
-DEAL::6500 4
-DEAL::6501 4
-DEAL::6502 4
-DEAL::6503 4
-DEAL::6504 4
-DEAL::6505 4
-DEAL::6506 4
-DEAL::6507 4
-DEAL::6508 4
-DEAL::6509 4
-DEAL::6510 4
-DEAL::6511 4
-DEAL::6512 4
-DEAL::6513 4
-DEAL::6514 4
-DEAL::6515 4
-DEAL::6516 4
-DEAL::6517 4
-DEAL::6518 4
-DEAL::6519 4
-DEAL::6520 4
-DEAL::6521 4
-DEAL::6522 4
-DEAL::6523 4
-DEAL::6524 4
-DEAL::6525 4
-DEAL::6526 4
-DEAL::6527 4
-DEAL::6528 4
-DEAL::6529 4
-DEAL::6530 4
-DEAL::6531 4
-DEAL::6532 4
-DEAL::6533 4
-DEAL::6534 4
-DEAL::6535 4
-DEAL::6536 4
-DEAL::6537 4
-DEAL::6538 4
-DEAL::6539 4
-DEAL::6540 4
-DEAL::6541 4
-DEAL::6542 4
-DEAL::6543 4
-DEAL::6544 4
-DEAL::6545 4
-DEAL::6546 3
-DEAL::6547 3
-DEAL::6548 3
-DEAL::6549 3
-DEAL::6550 3
-DEAL::6551 3
-DEAL::6552 3
-DEAL::6553 3
-DEAL::6554 3
-DEAL::6555 3
-DEAL::6556 3
-DEAL::6557 3
-DEAL::6558 3
-DEAL::6559 3
-DEAL::6560 3
-DEAL::6561 3
-DEAL::6562 3
-DEAL::6563 3
-DEAL::6564 3
-DEAL::6565 3
-DEAL::6566 3
-DEAL::6567 3
-DEAL::6568 3
-DEAL::6569 3
-DEAL::6570 3
-DEAL::6571 3
-DEAL::6572 3
-DEAL::6573 3
-DEAL::6574 3
-DEAL::6575 3
-DEAL::6576 3
-DEAL::6577 3
-DEAL::6578 3
-DEAL::6579 3
-DEAL::6580 3
-DEAL::6581 3
-DEAL::6582 3
-DEAL::6583 3
-DEAL::6584 3
-DEAL::6585 3
-DEAL::6586 3
-DEAL::6587 3
-DEAL::6588 3
-DEAL::6589 3
-DEAL::6590 3
-DEAL::6591 3
-DEAL::6592 3
-DEAL::6593 3
-DEAL::6594 3
-DEAL::6595 3
-DEAL::6596 3
-DEAL::6597 3
-DEAL::6598 3
-DEAL::6599 3
-DEAL::6600 3
-DEAL::6601 3
-DEAL::6602 3
-DEAL::6603 3
-DEAL::6604 3
-DEAL::6605 3
-DEAL::6606 3
-DEAL::6607 3
-DEAL::6608 3
-DEAL::6609 3
-DEAL::6610 4
-DEAL::6611 4
-DEAL::6612 4
-DEAL::6613 4
-DEAL::6614 4
-DEAL::6615 4
-DEAL::6616 4
-DEAL::6617 4
-DEAL::6618 4
-DEAL::6619 4
-DEAL::6620 4
-DEAL::6621 4
-DEAL::6622 4
-DEAL::6623 4
-DEAL::6624 4
-DEAL::6625 4
-DEAL::6626 4
-DEAL::6627 4
-DEAL::6628 4
-DEAL::6629 4
-DEAL::6630 4
-DEAL::6631 4
-DEAL::6632 4
-DEAL::6633 4
-DEAL::6634 4
-DEAL::6635 4
-DEAL::6636 4
-DEAL::6637 4
-DEAL::6638 4
-DEAL::6639 4
-DEAL::6640 4
-DEAL::6641 4
-DEAL::6642 4
-DEAL::6643 4
-DEAL::6644 4
-DEAL::6645 4
-DEAL::6646 4
-DEAL::6647 4
-DEAL::6648 4
-DEAL::6649 4
-DEAL::6650 4
-DEAL::6651 4
-DEAL::6652 4
-DEAL::6653 4
-DEAL::6654 4
-DEAL::6655 4
-DEAL::6656 4
-DEAL::6657 4
-DEAL::6658 4
-DEAL::6659 4
-DEAL::6660 4
-DEAL::6661 4
-DEAL::6662 4
-DEAL::6663 4
-DEAL::6664 4
-DEAL::6665 4
-DEAL::6666 4
-DEAL::6667 4
-DEAL::6668 4
-DEAL::6669 4
-DEAL::6670 4
-DEAL::6671 4
-DEAL::6672 4
-DEAL::6673 4
-DEAL::6674 4
-DEAL::6675 4
-DEAL::6676 4
-DEAL::6677 4
-DEAL::6678 4
-DEAL::6679 4
-DEAL::6680 4
-DEAL::6681 4
-DEAL::6682 4
-DEAL::6683 4
-DEAL::6684 4
-DEAL::6685 4
-DEAL::6686 4
-DEAL::6687 4
-DEAL::6688 4
-DEAL::6689 4
-DEAL::6690 4
-DEAL::6691 4
-DEAL::6692 4
-DEAL::6693 4
-DEAL::6694 4
-DEAL::6695 4
-DEAL::6696 4
-DEAL::6697 4
-DEAL::6698 4
-DEAL::6699 4
-DEAL::6700 4
-DEAL::6701 4
-DEAL::6702 4
-DEAL::6703 4
-DEAL::6704 4
-DEAL::6705 4
-DEAL::6706 4
-DEAL::6707 4
-DEAL::6708 4
-DEAL::6709 4
-DEAL::6710 4
-DEAL::6711 4
-DEAL::6712 4
-DEAL::6713 4
-DEAL::6714 4
-DEAL::6715 4
-DEAL::6716 4
-DEAL::6717 4
-DEAL::6718 4
-DEAL::6719 4
-DEAL::6720 4
-DEAL::6721 4
-DEAL::6722 4
-DEAL::6723 4
-DEAL::6724 4
-DEAL::6725 4
-DEAL::6726 4
-DEAL::6727 4
-DEAL::6728 1
-DEAL::6729 1
-DEAL::6730 0
-DEAL::6731 4
-DEAL::6732 4
-DEAL::6733 1
-DEAL::6734 4
-DEAL::6735 0
-DEAL::6736 0
-DEAL::6737 1
-DEAL::6738 1
-DEAL::6739 4
-DEAL::6740 4
-DEAL::6741 1
-DEAL::6742 4
-DEAL::6743 4
-DEAL::6744 4
-DEAL::6745 1
-DEAL::6746 0
-DEAL::6747 4
-DEAL::6748 4
-DEAL::6749 0
-DEAL::6750 0
-DEAL::6751 4
-DEAL::6752 4
-DEAL::6753 1
-DEAL::6754 4
-DEAL::6755 0
-DEAL::6756 4
-DEAL::6757 1
-DEAL::6758 1
-DEAL::6759 0
-DEAL::6760 1
-DEAL::6761 1
-DEAL::6762 1
-DEAL::6763 0
-DEAL::6764 1
-DEAL::6765 1
-DEAL::6766 1
-DEAL::6767 1
-DEAL::6768 1
-DEAL::6769 1
-DEAL::6770 1
-DEAL::6771 1
-DEAL::6772 0
-DEAL::6773 1
-DEAL::6774 0
-DEAL::6775 1
-DEAL::6776 1
-DEAL::6777 0
-DEAL::6778 0
-DEAL::6779 1
-DEAL::6780 1
-DEAL::6781 1
-DEAL::6782 1
-DEAL::6783 0
-DEAL::6784 1
-DEAL::6785 0
-DEAL::6786 0
-DEAL::6787 0
-DEAL::6788 0
-DEAL::6789 0
-DEAL::6790 0
-DEAL::6791 0
-DEAL::6792 0
-DEAL::6793 0
-DEAL::6794 0
-DEAL::6795 0
-DEAL::6796 0
-DEAL::6797 0
-DEAL::6798 0
-DEAL::6799 0
-DEAL::6800 0
-DEAL::6801 0
-DEAL::6802 0
-DEAL::6803 0
-DEAL::6804 0
-DEAL::6805 0
-DEAL::6806 0
-DEAL::6807 0
-DEAL::6808 0
-DEAL::6809 0
-DEAL::6810 0
-DEAL::6811 0
-DEAL::6812 0
-DEAL::6813 0
-DEAL::6814 0
-DEAL::6815 0
-DEAL::6816 0
-DEAL::6817 0
-DEAL::6818 0
-DEAL::6819 0
-DEAL::6820 0
-DEAL::6821 0
-DEAL::6822 0
-DEAL::6823 0
-DEAL::6824 0
-DEAL::6825 0
-DEAL::6826 0
-DEAL::6827 0
-DEAL::6828 0
-DEAL::6829 0
-DEAL::6830 0
-DEAL::6831 0
-DEAL::6832 0
-DEAL::6833 0
-DEAL::6834 0
-DEAL::6835 0
-DEAL::6836 0
-DEAL::6837 0
-DEAL::6838 0
-DEAL::6839 0
-DEAL::6840 0
-DEAL::6841 0
-DEAL::6842 0
-DEAL::6843 0
-DEAL::6844 0
-DEAL::6845 0
-DEAL::6846 0
-DEAL::6847 0
-DEAL::6848 0
-DEAL::6849 0
-DEAL::6850 0
-DEAL::6851 0
-DEAL::6852 0
-DEAL::6853 0
-DEAL::6854 0
-DEAL::6855 0
-DEAL::6856 0
-DEAL::6857 0
-DEAL::6858 0
-DEAL::6859 0
-DEAL::6860 0
-DEAL::6861 0
-DEAL::6862 0
-DEAL::6863 0
-DEAL::6864 0
-DEAL::6865 0
-DEAL::6866 0
-DEAL::6867 0
-DEAL::6868 0
-DEAL::6869 0
-DEAL::6870 0
-DEAL::6871 0
-DEAL::6872 0
-DEAL::6873 0
-DEAL::6874 0
-DEAL::6875 0
-DEAL::6876 0
-DEAL::6877 0
-DEAL::6878 0
-DEAL::6879 0
-DEAL::6880 0
-DEAL::6881 0
-DEAL::6882 0
-DEAL::6883 0
-DEAL::6884 0
-DEAL::6885 0
-DEAL::6886 0
-DEAL::6887 0
-DEAL::6888 0
-DEAL::6889 0
-DEAL::6890 0
-DEAL::6891 0
-DEAL::6892 0
-DEAL::6893 0
-DEAL::6894 0
-DEAL::6895 0
-DEAL::6896 0
-DEAL::6897 0
-DEAL::6898 0
-DEAL::6899 0
-DEAL::6900 0
-DEAL::6901 0
-DEAL::6902 0
-DEAL::6903 0
-DEAL::6904 0
-DEAL::6905 0
-DEAL::6906 0
-DEAL::6907 0
-DEAL::6908 0
-DEAL::6909 0
-DEAL::6910 0
-DEAL::6911 0
-DEAL::6912 0
-DEAL::6913 0
-DEAL::6914 0
-DEAL::6915 0
-DEAL::6916 0
-DEAL::6917 0
-DEAL::6918 0
-DEAL::6919 0
-DEAL::6920 0
-DEAL::6921 0
-DEAL::6922 0
-DEAL::6923 0
-DEAL::6924 0
-DEAL::6925 0
-DEAL::6926 0
-DEAL::6927 0
-DEAL::6928 0
-DEAL::6929 0
-DEAL::6930 0
-DEAL::6931 0
-DEAL::6932 0
-DEAL::6933 0
-DEAL::6934 0
-DEAL::6935 0
-DEAL::6936 0
-DEAL::6937 0
-DEAL::6938 0
-DEAL::6939 0
-DEAL::6940 1
-DEAL::6941 1
-DEAL::6942 1
-DEAL::6943 1
-DEAL::6944 1
-DEAL::6945 1
-DEAL::6946 1
-DEAL::6947 1
-DEAL::6948 1
-DEAL::6949 1
-DEAL::6950 1
-DEAL::6951 1
-DEAL::6952 1
-DEAL::6953 1
-DEAL::6954 1
-DEAL::6955 1
-DEAL::6956 1
-DEAL::6957 1
-DEAL::6958 1
-DEAL::6959 1
-DEAL::6960 1
-DEAL::6961 1
-DEAL::6962 1
-DEAL::6963 1
-DEAL::6964 1
-DEAL::6965 1
-DEAL::6966 1
-DEAL::6967 1
-DEAL::6968 1
-DEAL::6969 1
-DEAL::6970 1
-DEAL::6971 1
-DEAL::6972 1
-DEAL::6973 1
-DEAL::6974 1
-DEAL::6975 1
-DEAL::6976 1
-DEAL::6977 1
-DEAL::6978 1
-DEAL::6979 1
-DEAL::6980 1
-DEAL::6981 1
-DEAL::6982 1
-DEAL::6983 1
-DEAL::6984 1
-DEAL::6985 1
-DEAL::6986 1
-DEAL::6987 1
-DEAL::6988 1
-DEAL::6989 1
-DEAL::6990 1
-DEAL::6991 1
-DEAL::6992 1
-DEAL::6993 1
-DEAL::6994 1
-DEAL::6995 1
-DEAL::6996 1
-DEAL::6997 1
-DEAL::6998 1
-DEAL::6999 1
-DEAL::7000 1
-DEAL::7001 1
-DEAL::7002 1
-DEAL::7003 1
-DEAL::7004 1
-DEAL::7005 1
-DEAL::7006 1
-DEAL::7007 1
-DEAL::7008 1
-DEAL::7009 1
-DEAL::7010 1
-DEAL::7011 1
-DEAL::7012 1
-DEAL::7013 1
-DEAL::7014 1
-DEAL::7015 1
-DEAL::7016 1
-DEAL::7017 1
-DEAL::7018 1
-DEAL::7019 1
-DEAL::7020 1
-DEAL::7021 1
-DEAL::7022 1
-DEAL::7023 1
-DEAL::7024 1
-DEAL::7025 1
-DEAL::7026 1
-DEAL::7027 1
-DEAL::7028 1
-DEAL::7029 1
-DEAL::7030 1
-DEAL::7031 1
-DEAL::7032 1
-DEAL::7033 1
-DEAL::7034 1
-DEAL::7035 1
-DEAL::7036 1
-DEAL::7037 1
-DEAL::7038 1
-DEAL::7039 1
-DEAL::7040 1
-DEAL::7041 1
-DEAL::7042 1
-DEAL::7043 1
-DEAL::7044 1
-DEAL::7045 1
-DEAL::7046 1
-DEAL::7047 1
-DEAL::7048 1
-DEAL::7049 1
-DEAL::7050 1
-DEAL::7051 1
-DEAL::7052 1
-DEAL::7053 1
-DEAL::7054 1
-DEAL::7055 1
-DEAL::7056 1
-DEAL::7057 1
-DEAL::7058 1
-DEAL::7059 1
-DEAL::7060 1
-DEAL::7061 1
-DEAL::7062 1
-DEAL::7063 1
-DEAL::7064 1
-DEAL::7065 1
-DEAL::7066 1
-DEAL::7067 1
-DEAL::7068 1
-DEAL::7069 1
-DEAL::7070 1
-DEAL::7071 1
-DEAL::7072 1
-DEAL::7073 1
-DEAL::7074 1
-DEAL::7075 1
-DEAL::7076 1
-DEAL::7077 1
-DEAL::7078 1
-DEAL::7079 1
-DEAL::7080 1
-DEAL::7081 1
-DEAL::7082 1
-DEAL::7083 1
-DEAL::7084 1
-DEAL::7085 1
-DEAL::7086 1
-DEAL::7087 1
-DEAL::7088 1
-DEAL::7089 1
-DEAL::7090 1
-DEAL::7091 1
-DEAL::7092 1
-DEAL::7093 1
-DEAL::7094 1
-DEAL::7095 1
-DEAL::7096 1
-DEAL::7097 1
-DEAL::7098 1
-DEAL::7099 1
-DEAL::7100 1
-DEAL::7101 1
-DEAL::7102 1
-DEAL::7103 1
-DEAL::7104 1
-DEAL::7105 1
-DEAL::7106 1
-DEAL::7107 1
-DEAL::7108 1
-DEAL::7109 1
-DEAL::7110 1
-DEAL::7111 1
-DEAL::7112 1
-DEAL::7113 1
-DEAL::7114 1
-DEAL::7115 1
-DEAL::7116 1
-DEAL::7117 1
-DEAL::7118 1
-DEAL::7119 1
-DEAL::7120 1
-DEAL::7121 1
-DEAL::7122 1
-DEAL::7123 1
-DEAL::7124 1
-DEAL::7125 1
-DEAL::7126 1
-DEAL::7127 1
-DEAL::7128 1
-DEAL::7129 1
-DEAL::7130 1
-DEAL::7131 1
-DEAL::7132 1
-DEAL::7133 1
-DEAL::7134 1
-DEAL::7135 1
-DEAL::7136 1
-DEAL::7137 1
-DEAL::7138 1
-DEAL::7139 1
-DEAL::7140 1
-DEAL::7141 1
-DEAL::7142 1
-DEAL::7143 1
-DEAL::7144 1
-DEAL::7145 1
-DEAL::7146 1
-DEAL::7147 1
-DEAL::7148 1
-DEAL::7149 1
-DEAL::7150 1
-DEAL::7151 1
-DEAL::7152 1
-DEAL::7153 1
-DEAL::7154 1
-DEAL::7155 1
-DEAL::7156 1
-DEAL::7157 1
-DEAL::7158 1
-DEAL::7159 1
-DEAL::7160 1
-DEAL::7161 1
-DEAL::7162 1
-DEAL::7163 1
-DEAL::7164 1
-DEAL::7165 1
-DEAL::7166 1
-DEAL::7167 1
-DEAL::7168 1
-DEAL::7169 1
-DEAL::7170 1
-DEAL::7171 1
-DEAL::7172 1
-DEAL::7173 1
-DEAL::7174 1
-DEAL::7175 1
-DEAL::7176 1
-DEAL::7177 1
-DEAL::7178 1
-DEAL::7179 1
-DEAL::7180 1
-DEAL::7181 1
-DEAL::7182 1
-DEAL::7183 1
-DEAL::7184 1
-DEAL::7185 1
-DEAL::7186 1
-DEAL::7187 1
-DEAL::7188 1
-DEAL::7189 1
-DEAL::7190 1
-DEAL::7191 1
-DEAL::7192 1
-DEAL::7193 1
-DEAL::7194 1
-DEAL::7195 1
-DEAL::7196 1
-DEAL::7197 1
-DEAL::7198 1
-DEAL::7199 1
-DEAL::7200 1
-DEAL::7201 1
-DEAL::7202 1
-DEAL::7203 1
-DEAL::7204 1
-DEAL::7205 1
-DEAL::7206 1
-DEAL::7207 1
-DEAL::7208 1
-DEAL::7209 1
-DEAL::7210 1
-DEAL::7211 1
+DEAL::5847 1
+DEAL::5848 1
+DEAL::5849 1
+DEAL::5850 1
+DEAL::5851 1
+DEAL::5852 1
+DEAL::5853 1
+DEAL::5854 1
+DEAL::5855 1
+DEAL::5856 1
+DEAL::5857 1
+DEAL::5858 1
+DEAL::5859 1
+DEAL::5860 1
+DEAL::5861 1
+DEAL::5862 1
+DEAL::5863 1
+DEAL::5864 1
+DEAL::5865 1
+DEAL::5866 1
+DEAL::5867 1
+DEAL::5868 1
+DEAL::5869 1
+DEAL::5870 1
+DEAL::5871 1
+DEAL::5872 1
+DEAL::5873 1
+DEAL::5874 1
+DEAL::5875 1
+DEAL::5876 1
+DEAL::5877 1
+DEAL::5878 1
+DEAL::5879 1
+DEAL::5880 1
+DEAL::5881 1
+DEAL::5882 1
+DEAL::5883 1
+DEAL::5884 1
+DEAL::5885 1
+DEAL::5886 1
+DEAL::5887 1
+DEAL::5888 1
+DEAL::5889 1
+DEAL::5890 1
+DEAL::5891 1
+DEAL::5892 1
+DEAL::5893 1
+DEAL::5894 1
+DEAL::5895 1
+DEAL::5896 1
+DEAL::5897 1
+DEAL::5898 1
+DEAL::5899 1
+DEAL::5900 1
+DEAL::5901 1
+DEAL::5902 1
+DEAL::5903 1
+DEAL::5904 1
+DEAL::5905 1
+DEAL::5906 1
+DEAL::5907 1
+DEAL::5908 1
+DEAL::5909 1
+DEAL::5910 1
+DEAL::5911 1
+DEAL::5912 1
+DEAL::5913 1
+DEAL::5914 0
+DEAL::5915 1
+DEAL::5916 1
+DEAL::5917 1
+DEAL::5918 1
+DEAL::5919 1
+DEAL::5920 1
+DEAL::5921 1
+DEAL::5922 1
+DEAL::5923 1
+DEAL::5924 1
+DEAL::5925 1
+DEAL::5926 1
+DEAL::5927 1
+DEAL::5928 1
+DEAL::5929 1
+DEAL::5930 1
+DEAL::5931 1
+DEAL::5932 1
+DEAL::5933 1
+DEAL::5934 1
+DEAL::5935 1
+DEAL::5936 1
+DEAL::5937 1
+DEAL::5938 1
+DEAL::5939 1
+DEAL::5940 1
+DEAL::5941 1
+DEAL::5942 1
+DEAL::5943 1
+DEAL::5944 1
+DEAL::5945 1
+DEAL::5946 1
+DEAL::5947 1
+DEAL::5948 1
+DEAL::5949 1
+DEAL::5950 1
+DEAL::5951 1
+DEAL::5952 1
+DEAL::5953 1
+DEAL::5954 1
+DEAL::5955 1
+DEAL::5956 1
+DEAL::5957 1
+DEAL::5958 1
+DEAL::5959 1
+DEAL::5960 1
+DEAL::5961 1
+DEAL::5962 1
+DEAL::5963 1
+DEAL::5964 1
+DEAL::5965 1
+DEAL::5966 0
+DEAL::5967 1
+DEAL::5968 1
+DEAL::5969 1
+DEAL::5970 1
+DEAL::5971 0
+DEAL::5972 0
+DEAL::5973 0
+DEAL::5974 0
+DEAL::5975 0
+DEAL::5976 0
+DEAL::5977 0
+DEAL::5978 0
+DEAL::5979 0
+DEAL::5980 0
+DEAL::5981 0
+DEAL::5982 0
+DEAL::5983 0
+DEAL::5984 0
+DEAL::5985 0
+DEAL::5986 0
+DEAL::5987 0
+DEAL::5988 0
+DEAL::5989 0
+DEAL::5990 0
+DEAL::5991 0
+DEAL::5992 0
+DEAL::5993 0
+DEAL::5994 0
+DEAL::5995 0
+DEAL::5996 0
+DEAL::5997 0
+DEAL::5998 0
+DEAL::5999 0
+DEAL::6000 0
+DEAL::6001 0
+DEAL::6002 0
+DEAL::6003 0
+DEAL::6004 0
+DEAL::6005 0
+DEAL::6006 0
+DEAL::6007 0
+DEAL::6008 0
+DEAL::6009 0
+DEAL::6010 0
+DEAL::6011 0
+DEAL::6012 0
+DEAL::6013 0
+DEAL::6014 0
+DEAL::6015 0
+DEAL::6016 0
+DEAL::6017 0
+DEAL::6018 0
+DEAL::6019 0
+DEAL::6020 0
+DEAL::6021 0
+DEAL::6022 0
+DEAL::6023 0
+DEAL::6024 0
+DEAL::6025 0
+DEAL::6026 0
+DEAL::6027 0
+DEAL::6028 1
+DEAL::6029 0
+DEAL::6030 1
+DEAL::6031 0
+DEAL::6032 1
+DEAL::6033 1
+DEAL::6034 0
+DEAL::6035 0
+DEAL::6036 0
+DEAL::6037 0
+DEAL::6038 0
+DEAL::6039 0
+DEAL::6040 0
+DEAL::6041 1
+DEAL::6042 0
+DEAL::6043 0
+DEAL::6044 0
+DEAL::6045 0
+DEAL::6046 0
+DEAL::6047 0
+DEAL::6048 0
+DEAL::6049 0
+DEAL::6050 0
+DEAL::6051 0
+DEAL::6052 0
+DEAL::6053 0
+DEAL::6054 1
+DEAL::6055 0
+DEAL::6056 0
+DEAL::6057 0
+DEAL::6058 1
+DEAL::6059 0
+DEAL::6060 0
+DEAL::6061 0
+DEAL::6062 0
+DEAL::6063 0
+DEAL::6064 1
+DEAL::6065 1
+DEAL::6066 1
+DEAL::6067 1
+DEAL::6068 1
+DEAL::6069 1
+DEAL::6070 1
+DEAL::6071 1
+DEAL::6072 1
+DEAL::6073 0
+DEAL::6074 1
+DEAL::6075 0
+DEAL::6076 1
+DEAL::6077 0
+DEAL::6078 1
+DEAL::6079 1
+DEAL::6080 1
+DEAL::6081 1
+DEAL::6082 0
+DEAL::6083 0
+DEAL::6084 0
+DEAL::6085 0
+DEAL::6086 1
+DEAL::6087 0
+DEAL::6088 0
+DEAL::6089 0
+DEAL::6090 0
+DEAL::6091 0
+DEAL::6092 0
+DEAL::6093 0
+DEAL::6094 1
+DEAL::6095 1
+DEAL::6096 1
+DEAL::6097 1
+DEAL::6098 1
+DEAL::6099 1
+DEAL::6100 0
+DEAL::6101 0
+DEAL::6102 0
+DEAL::6103 0
+DEAL::6104 0
+DEAL::6105 0
+DEAL::6106 1
+DEAL::6107 1
+DEAL::6108 1
+DEAL::6109 1
+DEAL::6110 1
+DEAL::6111 1
+DEAL::6112 1
+DEAL::6113 1
+DEAL::6114 1
+DEAL::6115 1
+DEAL::6116 1
+DEAL::6117 1
+DEAL::6118 1
+DEAL::6119 1
+DEAL::6120 1
+DEAL::6121 1
+DEAL::6122 1
+DEAL::6123 0
+DEAL::6124 1
+DEAL::6125 1
+DEAL::6126 1
+DEAL::6127 0
+DEAL::6128 1
+DEAL::6129 0
+DEAL::6130 1
+DEAL::6131 1
+DEAL::6132 1
+DEAL::6133 1
+DEAL::6134 1
+DEAL::6135 1
+DEAL::6136 1
+DEAL::6137 1
+DEAL::6138 1
+DEAL::6139 1
+DEAL::6140 1
+DEAL::6141 0
+DEAL::6142 1
+DEAL::6143 1
+DEAL::6144 0
+DEAL::6145 0
+DEAL::6146 0
+DEAL::6147 0
+DEAL::6148 0
+DEAL::6149 0
+DEAL::6150 0
+DEAL::6151 0
+DEAL::6152 0
+DEAL::6153 0
+DEAL::6154 0
+DEAL::6155 0
+DEAL::6156 0
+DEAL::6157 0
+DEAL::6158 0
+DEAL::6159 0
+DEAL::6160 0
+DEAL::6161 0
+DEAL::6162 0
+DEAL::6163 0
+DEAL::6164 0
+DEAL::6165 0
+DEAL::6166 0
+DEAL::6167 0
+DEAL::6168 0
+DEAL::6169 0
+DEAL::6170 0
+DEAL::6171 0
+DEAL::6172 0
+DEAL::6173 0
+DEAL::6174 0
+DEAL::6175 0
+DEAL::6176 0
+DEAL::6177 0
+DEAL::6178 0
+DEAL::6179 0
+DEAL::6180 0
+DEAL::6181 0
+DEAL::6182 0
+DEAL::6183 0
+DEAL::6184 0
+DEAL::6185 0
+DEAL::6186 0
+DEAL::6187 0
+DEAL::6188 0
+DEAL::6189 0
+DEAL::6190 0
+DEAL::6191 0
+DEAL::6192 0
+DEAL::6193 0
+DEAL::6194 0
+DEAL::6195 0
+DEAL::6196 0
+DEAL::6197 0
+DEAL::6198 0
+DEAL::6199 0
+DEAL::6200 0
+DEAL::6201 0
+DEAL::6202 0
+DEAL::6203 0
+DEAL::6204 0
+DEAL::6205 0
+DEAL::6206 0
+DEAL::6207 0
+DEAL::6208 0
+DEAL::6209 0
+DEAL::6210 0
+DEAL::6211 0
+DEAL::6212 0
+DEAL::6213 0
+DEAL::6214 0
+DEAL::6215 0
+DEAL::6216 0
+DEAL::6217 0
+DEAL::6218 0
+DEAL::6219 0
+DEAL::6220 0
+DEAL::6221 0
+DEAL::6222 0
+DEAL::6223 0
+DEAL::6224 0
+DEAL::6225 0
+DEAL::6226 0
+DEAL::6227 0
+DEAL::6228 0
+DEAL::6229 0
+DEAL::6230 0
+DEAL::6231 0
+DEAL::6232 0
+DEAL::6233 0
+DEAL::6234 0
+DEAL::6235 0
+DEAL::6236 0
+DEAL::6237 0
+DEAL::6238 0
+DEAL::6239 0
+DEAL::6240 0
+DEAL::6241 0
+DEAL::6242 0
+DEAL::6243 0
+DEAL::6244 0
+DEAL::6245 0
+DEAL::6246 0
+DEAL::6247 0
+DEAL::6248 0
+DEAL::6249 0
+DEAL::6250 0
+DEAL::6251 0
+DEAL::6252 0
+DEAL::6253 0
+DEAL::6254 0
+DEAL::6255 0
+DEAL::6256 0
+DEAL::6257 0
+DEAL::6258 0
+DEAL::6259 0
+DEAL::6260 0
+DEAL::6261 0
+DEAL::6262 0
+DEAL::6263 0
+DEAL::6264 0
+DEAL::6265 0
+DEAL::6266 0
+DEAL::6267 0
+DEAL::6268 0
+DEAL::6269 0
+DEAL::6270 0
+DEAL::6271 0
+DEAL::6272 0
+DEAL::6273 0
+DEAL::6274 0
+DEAL::6275 0
+DEAL::6276 0
+DEAL::6277 0
+DEAL::6278 0
+DEAL::6279 0
+DEAL::6280 0
+DEAL::6281 0
+DEAL::6282 0
+DEAL::6283 0
+DEAL::6284 0
+DEAL::6285 0
+DEAL::6286 0
+DEAL::6287 0
+DEAL::6288 0
+DEAL::6289 0
+DEAL::6290 0
+DEAL::6291 0
+DEAL::6292 0
+DEAL::6293 0
+DEAL::6294 0
+DEAL::6295 0
+DEAL::6296 0
+DEAL::6297 0
+DEAL::6298 0
+DEAL::6299 0
+DEAL::6300 0
+DEAL::6301 0
+DEAL::6302 0
+DEAL::6303 0
+DEAL::6304 0
+DEAL::6305 0
+DEAL::6306 0
+DEAL::6307 0
+DEAL::6308 0
+DEAL::6309 0
+DEAL::6310 0
+DEAL::6311 0
+DEAL::6312 0
+DEAL::6313 0
+DEAL::6314 0
+DEAL::6315 0
+DEAL::6316 0
+DEAL::6317 0
+DEAL::6318 0
+DEAL::6319 0
+DEAL::6320 0
+DEAL::6321 0
+DEAL::6322 0
+DEAL::6323 0
+DEAL::6324 0
+DEAL::6325 0
+DEAL::6326 0
+DEAL::6327 0
+DEAL::6328 0
+DEAL::6329 0
+DEAL::6330 0
+DEAL::6331 0
+DEAL::6332 0
+DEAL::6333 0
+DEAL::6334 0
+DEAL::6335 0
+DEAL::6336 0
+DEAL::6337 0
+DEAL::6338 0
+DEAL::6339 0
+DEAL::6340 0
+DEAL::6341 0
+DEAL::6342 0
+DEAL::6343 0
+DEAL::6344 0
+DEAL::6345 0
+DEAL::6346 0
+DEAL::6347 0
+DEAL::6348 0
+DEAL::6349 0
+DEAL::6350 0
+DEAL::6351 0
+DEAL::6352 0
+DEAL::6353 0
+DEAL::6354 0
+DEAL::6355 0
+DEAL::6356 0
+DEAL::6357 0
+DEAL::6358 0
+DEAL::6359 0
+DEAL::6360 0
+DEAL::6361 0
+DEAL::6362 0
+DEAL::6363 0
+DEAL::6364 0
+DEAL::6365 0
+DEAL::6366 0
+DEAL::6367 0
+DEAL::6368 0
+DEAL::6369 0
+DEAL::6370 0
+DEAL::6371 0
+DEAL::6372 0
+DEAL::6373 0
+DEAL::6374 0
+DEAL::6375 0
+DEAL::6376 0
+DEAL::6377 0
+DEAL::6378 0
+DEAL::6379 0
+DEAL::6380 0
+DEAL::6381 0
+DEAL::6382 0
+DEAL::6383 0
+DEAL::6384 0
+DEAL::6385 0
+DEAL::6386 0
+DEAL::6387 0
+DEAL::6388 0
+DEAL::6389 0
+DEAL::6390 0
+DEAL::6391 0
+DEAL::6392 0
+DEAL::6393 0
+DEAL::6394 0
+DEAL::6395 0
+DEAL::6396 0
+DEAL::6397 0
+DEAL::6398 0
+DEAL::6399 0
+DEAL::6400 0
+DEAL::6401 0
+DEAL::6402 0
+DEAL::6403 0
+DEAL::6404 0
+DEAL::6405 0
+DEAL::6406 0
+DEAL::6407 0
+DEAL::6408 0
+DEAL::6409 0
+DEAL::6410 0
+DEAL::6411 0
+DEAL::6412 0
+DEAL::6413 0
+DEAL::6414 0
+DEAL::6415 0
+DEAL::6416 0
+DEAL::6417 0
+DEAL::6418 0
+DEAL::6419 0
+DEAL::6420 0
+DEAL::6421 0
+DEAL::6422 0
+DEAL::6423 0
+DEAL::6424 0
+DEAL::6425 0
+DEAL::6426 0
+DEAL::6427 0
+DEAL::6428 0
+DEAL::6429 0
+DEAL::6430 0
+DEAL::6431 0
+DEAL::6432 0
+DEAL::6433 0
+DEAL::6434 0
+DEAL::6435 0
+DEAL::6436 0
+DEAL::6437 0
+DEAL::6438 0
+DEAL::6439 0
+DEAL::6440 0
+DEAL::6441 0
+DEAL::6442 0
+DEAL::6443 0
+DEAL::6444 0
+DEAL::6445 0
+DEAL::6446 0
+DEAL::6447 0
+DEAL::6448 0
+DEAL::6449 0
+DEAL::6450 0
+DEAL::6451 0
+DEAL::6452 0
+DEAL::6453 0
+DEAL::6454 0
+DEAL::6455 0
+DEAL::6456 0
+DEAL::6457 0
+DEAL::6458 0
+DEAL::6459 0
+DEAL::6460 0
+DEAL::6461 0
+DEAL::6462 0
+DEAL::6463 0
+DEAL::6464 0
+DEAL::6465 0
+DEAL::6466 0
+DEAL::6467 0
+DEAL::6468 0
+DEAL::6469 0
+DEAL::6470 0
+DEAL::6471 0
+DEAL::6472 0
+DEAL::6473 0
+DEAL::6474 0
+DEAL::6475 0
+DEAL::6476 0
+DEAL::6477 0
+DEAL::6478 0
+DEAL::6479 0
+DEAL::6480 0
+DEAL::6481 0
+DEAL::6482 0
+DEAL::6483 0
+DEAL::6484 0
+DEAL::6485 0
+DEAL::6486 0
+DEAL::6487 0
+DEAL::6488 0
+DEAL::6489 0
+DEAL::6490 0
+DEAL::6491 0
+DEAL::6492 0
+DEAL::6493 0
+DEAL::6494 0
+DEAL::6495 0
+DEAL::6496 0
+DEAL::6497 0
+DEAL::6498 0
+DEAL::6499 0
+DEAL::6500 0
+DEAL::6501 0
+DEAL::6502 0
+DEAL::6503 0
+DEAL::6504 0
+DEAL::6505 0
+DEAL::6506 0
+DEAL::6507 0
+DEAL::6508 0
+DEAL::6509 0
+DEAL::6510 0
+DEAL::6511 0
+DEAL::6512 0
+DEAL::6513 0
+DEAL::6514 0
+DEAL::6515 0
+DEAL::6516 0
+DEAL::6517 0
+DEAL::6518 0
+DEAL::6519 0
+DEAL::6520 0
+DEAL::6521 0
+DEAL::6522 0
+DEAL::6523 0
+DEAL::6524 0
+DEAL::6525 0
+DEAL::6526 0
+DEAL::6527 0
+DEAL::6528 0
+DEAL::6529 0
+DEAL::6530 0
+DEAL::6531 0
+DEAL::6532 0
+DEAL::6533 0
+DEAL::6534 0
+DEAL::6535 0
+DEAL::6536 0
+DEAL::6537 0
+DEAL::6538 0
+DEAL::6539 0
+DEAL::6540 0
+DEAL::6541 0
+DEAL::6542 0
+DEAL::6543 0
+DEAL::6544 0
+DEAL::6545 0
+DEAL::6546 0
+DEAL::6547 0
+DEAL::6548 0
+DEAL::6549 0
+DEAL::6550 0
+DEAL::6551 0
+DEAL::6552 0
+DEAL::6553 0
+DEAL::6554 0
+DEAL::6555 0
+DEAL::6556 0
+DEAL::6557 0
+DEAL::6558 0
+DEAL::6559 0
+DEAL::6560 0
+DEAL::6561 0
+DEAL::6562 0
+DEAL::6563 0
+DEAL::6564 0
+DEAL::6565 0
+DEAL::6566 0
+DEAL::6567 0
+DEAL::6568 0
+DEAL::6569 0
+DEAL::6570 0
+DEAL::6571 0
+DEAL::6572 0
+DEAL::6573 0
+DEAL::6574 0
+DEAL::6575 0
+DEAL::6576 0
+DEAL::6577 0
+DEAL::6578 0
+DEAL::6579 0
+DEAL::6580 0
+DEAL::6581 0
+DEAL::6582 0
+DEAL::6583 0
+DEAL::6584 0
+DEAL::6585 0
+DEAL::6586 0
+DEAL::6587 0
+DEAL::6588 0
+DEAL::6589 0
+DEAL::6590 0
+DEAL::6591 0
+DEAL::6592 0
+DEAL::6593 0
+DEAL::6594 0
+DEAL::6595 0
+DEAL::6596 0
+DEAL::6597 0
+DEAL::6598 0
+DEAL::6599 0
+DEAL::6600 0
+DEAL::6601 0
+DEAL::6602 0
+DEAL::6603 0
+DEAL::6604 0
+DEAL::6605 0
+DEAL::6606 0
+DEAL::6607 0
+DEAL::6608 0
+DEAL::6609 0
+DEAL::6610 3
+DEAL::6611 3
+DEAL::6612 3
+DEAL::6613 3
+DEAL::6614 3
+DEAL::6615 3
+DEAL::6616 3
+DEAL::6617 3
+DEAL::6618 3
+DEAL::6619 3
+DEAL::6620 3
+DEAL::6621 3
+DEAL::6622 3
+DEAL::6623 3
+DEAL::6624 3
+DEAL::6625 3
+DEAL::6626 3
+DEAL::6627 3
+DEAL::6628 3
+DEAL::6629 3
+DEAL::6630 3
+DEAL::6631 3
+DEAL::6632 3
+DEAL::6633 3
+DEAL::6634 3
+DEAL::6635 3
+DEAL::6636 3
+DEAL::6637 3
+DEAL::6638 3
+DEAL::6639 3
+DEAL::6640 3
+DEAL::6641 3
+DEAL::6642 3
+DEAL::6643 3
+DEAL::6644 3
+DEAL::6645 3
+DEAL::6646 3
+DEAL::6647 3
+DEAL::6648 3
+DEAL::6649 3
+DEAL::6650 3
+DEAL::6651 3
+DEAL::6652 3
+DEAL::6653 3
+DEAL::6654 3
+DEAL::6655 3
+DEAL::6656 3
+DEAL::6657 3
+DEAL::6658 3
+DEAL::6659 3
+DEAL::6660 3
+DEAL::6661 3
+DEAL::6662 3
+DEAL::6663 3
+DEAL::6664 3
+DEAL::6665 3
+DEAL::6666 3
+DEAL::6667 3
+DEAL::6668 3
+DEAL::6669 3
+DEAL::6670 3
+DEAL::6671 3
+DEAL::6672 3
+DEAL::6673 3
+DEAL::6674 3
+DEAL::6675 3
+DEAL::6676 3
+DEAL::6677 3
+DEAL::6678 3
+DEAL::6679 3
+DEAL::6680 3
+DEAL::6681 3
+DEAL::6682 3
+DEAL::6683 3
+DEAL::6684 3
+DEAL::6685 3
+DEAL::6686 3
+DEAL::6687 3
+DEAL::6688 3
+DEAL::6689 3
+DEAL::6690 3
+DEAL::6691 3
+DEAL::6692 3
+DEAL::6693 3
+DEAL::6694 3
+DEAL::6695 3
+DEAL::6696 3
+DEAL::6697 3
+DEAL::6698 3
+DEAL::6699 3
+DEAL::6700 3
+DEAL::6701 3
+DEAL::6702 3
+DEAL::6703 3
+DEAL::6704 3
+DEAL::6705 3
+DEAL::6706 3
+DEAL::6707 3
+DEAL::6708 3
+DEAL::6709 3
+DEAL::6710 3
+DEAL::6711 3
+DEAL::6712 3
+DEAL::6713 3
+DEAL::6714 3
+DEAL::6715 3
+DEAL::6716 3
+DEAL::6717 3
+DEAL::6718 3
+DEAL::6719 3
+DEAL::6720 3
+DEAL::6721 3
+DEAL::6722 3
+DEAL::6723 3
+DEAL::6724 3
+DEAL::6725 3
+DEAL::6726 3
+DEAL::6727 3
+DEAL::6728 3
+DEAL::6729 3
+DEAL::6730 3
+DEAL::6731 3
+DEAL::6732 3
+DEAL::6733 3
+DEAL::6734 3
+DEAL::6735 3
+DEAL::6736 3
+DEAL::6737 3
+DEAL::6738 3
+DEAL::6739 3
+DEAL::6740 3
+DEAL::6741 3
+DEAL::6742 3
+DEAL::6743 3
+DEAL::6744 3
+DEAL::6745 3
+DEAL::6746 3
+DEAL::6747 3
+DEAL::6748 3
+DEAL::6749 3
+DEAL::6750 3
+DEAL::6751 3
+DEAL::6752 3
+DEAL::6753 3
+DEAL::6754 3
+DEAL::6755 3
+DEAL::6756 3
+DEAL::6757 3
+DEAL::6758 3
+DEAL::6759 3
+DEAL::6760 3
+DEAL::6761 3
+DEAL::6762 3
+DEAL::6763 3
+DEAL::6764 3
+DEAL::6765 3
+DEAL::6766 3
+DEAL::6767 3
+DEAL::6768 3
+DEAL::6769 3
+DEAL::6770 3
+DEAL::6771 3
+DEAL::6772 3
+DEAL::6773 3
+DEAL::6774 3
+DEAL::6775 3
+DEAL::6776 3
+DEAL::6777 3
+DEAL::6778 3
+DEAL::6779 3
+DEAL::6780 3
+DEAL::6781 3
+DEAL::6782 3
+DEAL::6783 3
+DEAL::6784 3
+DEAL::6785 3
+DEAL::6786 3
+DEAL::6787 3
+DEAL::6788 3
+DEAL::6789 3
+DEAL::6790 3
+DEAL::6791 3
+DEAL::6792 3
+DEAL::6793 3
+DEAL::6794 3
+DEAL::6795 3
+DEAL::6796 3
+DEAL::6797 3
+DEAL::6798 3
+DEAL::6799 3
+DEAL::6800 3
+DEAL::6801 3
+DEAL::6802 3
+DEAL::6803 3
+DEAL::6804 3
+DEAL::6805 3
+DEAL::6806 3
+DEAL::6807 3
+DEAL::6808 3
+DEAL::6809 3
+DEAL::6810 3
+DEAL::6811 3
+DEAL::6812 3
+DEAL::6813 3
+DEAL::6814 3
+DEAL::6815 3
+DEAL::6816 3
+DEAL::6817 3
+DEAL::6818 3
+DEAL::6819 3
+DEAL::6820 3
+DEAL::6821 3
+DEAL::6822 3
+DEAL::6823 4
+DEAL::6824 3
+DEAL::6825 3
+DEAL::6826 4
+DEAL::6827 4
+DEAL::6828 3
+DEAL::6829 3
+DEAL::6830 4
+DEAL::6831 4
+DEAL::6832 4
+DEAL::6833 4
+DEAL::6834 4
+DEAL::6835 4
+DEAL::6836 4
+DEAL::6837 4
+DEAL::6838 4
+DEAL::6839 4
+DEAL::6840 4
+DEAL::6841 3
+DEAL::6842 4
+DEAL::6843 4
+DEAL::6844 4
+DEAL::6845 4
+DEAL::6846 4
+DEAL::6847 4
+DEAL::6848 4
+DEAL::6849 4
+DEAL::6850 4
+DEAL::6851 4
+DEAL::6852 4
+DEAL::6853 4
+DEAL::6854 3
+DEAL::6855 4
+DEAL::6856 4
+DEAL::6857 3
+DEAL::6858 4
+DEAL::6859 3
+DEAL::6860 4
+DEAL::6861 4
+DEAL::6862 4
+DEAL::6863 4
+DEAL::6864 4
+DEAL::6865 4
+DEAL::6866 3
+DEAL::6867 3
+DEAL::6868 3
+DEAL::6869 3
+DEAL::6870 3
+DEAL::6871 3
+DEAL::6872 3
+DEAL::6873 3
+DEAL::6874 3
+DEAL::6875 3
+DEAL::6876 3
+DEAL::6877 3
+DEAL::6878 3
+DEAL::6879 3
+DEAL::6880 3
+DEAL::6881 3
+DEAL::6882 3
+DEAL::6883 3
+DEAL::6884 3
+DEAL::6885 3
+DEAL::6886 3
+DEAL::6887 3
+DEAL::6888 3
+DEAL::6889 3
+DEAL::6890 3
+DEAL::6891 3
+DEAL::6892 3
+DEAL::6893 3
+DEAL::6894 4
+DEAL::6895 3
+DEAL::6896 3
+DEAL::6897 4
+DEAL::6898 4
+DEAL::6899 4
+DEAL::6900 4
+DEAL::6901 4
+DEAL::6902 4
+DEAL::6903 3
+DEAL::6904 3
+DEAL::6905 4
+DEAL::6906 4
+DEAL::6907 4
+DEAL::6908 3
+DEAL::6909 4
+DEAL::6910 4
+DEAL::6911 4
+DEAL::6912 4
+DEAL::6913 4
+DEAL::6914 4
+DEAL::6915 4
+DEAL::6916 4
+DEAL::6917 4
+DEAL::6918 4
+DEAL::6919 3
+DEAL::6920 4
+DEAL::6921 4
+DEAL::6922 3
+DEAL::6923 3
+DEAL::6924 3
+DEAL::6925 3
+DEAL::6926 3
+DEAL::6927 3
+DEAL::6928 3
+DEAL::6929 3
+DEAL::6930 3
+DEAL::6931 3
+DEAL::6932 3
+DEAL::6933 3
+DEAL::6934 3
+DEAL::6935 3
+DEAL::6936 3
+DEAL::6937 3
+DEAL::6938 3
+DEAL::6939 3
+DEAL::6940 3
+DEAL::6941 3
+DEAL::6942 3
+DEAL::6943 3
+DEAL::6944 3
+DEAL::6945 3
+DEAL::6946 3
+DEAL::6947 3
+DEAL::6948 3
+DEAL::6949 3
+DEAL::6950 3
+DEAL::6951 3
+DEAL::6952 3
+DEAL::6953 3
+DEAL::6954 3
+DEAL::6955 3
+DEAL::6956 3
+DEAL::6957 3
+DEAL::6958 3
+DEAL::6959 3
+DEAL::6960 3
+DEAL::6961 3
+DEAL::6962 3
+DEAL::6963 3
+DEAL::6964 3
+DEAL::6965 3
+DEAL::6966 3
+DEAL::6967 3
+DEAL::6968 3
+DEAL::6969 3
+DEAL::6970 3
+DEAL::6971 3
+DEAL::6972 3
+DEAL::6973 3
+DEAL::6974 3
+DEAL::6975 3
+DEAL::6976 3
+DEAL::6977 3
+DEAL::6978 3
+DEAL::6979 3
+DEAL::6980 3
+DEAL::6981 3
+DEAL::6982 3
+DEAL::6983 3
+DEAL::6984 3
+DEAL::6985 3
+DEAL::6986 3
+DEAL::6987 3
+DEAL::6988 3
+DEAL::6989 3
+DEAL::6990 3
+DEAL::6991 3
+DEAL::6992 3
+DEAL::6993 3
+DEAL::6994 3
+DEAL::6995 3
+DEAL::6996 3
+DEAL::6997 3
+DEAL::6998 3
+DEAL::6999 3
+DEAL::7000 3
+DEAL::7001 3
+DEAL::7002 3
+DEAL::7003 3
+DEAL::7004 3
+DEAL::7005 3
+DEAL::7006 3
+DEAL::7007 3
+DEAL::7008 3
+DEAL::7009 3
+DEAL::7010 3
+DEAL::7011 3
+DEAL::7012 3
+DEAL::7013 3
+DEAL::7014 3
+DEAL::7015 3
+DEAL::7016 3
+DEAL::7017 3
+DEAL::7018 3
+DEAL::7019 3
+DEAL::7020 3
+DEAL::7021 3
+DEAL::7022 3
+DEAL::7023 3
+DEAL::7024 3
+DEAL::7025 3
+DEAL::7026 3
+DEAL::7027 3
+DEAL::7028 3
+DEAL::7029 3
+DEAL::7030 3
+DEAL::7031 3
+DEAL::7032 3
+DEAL::7033 3
+DEAL::7034 3
+DEAL::7035 3
+DEAL::7036 3
+DEAL::7037 3
+DEAL::7038 3
+DEAL::7039 3
+DEAL::7040 3
+DEAL::7041 3
+DEAL::7042 3
+DEAL::7043 3
+DEAL::7044 3
+DEAL::7045 3
+DEAL::7046 3
+DEAL::7047 3
+DEAL::7048 3
+DEAL::7049 3
+DEAL::7050 3
+DEAL::7051 3
+DEAL::7052 3
+DEAL::7053 3
+DEAL::7054 3
+DEAL::7055 3
+DEAL::7056 3
+DEAL::7057 3
+DEAL::7058 3
+DEAL::7059 3
+DEAL::7060 3
+DEAL::7061 3
+DEAL::7062 3
+DEAL::7063 3
+DEAL::7064 3
+DEAL::7065 3
+DEAL::7066 3
+DEAL::7067 3
+DEAL::7068 3
+DEAL::7069 3
+DEAL::7070 3
+DEAL::7071 3
+DEAL::7072 3
+DEAL::7073 3
+DEAL::7074 3
+DEAL::7075 3
+DEAL::7076 3
+DEAL::7077 3
+DEAL::7078 3
+DEAL::7079 3
+DEAL::7080 3
+DEAL::7081 3
+DEAL::7082 3
+DEAL::7083 3
+DEAL::7084 3
+DEAL::7085 3
+DEAL::7086 3
+DEAL::7087 3
+DEAL::7088 3
+DEAL::7089 3
+DEAL::7090 3
+DEAL::7091 3
+DEAL::7092 3
+DEAL::7093 3
+DEAL::7094 3
+DEAL::7095 3
+DEAL::7096 3
+DEAL::7097 3
+DEAL::7098 3
+DEAL::7099 3
+DEAL::7100 3
+DEAL::7101 3
+DEAL::7102 3
+DEAL::7103 3
+DEAL::7104 3
+DEAL::7105 3
+DEAL::7106 3
+DEAL::7107 3
+DEAL::7108 3
+DEAL::7109 3
+DEAL::7110 3
+DEAL::7111 3
+DEAL::7112 3
+DEAL::7113 3
+DEAL::7114 3
+DEAL::7115 3
+DEAL::7116 3
+DEAL::7117 3
+DEAL::7118 3
+DEAL::7119 3
+DEAL::7120 3
+DEAL::7121 3
+DEAL::7122 3
+DEAL::7123 3
+DEAL::7124 3
+DEAL::7125 3
+DEAL::7126 3
+DEAL::7127 3
+DEAL::7128 3
+DEAL::7129 3
+DEAL::7130 3
+DEAL::7131 3
+DEAL::7132 3
+DEAL::7133 3
+DEAL::7134 3
+DEAL::7135 3
+DEAL::7136 3
+DEAL::7137 3
+DEAL::7138 3
+DEAL::7139 3
+DEAL::7140 3
+DEAL::7141 3
+DEAL::7142 3
+DEAL::7143 3
+DEAL::7144 3
+DEAL::7145 3
+DEAL::7146 3
+DEAL::7147 3
+DEAL::7148 3
+DEAL::7149 3
+DEAL::7150 3
+DEAL::7151 3
+DEAL::7152 3
+DEAL::7153 3
+DEAL::7154 3
+DEAL::7155 3
+DEAL::7156 3
+DEAL::7157 3
+DEAL::7158 3
+DEAL::7159 3
+DEAL::7160 3
+DEAL::7161 3
+DEAL::7162 3
+DEAL::7163 3
+DEAL::7164 3
+DEAL::7165 3
+DEAL::7166 3
+DEAL::7167 3
+DEAL::7168 3
+DEAL::7169 3
+DEAL::7170 3
+DEAL::7171 3
+DEAL::7172 3
+DEAL::7173 3
+DEAL::7174 3
+DEAL::7175 3
+DEAL::7176 3
+DEAL::7177 3
+DEAL::7178 3
+DEAL::7179 3
+DEAL::7180 3
+DEAL::7181 3
+DEAL::7182 3
+DEAL::7183 3
+DEAL::7184 3
+DEAL::7185 3
+DEAL::7186 3
+DEAL::7187 3
+DEAL::7188 3
+DEAL::7189 3
+DEAL::7190 3
+DEAL::7191 3
+DEAL::7192 3
+DEAL::7193 3
+DEAL::7194 3
+DEAL::7195 3
+DEAL::7196 3
+DEAL::7197 3
+DEAL::7198 3
+DEAL::7199 3
+DEAL::7200 3
+DEAL::7201 3
+DEAL::7202 3
+DEAL::7203 3
+DEAL::7204 3
+DEAL::7205 3
+DEAL::7206 3
+DEAL::7207 3
+DEAL::7208 3
+DEAL::7209 3
+DEAL::7210 3
+DEAL::7211 3
DEAL::7212 4
DEAL::7213 4
DEAL::7214 4
DEAL::7326 4
DEAL::7327 4
DEAL::7328 4
-DEAL::7329 2
-DEAL::7330 2
-DEAL::7331 2
-DEAL::7332 2
-DEAL::7333 2
-DEAL::7334 2
-DEAL::7335 2
-DEAL::7336 2
-DEAL::7337 2
-DEAL::7338 2
-DEAL::7339 2
-DEAL::7340 2
-DEAL::7341 2
-DEAL::7342 2
-DEAL::7343 2
-DEAL::7344 2
-DEAL::7345 2
-DEAL::7346 2
-DEAL::7347 2
-DEAL::7348 2
-DEAL::7349 2
-DEAL::7350 2
-DEAL::7351 2
-DEAL::7352 2
-DEAL::7353 2
-DEAL::7354 2
-DEAL::7355 2
-DEAL::7356 2
-DEAL::7357 2
-DEAL::7358 2
-DEAL::7359 2
-DEAL::7360 2
-DEAL::7361 2
-DEAL::7362 2
-DEAL::7363 2
-DEAL::7364 2
-DEAL::7365 2
-DEAL::7366 2
-DEAL::7367 2
-DEAL::7368 2
-DEAL::7369 2
-DEAL::7370 2
-DEAL::7371 2
-DEAL::7372 2
-DEAL::7373 2
-DEAL::7374 2
-DEAL::7375 2
-DEAL::7376 2
-DEAL::7377 2
-DEAL::7378 2
-DEAL::7379 2
-DEAL::7380 2
-DEAL::7381 2
-DEAL::7382 2
-DEAL::7383 2
-DEAL::7384 2
-DEAL::7385 2
-DEAL::7386 2
-DEAL::7387 2
-DEAL::7388 2
-DEAL::7389 2
-DEAL::7390 2
-DEAL::7391 2
-DEAL::7392 2
-DEAL::7393 2
-DEAL::7394 2
-DEAL::7395 2
-DEAL::7396 2
-DEAL::7397 2
-DEAL::7398 2
-DEAL::7399 2
-DEAL::7400 2
-DEAL::7401 2
-DEAL::7402 2
-DEAL::7403 2
-DEAL::7404 2
-DEAL::7405 2
-DEAL::7406 2
-DEAL::7407 2
-DEAL::7408 2
-DEAL::7409 2
-DEAL::7410 2
-DEAL::7411 2
-DEAL::7412 2
-DEAL::7413 2
-DEAL::7414 2
-DEAL::7415 2
-DEAL::7416 2
-DEAL::7417 2
-DEAL::7418 2
-DEAL::7419 2
-DEAL::7420 2
-DEAL::7421 2
-DEAL::7422 2
-DEAL::7423 2
-DEAL::7424 2
-DEAL::7425 3
-DEAL::7426 2
-DEAL::7427 3
-DEAL::7428 2
-DEAL::7429 2
-DEAL::7430 2
-DEAL::7431 2
-DEAL::7432 2
-DEAL::7433 2
-DEAL::7434 2
-DEAL::7435 2
-DEAL::7436 2
-DEAL::7437 3
-DEAL::7438 2
-DEAL::7439 2
-DEAL::7440 2
-DEAL::7441 2
-DEAL::7442 2
-DEAL::7443 3
-DEAL::7444 2
-DEAL::7445 2
-DEAL::7446 2
-DEAL::7447 2
-DEAL::7448 2
-DEAL::7449 2
-DEAL::7450 2
-DEAL::7451 3
-DEAL::7452 3
-DEAL::7453 3
-DEAL::7454 3
-DEAL::7455 3
-DEAL::7456 3
-DEAL::7457 3
-DEAL::7458 3
-DEAL::7459 3
-DEAL::7460 3
-DEAL::7461 3
-DEAL::7462 3
-DEAL::7463 3
-DEAL::7464 3
-DEAL::7465 3
-DEAL::7466 3
-DEAL::7467 3
-DEAL::7468 2
-DEAL::7469 2
-DEAL::7470 2
-DEAL::7471 2
-DEAL::7472 2
-DEAL::7473 3
-DEAL::7474 2
-DEAL::7475 2
-DEAL::7476 3
-DEAL::7477 2
-DEAL::7478 2
-DEAL::7479 2
-DEAL::7480 2
-DEAL::7481 2
-DEAL::7482 2
-DEAL::7483 3
-DEAL::7484 3
-DEAL::7485 3
-DEAL::7486 3
-DEAL::7487 3
-DEAL::7488 3
-DEAL::7489 3
-DEAL::7490 3
-DEAL::7491 3
-DEAL::7492 3
-DEAL::7493 2
-DEAL::7494 2
-DEAL::7495 2
-DEAL::7496 2
-DEAL::7497 3
-DEAL::7498 2
-DEAL::7499 2
-DEAL::7500 2
-DEAL::7501 2
-DEAL::7502 2
-DEAL::7503 2
-DEAL::7504 2
-DEAL::7505 2
-DEAL::7506 2
-DEAL::7507 2
-DEAL::7508 2
-DEAL::7509 2
-DEAL::7510 3
-DEAL::7511 3
-DEAL::7512 3
-DEAL::7513 3
-DEAL::7514 3
-DEAL::7515 3
-DEAL::7516 3
-DEAL::7517 3
-DEAL::7518 3
-DEAL::7519 3
-DEAL::7520 3
-DEAL::7521 2
-DEAL::7522 2
-DEAL::7523 2
-DEAL::7524 2
-DEAL::7525 2
-DEAL::7526 2
-DEAL::7527 2
-DEAL::7528 3
-DEAL::7529 2
-DEAL::7530 2
-DEAL::7531 2
-DEAL::7532 3
-DEAL::7533 3
-DEAL::7534 3
-DEAL::7535 3
-DEAL::7536 3
-DEAL::7537 3
-DEAL::7538 3
-DEAL::7539 3
-DEAL::7540 0
-DEAL::7541 0
-DEAL::7542 0
-DEAL::7543 3
-DEAL::7544 0
-DEAL::7545 0
-DEAL::7546 0
-DEAL::7547 0
-DEAL::7548 0
-DEAL::7549 0
-DEAL::7550 0
-DEAL::7551 0
-DEAL::7552 0
-DEAL::7553 0
-DEAL::7554 0
-DEAL::7555 0
-DEAL::7556 0
-DEAL::7557 0
-DEAL::7558 0
-DEAL::7559 0
-DEAL::7560 0
-DEAL::7561 0
-DEAL::7562 0
-DEAL::7563 0
-DEAL::7564 0
-DEAL::7565 3
-DEAL::7566 3
-DEAL::7567 3
-DEAL::7568 3
-DEAL::7569 3
-DEAL::7570 0
-DEAL::7571 3
-DEAL::7572 3
-DEAL::7573 0
-DEAL::7574 3
-DEAL::7575 0
-DEAL::7576 3
-DEAL::7577 3
-DEAL::7578 3
-DEAL::7579 3
-DEAL::7580 3
-DEAL::7581 3
-DEAL::7582 0
-DEAL::7583 0
-DEAL::7584 0
-DEAL::7585 0
-DEAL::7586 0
-DEAL::7587 0
-DEAL::7588 0
-DEAL::7589 0
-DEAL::7590 0
-DEAL::7591 0
-DEAL::7592 0
-DEAL::7593 0
-DEAL::7594 0
-DEAL::7595 0
-DEAL::7596 0
-DEAL::7597 0
-DEAL::7598 0
-DEAL::7599 0
-DEAL::7600 0
-DEAL::7601 0
-DEAL::7602 0
-DEAL::7603 0
-DEAL::7604 0
-DEAL::7605 0
-DEAL::7606 0
-DEAL::7607 0
-DEAL::7608 0
-DEAL::7609 0
-DEAL::7610 3
-DEAL::7611 0
-DEAL::7612 0
-DEAL::7613 0
-DEAL::7614 0
-DEAL::7615 0
-DEAL::7616 0
-DEAL::7617 0
-DEAL::7618 3
-DEAL::7619 0
-DEAL::7620 0
-DEAL::7621 0
-DEAL::7622 3
-DEAL::7623 0
-DEAL::7624 0
-DEAL::7625 0
-DEAL::7626 0
-DEAL::7627 3
-DEAL::7628 3
-DEAL::7629 3
-DEAL::7630 3
-DEAL::7631 3
-DEAL::7632 3
-DEAL::7633 3
-DEAL::7634 3
-DEAL::7635 0
-DEAL::7636 3
-DEAL::7637 3
-DEAL::7638 0
-DEAL::7639 0
-DEAL::7640 0
-DEAL::7641 0
-DEAL::7642 0
-DEAL::7643 0
-DEAL::7644 0
-DEAL::7645 0
-DEAL::7646 0
-DEAL::7647 0
-DEAL::7648 0
-DEAL::7649 0
-DEAL::7650 0
-DEAL::7651 0
-DEAL::7652 0
-DEAL::7653 0
-DEAL::7654 0
-DEAL::7655 0
-DEAL::7656 3
-DEAL::7657 3
-DEAL::7658 3
-DEAL::7659 3
-DEAL::7660 3
-DEAL::7661 3
-DEAL::7662 3
-DEAL::7663 3
-DEAL::7664 3
-DEAL::7665 3
-DEAL::7666 3
-DEAL::7667 3
-DEAL::7668 3
-DEAL::7669 3
-DEAL::7670 3
-DEAL::7671 3
-DEAL::7672 3
-DEAL::7673 3
-DEAL::7674 3
-DEAL::7675 3
-DEAL::7676 3
-DEAL::7677 3
-DEAL::7678 3
-DEAL::7679 3
-DEAL::7680 3
-DEAL::7681 3
-DEAL::7682 3
-DEAL::7683 3
-DEAL::7684 3
-DEAL::7685 3
-DEAL::7686 3
-DEAL::7687 3
-DEAL::7688 3
-DEAL::7689 3
-DEAL::7690 3
-DEAL::7691 3
-DEAL::7692 3
-DEAL::7693 3
-DEAL::7694 3
-DEAL::7695 3
-DEAL::7696 3
-DEAL::7697 3
-DEAL::7698 3
-DEAL::7699 3
-DEAL::7700 3
-DEAL::7701 3
-DEAL::7702 3
-DEAL::7703 3
-DEAL::7704 3
-DEAL::7705 3
-DEAL::7706 3
-DEAL::7707 3
-DEAL::7708 3
-DEAL::7709 3
-DEAL::7710 3
-DEAL::7711 3
-DEAL::7712 3
-DEAL::7713 3
-DEAL::7714 3
-DEAL::7715 3
-DEAL::7716 3
-DEAL::7717 3
-DEAL::7718 3
-DEAL::7719 3
-DEAL::7720 3
-DEAL::7721 3
-DEAL::7722 3
-DEAL::7723 3
-DEAL::7724 3
-DEAL::7725 3
-DEAL::7726 3
-DEAL::7727 3
-DEAL::7728 3
-DEAL::7729 3
-DEAL::7730 3
-DEAL::7731 3
-DEAL::7732 3
-DEAL::7733 3
-DEAL::7734 3
-DEAL::7735 3
-DEAL::7736 3
-DEAL::7737 3
-DEAL::7738 3
-DEAL::7739 3
-DEAL::7740 3
-DEAL::7741 3
-DEAL::7742 3
-DEAL::7743 3
-DEAL::7744 3
-DEAL::7745 3
-DEAL::7746 3
-DEAL::7747 3
-DEAL::7748 3
-DEAL::7749 3
-DEAL::7750 3
-DEAL::7751 3
-DEAL::7752 3
-DEAL::7753 3
-DEAL::7754 3
-DEAL::7755 3
-DEAL::7756 3
-DEAL::7757 3
-DEAL::7758 3
-DEAL::7759 3
-DEAL::7760 3
-DEAL::7761 3
-DEAL::7762 3
-DEAL::7763 3
-DEAL::7764 3
-DEAL::7765 3
-DEAL::7766 3
-DEAL::7767 3
-DEAL::7768 3
-DEAL::7769 3
-DEAL::7770 3
-DEAL::7771 3
-DEAL::7772 3
-DEAL::7773 0
-DEAL::7774 0
-DEAL::7775 0
-DEAL::7776 0
-DEAL::7777 0
-DEAL::7778 0
-DEAL::7779 0
-DEAL::7780 0
-DEAL::7781 0
-DEAL::7782 0
-DEAL::7783 0
-DEAL::7784 0
-DEAL::7785 0
-DEAL::7786 0
-DEAL::7787 0
-DEAL::7788 0
-DEAL::7789 0
-DEAL::7790 0
-DEAL::7791 0
-DEAL::7792 0
-DEAL::7793 0
-DEAL::7794 0
-DEAL::7795 0
-DEAL::7796 0
-DEAL::7797 0
-DEAL::7798 0
-DEAL::7799 0
-DEAL::7800 0
-DEAL::7801 0
-DEAL::7802 0
-DEAL::7803 0
-DEAL::7804 0
-DEAL::7805 0
-DEAL::7806 0
-DEAL::7807 0
-DEAL::7808 0
-DEAL::7809 0
-DEAL::7810 0
-DEAL::7811 0
-DEAL::7812 0
-DEAL::7813 0
-DEAL::7814 0
-DEAL::7815 0
-DEAL::7816 0
-DEAL::7817 0
-DEAL::7818 0
-DEAL::7819 0
-DEAL::7820 0
-DEAL::7821 0
-DEAL::7822 0
-DEAL::7823 0
-DEAL::7824 0
-DEAL::7825 0
-DEAL::7826 0
-DEAL::7827 0
-DEAL::7828 0
-DEAL::7829 0
-DEAL::7830 0
-DEAL::7831 0
-DEAL::7832 0
-DEAL::7833 0
-DEAL::7834 0
-DEAL::7835 0
-DEAL::7836 0
-DEAL::7837 0
-DEAL::7838 0
-DEAL::7839 0
-DEAL::7840 0
-DEAL::7841 0
-DEAL::7842 0
-DEAL::7843 0
-DEAL::7844 0
-DEAL::7845 0
-DEAL::7846 0
-DEAL::7847 0
-DEAL::7848 0
-DEAL::7849 0
-DEAL::7850 0
-DEAL::7851 0
-DEAL::7852 0
-DEAL::7853 0
-DEAL::7854 0
-DEAL::7855 0
-DEAL::7856 0
-DEAL::7857 0
-DEAL::7858 0
-DEAL::7859 0
-DEAL::7860 0
-DEAL::7861 0
-DEAL::7862 0
-DEAL::7863 0
-DEAL::7864 0
-DEAL::7865 0
-DEAL::7866 0
-DEAL::7867 0
-DEAL::7868 0
-DEAL::7869 0
-DEAL::7870 0
-DEAL::7871 0
-DEAL::7872 0
-DEAL::7873 0
-DEAL::7874 0
-DEAL::7875 0
-DEAL::7876 0
-DEAL::7877 0
-DEAL::7878 0
-DEAL::7879 0
-DEAL::7880 0
-DEAL::7881 0
-DEAL::7882 0
-DEAL::7883 0
-DEAL::7884 0
-DEAL::7885 0
-DEAL::7886 0
-DEAL::7887 0
-DEAL::7888 0
-DEAL::7889 0
-DEAL::7890 0
-DEAL::7891 0
-DEAL::7892 0
-DEAL::7893 0
-DEAL::7894 0
-DEAL::7895 0
-DEAL::7896 0
-DEAL::7897 0
-DEAL::7898 0
-DEAL::7899 0
-DEAL::7900 0
-DEAL::7901 0
-DEAL::7902 0
-DEAL::7903 0
-DEAL::7904 0
-DEAL::7905 0
-DEAL::7906 0
-DEAL::7907 0
-DEAL::7908 0
-DEAL::7909 0
-DEAL::7910 0
-DEAL::7911 0
-DEAL::7912 0
-DEAL::7913 0
-DEAL::7914 0
-DEAL::7915 0
-DEAL::7916 0
-DEAL::7917 0
-DEAL::7918 0
-DEAL::7919 0
-DEAL::7920 0
-DEAL::7921 0
-DEAL::7922 0
-DEAL::7923 0
-DEAL::7924 0
-DEAL::7925 0
-DEAL::7926 0
-DEAL::7927 0
-DEAL::7928 0
-DEAL::7929 0
-DEAL::7930 0
-DEAL::7931 0
-DEAL::7932 0
-DEAL::7933 0
-DEAL::7934 0
-DEAL::7935 0
-DEAL::7936 0
-DEAL::7937 0
-DEAL::7938 0
-DEAL::7939 0
-DEAL::7940 0
-DEAL::7941 0
-DEAL::7942 0
-DEAL::7943 0
-DEAL::7944 0
-DEAL::7945 0
-DEAL::7946 0
-DEAL::7947 0
-DEAL::7948 0
-DEAL::7949 0
-DEAL::7950 0
-DEAL::7951 0
-DEAL::7952 0
-DEAL::7953 0
-DEAL::7954 0
-DEAL::7955 0
-DEAL::7956 0
-DEAL::7957 0
-DEAL::7958 0
-DEAL::7959 0
-DEAL::7960 0
-DEAL::7961 0
-DEAL::7962 0
-DEAL::7963 0
-DEAL::7964 0
-DEAL::7965 0
-DEAL::7966 0
-DEAL::7967 0
-DEAL::7968 0
-DEAL::7969 0
-DEAL::7970 0
-DEAL::7971 0
-DEAL::7972 0
-DEAL::7973 0
-DEAL::7974 0
-DEAL::7975 0
-DEAL::7976 0
-DEAL::7977 0
-DEAL::7978 0
-DEAL::7979 0
-DEAL::7980 0
-DEAL::7981 0
-DEAL::7982 0
-DEAL::7983 0
-DEAL::7984 0
-DEAL::7985 0
-DEAL::7986 0
-DEAL::7987 0
-DEAL::7988 0
-DEAL::7989 0
-DEAL::7990 0
-DEAL::7991 0
-DEAL::7992 0
-DEAL::7993 0
-DEAL::7994 0
-DEAL::7995 0
-DEAL::7996 0
-DEAL::7997 0
-DEAL::7998 0
-DEAL::7999 0
-DEAL::8000 0
-DEAL::8001 0
-DEAL::8002 0
-DEAL::8003 0
-DEAL::8004 0
-DEAL::8005 0
-DEAL::8006 0
-DEAL::8007 0
-DEAL::8008 0
-DEAL::8009 0
-DEAL::8010 0
-DEAL::8011 0
-DEAL::8012 0
-DEAL::8013 0
-DEAL::8014 0
-DEAL::8015 0
-DEAL::8016 0
-DEAL::8017 0
-DEAL::8018 0
-DEAL::8019 0
-DEAL::8020 0
-DEAL::8021 0
-DEAL::8022 0
-DEAL::8023 0
-DEAL::8024 0
-DEAL::8025 0
-DEAL::8026 0
-DEAL::8027 0
-DEAL::8028 0
-DEAL::8029 0
-DEAL::8030 0
-DEAL::8031 0
-DEAL::8032 0
-DEAL::8033 0
-DEAL::8034 0
-DEAL::8035 0
-DEAL::8036 0
-DEAL::8037 0
-DEAL::8038 0
-DEAL::8039 0
-DEAL::8040 0
-DEAL::8041 0
-DEAL::8042 0
-DEAL::8043 0
-DEAL::8044 0
-DEAL::8045 0
-DEAL::8046 0
-DEAL::8047 0
-DEAL::8048 0
-DEAL::8049 0
-DEAL::8050 0
-DEAL::8051 0
-DEAL::8052 0
-DEAL::8053 0
-DEAL::8054 0
-DEAL::8055 0
-DEAL::8056 0
-DEAL::8057 0
-DEAL::8058 0
-DEAL::8059 0
-DEAL::8060 0
-DEAL::8061 0
-DEAL::8062 0
-DEAL::8063 0
-DEAL::8064 0
-DEAL::8065 0
-DEAL::8066 0
-DEAL::8067 0
-DEAL::8068 0
-DEAL::8069 0
-DEAL::8070 0
-DEAL::8071 0
-DEAL::8072 0
-DEAL::8073 0
-DEAL::8074 0
-DEAL::8075 0
-DEAL::8076 0
-DEAL::8077 0
-DEAL::8078 0
-DEAL::8079 0
-DEAL::8080 0
-DEAL::8081 0
-DEAL::8082 0
-DEAL::8083 0
-DEAL::8084 0
-DEAL::8085 0
-DEAL::8086 0
-DEAL::8087 0
-DEAL::8088 0
-DEAL::8089 0
-DEAL::8090 0
-DEAL::8091 0
-DEAL::8092 0
-DEAL::8093 0
-DEAL::8094 0
-DEAL::8095 0
-DEAL::8096 0
-DEAL::8097 0
-DEAL::8098 0
-DEAL::8099 0
-DEAL::8100 0
-DEAL::8101 0
-DEAL::8102 0
-DEAL::8103 0
-DEAL::8104 0
-DEAL::8105 0
-DEAL::8106 0
-DEAL::8107 0
-DEAL::8108 0
-DEAL::8109 0
-DEAL::8110 0
-DEAL::8111 0
-DEAL::8112 0
-DEAL::8113 0
-DEAL::8114 0
-DEAL::8115 0
-DEAL::8116 0
-DEAL::8117 0
-DEAL::8118 0
-DEAL::8119 0
-DEAL::8120 0
-DEAL::8121 1
-DEAL::8122 1
-DEAL::8123 1
-DEAL::8124 1
-DEAL::8125 1
-DEAL::8126 1
-DEAL::8127 1
-DEAL::8128 1
-DEAL::8129 1
-DEAL::8130 1
-DEAL::8131 1
-DEAL::8132 1
-DEAL::8133 1
-DEAL::8134 1
-DEAL::8135 1
-DEAL::8136 1
-DEAL::8137 1
-DEAL::8138 1
-DEAL::8139 1
-DEAL::8140 1
-DEAL::8141 1
-DEAL::8142 1
-DEAL::8143 1
-DEAL::8144 1
-DEAL::8145 1
-DEAL::8146 1
-DEAL::8147 1
-DEAL::8148 1
-DEAL::8149 1
-DEAL::8150 1
-DEAL::8151 1
-DEAL::8152 1
-DEAL::8153 1
-DEAL::8154 1
-DEAL::8155 1
-DEAL::8156 1
-DEAL::8157 1
-DEAL::8158 1
-DEAL::8159 1
-DEAL::8160 1
-DEAL::8161 1
-DEAL::8162 1
-DEAL::8163 1
-DEAL::8164 1
-DEAL::8165 1
-DEAL::8166 1
-DEAL::8167 1
-DEAL::8168 1
-DEAL::8169 1
-DEAL::8170 1
-DEAL::8171 1
-DEAL::8172 1
-DEAL::8173 1
-DEAL::8174 1
-DEAL::8175 1
-DEAL::8176 1
-DEAL::8177 1
-DEAL::8178 1
-DEAL::8179 1
-DEAL::8180 1
-DEAL::8181 1
-DEAL::8182 1
-DEAL::8183 1
-DEAL::8184 1
-DEAL::8185 1
-DEAL::8186 1
-DEAL::8187 1
-DEAL::8188 1
-DEAL::8189 1
-DEAL::8190 1
-DEAL::8191 1
-DEAL::8192 1
-DEAL::8193 1
-DEAL::8194 1
-DEAL::8195 1
-DEAL::8196 1
-DEAL::8197 1
-DEAL::8198 1
-DEAL::8199 1
-DEAL::8200 1
-DEAL::8201 1
-DEAL::8202 1
-DEAL::8203 1
-DEAL::8204 1
-DEAL::8205 1
-DEAL::8206 1
-DEAL::8207 1
-DEAL::8208 1
-DEAL::8209 1
-DEAL::8210 1
-DEAL::8211 1
-DEAL::8212 1
-DEAL::8213 1
-DEAL::8214 1
-DEAL::8215 1
-DEAL::8216 1
-DEAL::8217 1
-DEAL::8218 1
-DEAL::8219 1
-DEAL::8220 1
-DEAL::8221 1
-DEAL::8222 1
-DEAL::8223 1
-DEAL::8224 1
-DEAL::8225 1
-DEAL::8226 1
-DEAL::8227 1
-DEAL::8228 1
-DEAL::8229 1
-DEAL::8230 1
-DEAL::8231 1
-DEAL::8232 1
-DEAL::8233 1
-DEAL::8234 1
-DEAL::8235 1
-DEAL::8236 1
-DEAL::8237 1
-DEAL::8238 2
-DEAL::8239 2
-DEAL::8240 2
-DEAL::8241 2
-DEAL::8242 2
-DEAL::8243 2
-DEAL::8244 2
-DEAL::8245 2
-DEAL::8246 2
-DEAL::8247 2
-DEAL::8248 2
-DEAL::8249 2
-DEAL::8250 2
-DEAL::8251 2
-DEAL::8252 2
-DEAL::8253 2
-DEAL::8254 2
-DEAL::8255 2
-DEAL::8256 2
-DEAL::8257 2
-DEAL::8258 2
-DEAL::8259 2
-DEAL::8260 2
-DEAL::8261 2
-DEAL::8262 2
-DEAL::8263 2
-DEAL::8264 2
-DEAL::8265 2
-DEAL::8266 2
-DEAL::8267 2
-DEAL::8268 2
-DEAL::8269 2
-DEAL::8270 2
-DEAL::8271 2
-DEAL::8272 2
-DEAL::8273 2
-DEAL::8274 2
-DEAL::8275 2
-DEAL::8276 2
-DEAL::8277 2
-DEAL::8278 2
-DEAL::8279 2
-DEAL::8280 2
-DEAL::8281 2
-DEAL::8282 2
-DEAL::8283 2
-DEAL::8284 2
-DEAL::8285 2
-DEAL::8286 2
-DEAL::8287 2
-DEAL::8288 2
-DEAL::8289 2
-DEAL::8290 2
-DEAL::8291 2
-DEAL::8292 2
-DEAL::8293 2
-DEAL::8294 2
-DEAL::8295 2
-DEAL::8296 2
-DEAL::8297 2
-DEAL::8298 2
-DEAL::8299 2
-DEAL::8300 2
-DEAL::8301 2
-DEAL::8302 2
-DEAL::8303 2
-DEAL::8304 2
-DEAL::8305 2
-DEAL::8306 2
-DEAL::8307 2
-DEAL::8308 2
-DEAL::8309 2
-DEAL::8310 2
-DEAL::8311 2
-DEAL::8312 2
-DEAL::8313 2
-DEAL::8314 2
-DEAL::8315 2
-DEAL::8316 2
-DEAL::8317 2
-DEAL::8318 2
-DEAL::8319 2
-DEAL::8320 2
-DEAL::8321 2
-DEAL::8322 2
-DEAL::8323 2
-DEAL::8324 2
-DEAL::8325 2
-DEAL::8326 2
-DEAL::8327 2
-DEAL::8328 2
-DEAL::8329 2
-DEAL::8330 2
-DEAL::8331 2
-DEAL::8332 2
-DEAL::8333 2
-DEAL::8334 2
-DEAL::8335 2
-DEAL::8336 2
-DEAL::8337 2
-DEAL::8338 2
-DEAL::8339 2
-DEAL::8340 2
-DEAL::8341 2
-DEAL::8342 2
-DEAL::8343 2
-DEAL::8344 2
-DEAL::8345 2
-DEAL::8346 2
-DEAL::8347 2
-DEAL::8348 2
-DEAL::8349 2
-DEAL::8350 2
-DEAL::8351 2
-DEAL::8352 2
-DEAL::8353 2
-DEAL::8354 2
-DEAL::8355 3
-DEAL::8356 3
-DEAL::8357 3
-DEAL::8358 3
-DEAL::8359 3
-DEAL::8360 3
-DEAL::8361 3
-DEAL::8362 3
-DEAL::8363 3
-DEAL::8364 3
-DEAL::8365 3
-DEAL::8366 3
-DEAL::8367 3
-DEAL::8368 3
-DEAL::8369 3
-DEAL::8370 3
-DEAL::8371 3
-DEAL::8372 3
-DEAL::8373 3
-DEAL::8374 3
-DEAL::8375 3
-DEAL::8376 3
-DEAL::8377 3
-DEAL::8378 3
-DEAL::8379 3
-DEAL::8380 3
-DEAL::8381 3
-DEAL::8382 3
-DEAL::8383 3
-DEAL::8384 3
-DEAL::8385 3
-DEAL::8386 3
-DEAL::8387 3
-DEAL::8388 3
-DEAL::8389 3
-DEAL::8390 3
-DEAL::8391 3
-DEAL::8392 3
-DEAL::8393 3
-DEAL::8394 3
-DEAL::8395 3
-DEAL::8396 3
-DEAL::8397 3
-DEAL::8398 3
-DEAL::8399 3
-DEAL::8400 3
-DEAL::8401 3
-DEAL::8402 3
-DEAL::8403 3
-DEAL::8404 3
-DEAL::8405 3
-DEAL::8406 3
-DEAL::8407 3
-DEAL::8408 3
-DEAL::8409 3
-DEAL::8410 3
-DEAL::8411 3
-DEAL::8412 3
-DEAL::8413 3
-DEAL::8414 3
-DEAL::8415 3
-DEAL::8416 3
-DEAL::8417 3
-DEAL::8418 3
-DEAL::8419 3
-DEAL::8420 3
-DEAL::8421 3
-DEAL::8422 3
-DEAL::8423 3
-DEAL::8424 3
-DEAL::8425 3
-DEAL::8426 3
-DEAL::8427 3
-DEAL::8428 3
-DEAL::8429 3
-DEAL::8430 3
-DEAL::8431 3
-DEAL::8432 3
-DEAL::8433 3
-DEAL::8434 3
-DEAL::8435 3
-DEAL::8436 3
-DEAL::8437 3
-DEAL::8438 3
-DEAL::8439 3
-DEAL::8440 3
-DEAL::8441 3
-DEAL::8442 3
-DEAL::8443 3
-DEAL::8444 3
-DEAL::8445 3
-DEAL::8446 3
-DEAL::8447 3
-DEAL::8448 3
-DEAL::8449 3
-DEAL::8450 3
-DEAL::8451 3
-DEAL::8452 3
-DEAL::8453 3
-DEAL::8454 3
-DEAL::8455 3
-DEAL::8456 3
-DEAL::8457 3
-DEAL::8458 3
-DEAL::8459 3
-DEAL::8460 3
-DEAL::8461 3
-DEAL::8462 3
-DEAL::8463 3
-DEAL::8464 3
-DEAL::8465 3
-DEAL::8466 3
-DEAL::8467 3
-DEAL::8468 3
-DEAL::8469 3
-DEAL::8470 3
-DEAL::8471 3
-DEAL::8472 1
-DEAL::8473 1
-DEAL::8474 1
-DEAL::8475 1
-DEAL::8476 1
-DEAL::8477 1
-DEAL::8478 1
-DEAL::8479 1
-DEAL::8480 1
-DEAL::8481 1
-DEAL::8482 1
-DEAL::8483 1
-DEAL::8484 1
-DEAL::8485 1
-DEAL::8486 1
-DEAL::8487 1
-DEAL::8488 1
-DEAL::8489 1
-DEAL::8490 1
-DEAL::8491 1
-DEAL::8492 1
-DEAL::8493 1
-DEAL::8494 1
-DEAL::8495 1
-DEAL::8496 1
-DEAL::8497 1
-DEAL::8498 1
-DEAL::8499 1
-DEAL::8500 1
-DEAL::8501 1
-DEAL::8502 1
-DEAL::8503 1
-DEAL::8504 1
-DEAL::8505 1
-DEAL::8506 1
-DEAL::8507 1
-DEAL::8508 1
-DEAL::8509 1
-DEAL::8510 1
-DEAL::8511 1
-DEAL::8512 1
-DEAL::8513 1
-DEAL::8514 1
-DEAL::8515 1
-DEAL::8516 1
-DEAL::8517 1
-DEAL::8518 1
-DEAL::8519 1
-DEAL::8520 1
-DEAL::8521 1
-DEAL::8522 1
-DEAL::8523 1
-DEAL::8524 1
-DEAL::8525 1
-DEAL::8526 1
-DEAL::8527 1
-DEAL::8528 1
-DEAL::8529 1
-DEAL::8530 1
-DEAL::8531 1
-DEAL::8532 1
-DEAL::8533 1
-DEAL::8534 1
-DEAL::8535 1
-DEAL::8536 1
-DEAL::8537 1
-DEAL::8538 1
-DEAL::8539 1
-DEAL::8540 1
-DEAL::8541 1
-DEAL::8542 1
-DEAL::8543 1
-DEAL::8544 1
-DEAL::8545 1
-DEAL::8546 1
-DEAL::8547 1
-DEAL::8548 1
-DEAL::8549 1
-DEAL::8550 1
-DEAL::8551 1
-DEAL::8552 1
-DEAL::8553 1
-DEAL::8554 1
-DEAL::8555 1
-DEAL::8556 1
-DEAL::8557 1
-DEAL::8558 1
-DEAL::8559 1
-DEAL::8560 1
-DEAL::8561 1
-DEAL::8562 1
-DEAL::8563 1
-DEAL::8564 1
-DEAL::8565 1
-DEAL::8566 1
-DEAL::8567 1
-DEAL::8568 1
-DEAL::8569 1
-DEAL::8570 1
-DEAL::8571 1
-DEAL::8572 1
-DEAL::8573 1
-DEAL::8574 1
-DEAL::8575 1
-DEAL::8576 1
-DEAL::8577 1
-DEAL::8578 1
-DEAL::8579 1
-DEAL::8580 1
-DEAL::8581 1
-DEAL::8582 1
-DEAL::8583 1
-DEAL::8584 1
-DEAL::8585 1
-DEAL::8586 1
-DEAL::8587 1
-DEAL::8588 1
+DEAL::7329 1
+DEAL::7330 1
+DEAL::7331 1
+DEAL::7332 1
+DEAL::7333 1
+DEAL::7334 1
+DEAL::7335 1
+DEAL::7336 1
+DEAL::7337 1
+DEAL::7338 1
+DEAL::7339 1
+DEAL::7340 1
+DEAL::7341 1
+DEAL::7342 1
+DEAL::7343 1
+DEAL::7344 1
+DEAL::7345 1
+DEAL::7346 1
+DEAL::7347 1
+DEAL::7348 1
+DEAL::7349 1
+DEAL::7350 1
+DEAL::7351 1
+DEAL::7352 1
+DEAL::7353 1
+DEAL::7354 1
+DEAL::7355 1
+DEAL::7356 1
+DEAL::7357 1
+DEAL::7358 1
+DEAL::7359 1
+DEAL::7360 1
+DEAL::7361 1
+DEAL::7362 1
+DEAL::7363 1
+DEAL::7364 1
+DEAL::7365 1
+DEAL::7366 1
+DEAL::7367 1
+DEAL::7368 1
+DEAL::7369 1
+DEAL::7370 1
+DEAL::7371 1
+DEAL::7372 1
+DEAL::7373 1
+DEAL::7374 1
+DEAL::7375 1
+DEAL::7376 1
+DEAL::7377 1
+DEAL::7378 1
+DEAL::7379 1
+DEAL::7380 1
+DEAL::7381 1
+DEAL::7382 1
+DEAL::7383 1
+DEAL::7384 1
+DEAL::7385 1
+DEAL::7386 1
+DEAL::7387 1
+DEAL::7388 1
+DEAL::7389 1
+DEAL::7390 1
+DEAL::7391 1
+DEAL::7392 1
+DEAL::7393 1
+DEAL::7394 1
+DEAL::7395 1
+DEAL::7396 1
+DEAL::7397 1
+DEAL::7398 1
+DEAL::7399 1
+DEAL::7400 1
+DEAL::7401 1
+DEAL::7402 1
+DEAL::7403 1
+DEAL::7404 1
+DEAL::7405 1
+DEAL::7406 1
+DEAL::7407 1
+DEAL::7408 1
+DEAL::7409 1
+DEAL::7410 1
+DEAL::7411 1
+DEAL::7412 1
+DEAL::7413 1
+DEAL::7414 1
+DEAL::7415 1
+DEAL::7416 1
+DEAL::7417 1
+DEAL::7418 1
+DEAL::7419 1
+DEAL::7420 1
+DEAL::7421 1
+DEAL::7422 1
+DEAL::7423 1
+DEAL::7424 1
+DEAL::7425 1
+DEAL::7426 1
+DEAL::7427 1
+DEAL::7428 1
+DEAL::7429 1
+DEAL::7430 1
+DEAL::7431 1
+DEAL::7432 1
+DEAL::7433 1
+DEAL::7434 1
+DEAL::7435 1
+DEAL::7436 1
+DEAL::7437 1
+DEAL::7438 1
+DEAL::7439 1
+DEAL::7440 1
+DEAL::7441 1
+DEAL::7442 1
+DEAL::7443 1
+DEAL::7444 1
+DEAL::7445 1
+DEAL::7446 1
+DEAL::7447 1
+DEAL::7448 1
+DEAL::7449 1
+DEAL::7450 1
+DEAL::7451 1
+DEAL::7452 1
+DEAL::7453 1
+DEAL::7454 1
+DEAL::7455 1
+DEAL::7456 1
+DEAL::7457 1
+DEAL::7458 1
+DEAL::7459 1
+DEAL::7460 1
+DEAL::7461 1
+DEAL::7462 1
+DEAL::7463 1
+DEAL::7464 1
+DEAL::7465 1
+DEAL::7466 1
+DEAL::7467 1
+DEAL::7468 1
+DEAL::7469 1
+DEAL::7470 1
+DEAL::7471 1
+DEAL::7472 1
+DEAL::7473 1
+DEAL::7474 1
+DEAL::7475 1
+DEAL::7476 1
+DEAL::7477 1
+DEAL::7478 1
+DEAL::7479 1
+DEAL::7480 1
+DEAL::7481 1
+DEAL::7482 1
+DEAL::7483 1
+DEAL::7484 1
+DEAL::7485 1
+DEAL::7486 1
+DEAL::7487 1
+DEAL::7488 1
+DEAL::7489 1
+DEAL::7490 1
+DEAL::7491 1
+DEAL::7492 1
+DEAL::7493 1
+DEAL::7494 1
+DEAL::7495 1
+DEAL::7496 1
+DEAL::7497 1
+DEAL::7498 1
+DEAL::7499 1
+DEAL::7500 1
+DEAL::7501 1
+DEAL::7502 1
+DEAL::7503 1
+DEAL::7504 1
+DEAL::7505 1
+DEAL::7506 1
+DEAL::7507 1
+DEAL::7508 1
+DEAL::7509 1
+DEAL::7510 1
+DEAL::7511 1
+DEAL::7512 1
+DEAL::7513 1
+DEAL::7514 1
+DEAL::7515 1
+DEAL::7516 1
+DEAL::7517 1
+DEAL::7518 1
+DEAL::7519 1
+DEAL::7520 1
+DEAL::7521 1
+DEAL::7522 1
+DEAL::7523 1
+DEAL::7524 1
+DEAL::7525 1
+DEAL::7526 1
+DEAL::7527 1
+DEAL::7528 1
+DEAL::7529 1
+DEAL::7530 1
+DEAL::7531 1
+DEAL::7532 1
+DEAL::7533 1
+DEAL::7534 1
+DEAL::7535 1
+DEAL::7536 1
+DEAL::7537 1
+DEAL::7538 1
+DEAL::7539 1
+DEAL::7540 1
+DEAL::7541 1
+DEAL::7542 1
+DEAL::7543 1
+DEAL::7544 1
+DEAL::7545 1
+DEAL::7546 1
+DEAL::7547 1
+DEAL::7548 1
+DEAL::7549 1
+DEAL::7550 1
+DEAL::7551 1
+DEAL::7552 1
+DEAL::7553 1
+DEAL::7554 1
+DEAL::7555 1
+DEAL::7556 1
+DEAL::7557 1
+DEAL::7558 1
+DEAL::7559 1
+DEAL::7560 1
+DEAL::7561 1
+DEAL::7562 1
+DEAL::7563 1
+DEAL::7564 1
+DEAL::7565 1
+DEAL::7566 1
+DEAL::7567 1
+DEAL::7568 1
+DEAL::7569 1
+DEAL::7570 1
+DEAL::7571 1
+DEAL::7572 1
+DEAL::7573 1
+DEAL::7574 1
+DEAL::7575 1
+DEAL::7576 1
+DEAL::7577 1
+DEAL::7578 1
+DEAL::7579 1
+DEAL::7580 1
+DEAL::7581 1
+DEAL::7582 1
+DEAL::7583 1
+DEAL::7584 1
+DEAL::7585 1
+DEAL::7586 1
+DEAL::7587 1
+DEAL::7588 1
+DEAL::7589 1
+DEAL::7590 1
+DEAL::7591 1
+DEAL::7592 1
+DEAL::7593 1
+DEAL::7594 1
+DEAL::7595 1
+DEAL::7596 1
+DEAL::7597 1
+DEAL::7598 1
+DEAL::7599 1
+DEAL::7600 1
+DEAL::7601 1
+DEAL::7602 1
+DEAL::7603 1
+DEAL::7604 1
+DEAL::7605 1
+DEAL::7606 1
+DEAL::7607 1
+DEAL::7608 1
+DEAL::7609 1
+DEAL::7610 1
+DEAL::7611 1
+DEAL::7612 1
+DEAL::7613 1
+DEAL::7614 1
+DEAL::7615 1
+DEAL::7616 1
+DEAL::7617 1
+DEAL::7618 1
+DEAL::7619 1
+DEAL::7620 1
+DEAL::7621 1
+DEAL::7622 1
+DEAL::7623 1
+DEAL::7624 1
+DEAL::7625 1
+DEAL::7626 1
+DEAL::7627 1
+DEAL::7628 1
+DEAL::7629 1
+DEAL::7630 1
+DEAL::7631 1
+DEAL::7632 1
+DEAL::7633 1
+DEAL::7634 1
+DEAL::7635 1
+DEAL::7636 1
+DEAL::7637 1
+DEAL::7638 1
+DEAL::7639 1
+DEAL::7640 1
+DEAL::7641 1
+DEAL::7642 1
+DEAL::7643 1
+DEAL::7644 1
+DEAL::7645 1
+DEAL::7646 1
+DEAL::7647 1
+DEAL::7648 1
+DEAL::7649 1
+DEAL::7650 1
+DEAL::7651 1
+DEAL::7652 1
+DEAL::7653 1
+DEAL::7654 1
+DEAL::7655 1
+DEAL::7656 0
+DEAL::7657 0
+DEAL::7658 0
+DEAL::7659 0
+DEAL::7660 1
+DEAL::7661 0
+DEAL::7662 1
+DEAL::7663 0
+DEAL::7664 0
+DEAL::7665 0
+DEAL::7666 0
+DEAL::7667 1
+DEAL::7668 1
+DEAL::7669 1
+DEAL::7670 1
+DEAL::7671 0
+DEAL::7672 0
+DEAL::7673 0
+DEAL::7674 0
+DEAL::7675 0
+DEAL::7676 0
+DEAL::7677 0
+DEAL::7678 0
+DEAL::7679 0
+DEAL::7680 1
+DEAL::7681 0
+DEAL::7682 0
+DEAL::7683 1
+DEAL::7684 1
+DEAL::7685 0
+DEAL::7686 0
+DEAL::7687 0
+DEAL::7688 0
+DEAL::7689 1
+DEAL::7690 0
+DEAL::7691 0
+DEAL::7692 0
+DEAL::7693 0
+DEAL::7694 0
+DEAL::7695 0
+DEAL::7696 0
+DEAL::7697 1
+DEAL::7698 0
+DEAL::7699 0
+DEAL::7700 0
+DEAL::7701 1
+DEAL::7702 0
+DEAL::7703 0
+DEAL::7704 0
+DEAL::7705 1
+DEAL::7706 0
+DEAL::7707 0
+DEAL::7708 0
+DEAL::7709 0
+DEAL::7710 0
+DEAL::7711 0
+DEAL::7712 0
+DEAL::7713 0
+DEAL::7714 1
+DEAL::7715 0
+DEAL::7716 1
+DEAL::7717 0
+DEAL::7718 0
+DEAL::7719 1
+DEAL::7720 1
+DEAL::7721 0
+DEAL::7722 0
+DEAL::7723 0
+DEAL::7724 0
+DEAL::7725 1
+DEAL::7726 0
+DEAL::7727 1
+DEAL::7728 1
+DEAL::7729 1
+DEAL::7730 1
+DEAL::7731 1
+DEAL::7732 1
+DEAL::7733 1
+DEAL::7734 1
+DEAL::7735 1
+DEAL::7736 1
+DEAL::7737 1
+DEAL::7738 1
+DEAL::7739 1
+DEAL::7740 1
+DEAL::7741 1
+DEAL::7742 1
+DEAL::7743 1
+DEAL::7744 1
+DEAL::7745 1
+DEAL::7746 1
+DEAL::7747 1
+DEAL::7748 1
+DEAL::7749 1
+DEAL::7750 1
+DEAL::7751 1
+DEAL::7752 1
+DEAL::7753 1
+DEAL::7754 1
+DEAL::7755 1
+DEAL::7756 1
+DEAL::7757 1
+DEAL::7758 1
+DEAL::7759 1
+DEAL::7760 1
+DEAL::7761 1
+DEAL::7762 1
+DEAL::7763 1
+DEAL::7764 1
+DEAL::7765 1
+DEAL::7766 1
+DEAL::7767 1
+DEAL::7768 1
+DEAL::7769 1
+DEAL::7770 1
+DEAL::7771 1
+DEAL::7772 1
+DEAL::7773 4
+DEAL::7774 4
+DEAL::7775 4
+DEAL::7776 4
+DEAL::7777 4
+DEAL::7778 4
+DEAL::7779 4
+DEAL::7780 4
+DEAL::7781 4
+DEAL::7782 4
+DEAL::7783 4
+DEAL::7784 4
+DEAL::7785 4
+DEAL::7786 4
+DEAL::7787 4
+DEAL::7788 4
+DEAL::7789 4
+DEAL::7790 4
+DEAL::7791 4
+DEAL::7792 4
+DEAL::7793 4
+DEAL::7794 4
+DEAL::7795 4
+DEAL::7796 4
+DEAL::7797 4
+DEAL::7798 4
+DEAL::7799 4
+DEAL::7800 4
+DEAL::7801 4
+DEAL::7802 4
+DEAL::7803 4
+DEAL::7804 4
+DEAL::7805 4
+DEAL::7806 4
+DEAL::7807 4
+DEAL::7808 4
+DEAL::7809 4
+DEAL::7810 4
+DEAL::7811 4
+DEAL::7812 4
+DEAL::7813 4
+DEAL::7814 4
+DEAL::7815 4
+DEAL::7816 4
+DEAL::7817 4
+DEAL::7818 4
+DEAL::7819 4
+DEAL::7820 4
+DEAL::7821 4
+DEAL::7822 4
+DEAL::7823 4
+DEAL::7824 4
+DEAL::7825 4
+DEAL::7826 4
+DEAL::7827 4
+DEAL::7828 4
+DEAL::7829 4
+DEAL::7830 4
+DEAL::7831 4
+DEAL::7832 4
+DEAL::7833 4
+DEAL::7834 4
+DEAL::7835 4
+DEAL::7836 4
+DEAL::7837 4
+DEAL::7838 4
+DEAL::7839 4
+DEAL::7840 4
+DEAL::7841 4
+DEAL::7842 4
+DEAL::7843 4
+DEAL::7844 4
+DEAL::7845 4
+DEAL::7846 4
+DEAL::7847 4
+DEAL::7848 4
+DEAL::7849 4
+DEAL::7850 4
+DEAL::7851 4
+DEAL::7852 4
+DEAL::7853 4
+DEAL::7854 4
+DEAL::7855 4
+DEAL::7856 4
+DEAL::7857 4
+DEAL::7858 4
+DEAL::7859 4
+DEAL::7860 4
+DEAL::7861 4
+DEAL::7862 4
+DEAL::7863 4
+DEAL::7864 4
+DEAL::7865 4
+DEAL::7866 4
+DEAL::7867 4
+DEAL::7868 4
+DEAL::7869 4
+DEAL::7870 4
+DEAL::7871 4
+DEAL::7872 4
+DEAL::7873 4
+DEAL::7874 4
+DEAL::7875 4
+DEAL::7876 4
+DEAL::7877 4
+DEAL::7878 4
+DEAL::7879 4
+DEAL::7880 4
+DEAL::7881 4
+DEAL::7882 4
+DEAL::7883 4
+DEAL::7884 4
+DEAL::7885 4
+DEAL::7886 4
+DEAL::7887 4
+DEAL::7888 4
+DEAL::7889 4
+DEAL::7890 3
+DEAL::7891 3
+DEAL::7892 3
+DEAL::7893 3
+DEAL::7894 3
+DEAL::7895 3
+DEAL::7896 3
+DEAL::7897 3
+DEAL::7898 3
+DEAL::7899 3
+DEAL::7900 3
+DEAL::7901 3
+DEAL::7902 3
+DEAL::7903 3
+DEAL::7904 3
+DEAL::7905 3
+DEAL::7906 3
+DEAL::7907 3
+DEAL::7908 3
+DEAL::7909 3
+DEAL::7910 3
+DEAL::7911 3
+DEAL::7912 3
+DEAL::7913 3
+DEAL::7914 3
+DEAL::7915 3
+DEAL::7916 3
+DEAL::7917 3
+DEAL::7918 3
+DEAL::7919 3
+DEAL::7920 3
+DEAL::7921 3
+DEAL::7922 3
+DEAL::7923 3
+DEAL::7924 3
+DEAL::7925 3
+DEAL::7926 3
+DEAL::7927 3
+DEAL::7928 3
+DEAL::7929 3
+DEAL::7930 3
+DEAL::7931 3
+DEAL::7932 3
+DEAL::7933 3
+DEAL::7934 3
+DEAL::7935 3
+DEAL::7936 3
+DEAL::7937 3
+DEAL::7938 3
+DEAL::7939 3
+DEAL::7940 3
+DEAL::7941 3
+DEAL::7942 3
+DEAL::7943 3
+DEAL::7944 3
+DEAL::7945 3
+DEAL::7946 3
+DEAL::7947 3
+DEAL::7948 3
+DEAL::7949 3
+DEAL::7950 4
+DEAL::7951 3
+DEAL::7952 3
+DEAL::7953 3
+DEAL::7954 3
+DEAL::7955 3
+DEAL::7956 3
+DEAL::7957 3
+DEAL::7958 3
+DEAL::7959 3
+DEAL::7960 3
+DEAL::7961 3
+DEAL::7962 3
+DEAL::7963 3
+DEAL::7964 3
+DEAL::7965 3
+DEAL::7966 3
+DEAL::7967 3
+DEAL::7968 3
+DEAL::7969 3
+DEAL::7970 3
+DEAL::7971 3
+DEAL::7972 3
+DEAL::7973 3
+DEAL::7974 3
+DEAL::7975 3
+DEAL::7976 3
+DEAL::7977 3
+DEAL::7978 3
+DEAL::7979 3
+DEAL::7980 3
+DEAL::7981 3
+DEAL::7982 3
+DEAL::7983 3
+DEAL::7984 3
+DEAL::7985 3
+DEAL::7986 3
+DEAL::7987 3
+DEAL::7988 3
+DEAL::7989 3
+DEAL::7990 3
+DEAL::7991 3
+DEAL::7992 3
+DEAL::7993 3
+DEAL::7994 3
+DEAL::7995 3
+DEAL::7996 3
+DEAL::7997 3
+DEAL::7998 3
+DEAL::7999 3
+DEAL::8000 3
+DEAL::8001 3
+DEAL::8002 3
+DEAL::8003 3
+DEAL::8004 3
+DEAL::8005 3
+DEAL::8006 3
+DEAL::8007 4
+DEAL::8008 4
+DEAL::8009 4
+DEAL::8010 4
+DEAL::8011 4
+DEAL::8012 4
+DEAL::8013 4
+DEAL::8014 4
+DEAL::8015 4
+DEAL::8016 4
+DEAL::8017 4
+DEAL::8018 4
+DEAL::8019 4
+DEAL::8020 4
+DEAL::8021 4
+DEAL::8022 4
+DEAL::8023 4
+DEAL::8024 4
+DEAL::8025 4
+DEAL::8026 4
+DEAL::8027 4
+DEAL::8028 4
+DEAL::8029 4
+DEAL::8030 4
+DEAL::8031 4
+DEAL::8032 4
+DEAL::8033 4
+DEAL::8034 4
+DEAL::8035 4
+DEAL::8036 4
+DEAL::8037 4
+DEAL::8038 4
+DEAL::8039 4
+DEAL::8040 4
+DEAL::8041 4
+DEAL::8042 4
+DEAL::8043 4
+DEAL::8044 4
+DEAL::8045 4
+DEAL::8046 4
+DEAL::8047 4
+DEAL::8048 4
+DEAL::8049 4
+DEAL::8050 4
+DEAL::8051 4
+DEAL::8052 4
+DEAL::8053 4
+DEAL::8054 4
+DEAL::8055 4
+DEAL::8056 4
+DEAL::8057 4
+DEAL::8058 4
+DEAL::8059 4
+DEAL::8060 4
+DEAL::8061 4
+DEAL::8062 4
+DEAL::8063 4
+DEAL::8064 4
+DEAL::8065 4
+DEAL::8066 4
+DEAL::8067 4
+DEAL::8068 4
+DEAL::8069 4
+DEAL::8070 4
+DEAL::8071 4
+DEAL::8072 4
+DEAL::8073 4
+DEAL::8074 4
+DEAL::8075 4
+DEAL::8076 4
+DEAL::8077 4
+DEAL::8078 4
+DEAL::8079 4
+DEAL::8080 4
+DEAL::8081 4
+DEAL::8082 4
+DEAL::8083 4
+DEAL::8084 4
+DEAL::8085 4
+DEAL::8086 4
+DEAL::8087 4
+DEAL::8088 4
+DEAL::8089 4
+DEAL::8090 4
+DEAL::8091 4
+DEAL::8092 4
+DEAL::8093 4
+DEAL::8094 4
+DEAL::8095 4
+DEAL::8096 4
+DEAL::8097 4
+DEAL::8098 4
+DEAL::8099 4
+DEAL::8100 4
+DEAL::8101 4
+DEAL::8102 4
+DEAL::8103 4
+DEAL::8104 4
+DEAL::8105 4
+DEAL::8106 4
+DEAL::8107 4
+DEAL::8108 4
+DEAL::8109 4
+DEAL::8110 4
+DEAL::8111 4
+DEAL::8112 4
+DEAL::8113 4
+DEAL::8114 4
+DEAL::8115 4
+DEAL::8116 4
+DEAL::8117 4
+DEAL::8118 4
+DEAL::8119 4
+DEAL::8120 4
+DEAL::8121 4
+DEAL::8122 4
+DEAL::8123 4
+DEAL::8124 4
+DEAL::8125 4
+DEAL::8126 4
+DEAL::8127 4
+DEAL::8128 4
+DEAL::8129 4
+DEAL::8130 4
+DEAL::8131 4
+DEAL::8132 4
+DEAL::8133 4
+DEAL::8134 4
+DEAL::8135 4
+DEAL::8136 4
+DEAL::8137 4
+DEAL::8138 4
+DEAL::8139 4
+DEAL::8140 4
+DEAL::8141 4
+DEAL::8142 4
+DEAL::8143 4
+DEAL::8144 4
+DEAL::8145 4
+DEAL::8146 4
+DEAL::8147 4
+DEAL::8148 4
+DEAL::8149 4
+DEAL::8150 4
+DEAL::8151 4
+DEAL::8152 4
+DEAL::8153 4
+DEAL::8154 4
+DEAL::8155 4
+DEAL::8156 4
+DEAL::8157 4
+DEAL::8158 4
+DEAL::8159 4
+DEAL::8160 4
+DEAL::8161 4
+DEAL::8162 4
+DEAL::8163 4
+DEAL::8164 4
+DEAL::8165 4
+DEAL::8166 4
+DEAL::8167 4
+DEAL::8168 4
+DEAL::8169 4
+DEAL::8170 4
+DEAL::8171 4
+DEAL::8172 4
+DEAL::8173 4
+DEAL::8174 4
+DEAL::8175 4
+DEAL::8176 4
+DEAL::8177 4
+DEAL::8178 4
+DEAL::8179 4
+DEAL::8180 4
+DEAL::8181 4
+DEAL::8182 4
+DEAL::8183 4
+DEAL::8184 4
+DEAL::8185 4
+DEAL::8186 4
+DEAL::8187 4
+DEAL::8188 4
+DEAL::8189 4
+DEAL::8190 4
+DEAL::8191 4
+DEAL::8192 4
+DEAL::8193 4
+DEAL::8194 4
+DEAL::8195 4
+DEAL::8196 4
+DEAL::8197 4
+DEAL::8198 4
+DEAL::8199 4
+DEAL::8200 4
+DEAL::8201 4
+DEAL::8202 4
+DEAL::8203 4
+DEAL::8204 4
+DEAL::8205 4
+DEAL::8206 4
+DEAL::8207 4
+DEAL::8208 4
+DEAL::8209 4
+DEAL::8210 4
+DEAL::8211 4
+DEAL::8212 4
+DEAL::8213 4
+DEAL::8214 4
+DEAL::8215 4
+DEAL::8216 4
+DEAL::8217 4
+DEAL::8218 4
+DEAL::8219 4
+DEAL::8220 4
+DEAL::8221 4
+DEAL::8222 4
+DEAL::8223 4
+DEAL::8224 4
+DEAL::8225 4
+DEAL::8226 4
+DEAL::8227 4
+DEAL::8228 4
+DEAL::8229 4
+DEAL::8230 4
+DEAL::8231 4
+DEAL::8232 4
+DEAL::8233 4
+DEAL::8234 4
+DEAL::8235 4
+DEAL::8236 4
+DEAL::8237 4
+DEAL::8238 1
+DEAL::8239 1
+DEAL::8240 1
+DEAL::8241 1
+DEAL::8242 1
+DEAL::8243 1
+DEAL::8244 1
+DEAL::8245 1
+DEAL::8246 1
+DEAL::8247 1
+DEAL::8248 1
+DEAL::8249 1
+DEAL::8250 1
+DEAL::8251 1
+DEAL::8252 1
+DEAL::8253 1
+DEAL::8254 1
+DEAL::8255 1
+DEAL::8256 1
+DEAL::8257 1
+DEAL::8258 1
+DEAL::8259 1
+DEAL::8260 1
+DEAL::8261 1
+DEAL::8262 1
+DEAL::8263 1
+DEAL::8264 1
+DEAL::8265 1
+DEAL::8266 1
+DEAL::8267 1
+DEAL::8268 1
+DEAL::8269 1
+DEAL::8270 1
+DEAL::8271 1
+DEAL::8272 1
+DEAL::8273 1
+DEAL::8274 1
+DEAL::8275 1
+DEAL::8276 1
+DEAL::8277 1
+DEAL::8278 1
+DEAL::8279 1
+DEAL::8280 1
+DEAL::8281 1
+DEAL::8282 1
+DEAL::8283 1
+DEAL::8284 1
+DEAL::8285 1
+DEAL::8286 1
+DEAL::8287 1
+DEAL::8288 1
+DEAL::8289 1
+DEAL::8290 1
+DEAL::8291 1
+DEAL::8292 1
+DEAL::8293 1
+DEAL::8294 1
+DEAL::8295 1
+DEAL::8296 1
+DEAL::8297 1
+DEAL::8298 1
+DEAL::8299 1
+DEAL::8300 1
+DEAL::8301 1
+DEAL::8302 1
+DEAL::8303 1
+DEAL::8304 1
+DEAL::8305 1
+DEAL::8306 1
+DEAL::8307 1
+DEAL::8308 1
+DEAL::8309 1
+DEAL::8310 1
+DEAL::8311 1
+DEAL::8312 1
+DEAL::8313 1
+DEAL::8314 1
+DEAL::8315 1
+DEAL::8316 1
+DEAL::8317 1
+DEAL::8318 1
+DEAL::8319 1
+DEAL::8320 1
+DEAL::8321 1
+DEAL::8322 1
+DEAL::8323 1
+DEAL::8324 1
+DEAL::8325 1
+DEAL::8326 1
+DEAL::8327 1
+DEAL::8328 1
+DEAL::8329 1
+DEAL::8330 1
+DEAL::8331 1
+DEAL::8332 1
+DEAL::8333 1
+DEAL::8334 1
+DEAL::8335 1
+DEAL::8336 1
+DEAL::8337 1
+DEAL::8338 1
+DEAL::8339 1
+DEAL::8340 1
+DEAL::8341 1
+DEAL::8342 1
+DEAL::8343 1
+DEAL::8344 1
+DEAL::8345 1
+DEAL::8346 1
+DEAL::8347 1
+DEAL::8348 1
+DEAL::8349 1
+DEAL::8350 1
+DEAL::8351 1
+DEAL::8352 1
+DEAL::8353 1
+DEAL::8354 1
+DEAL::8355 0
+DEAL::8356 0
+DEAL::8357 0
+DEAL::8358 0
+DEAL::8359 0
+DEAL::8360 0
+DEAL::8361 0
+DEAL::8362 0
+DEAL::8363 0
+DEAL::8364 0
+DEAL::8365 0
+DEAL::8366 0
+DEAL::8367 0
+DEAL::8368 0
+DEAL::8369 0
+DEAL::8370 0
+DEAL::8371 0
+DEAL::8372 0
+DEAL::8373 0
+DEAL::8374 0
+DEAL::8375 0
+DEAL::8376 0
+DEAL::8377 0
+DEAL::8378 0
+DEAL::8379 0
+DEAL::8380 0
+DEAL::8381 0
+DEAL::8382 0
+DEAL::8383 0
+DEAL::8384 0
+DEAL::8385 0
+DEAL::8386 0
+DEAL::8387 0
+DEAL::8388 0
+DEAL::8389 0
+DEAL::8390 0
+DEAL::8391 0
+DEAL::8392 0
+DEAL::8393 0
+DEAL::8394 0
+DEAL::8395 0
+DEAL::8396 0
+DEAL::8397 0
+DEAL::8398 0
+DEAL::8399 0
+DEAL::8400 0
+DEAL::8401 0
+DEAL::8402 0
+DEAL::8403 0
+DEAL::8404 0
+DEAL::8405 0
+DEAL::8406 0
+DEAL::8407 0
+DEAL::8408 0
+DEAL::8409 0
+DEAL::8410 0
+DEAL::8411 0
+DEAL::8412 0
+DEAL::8413 0
+DEAL::8414 0
+DEAL::8415 0
+DEAL::8416 0
+DEAL::8417 0
+DEAL::8418 0
+DEAL::8419 0
+DEAL::8420 0
+DEAL::8421 0
+DEAL::8422 0
+DEAL::8423 0
+DEAL::8424 0
+DEAL::8425 0
+DEAL::8426 0
+DEAL::8427 0
+DEAL::8428 0
+DEAL::8429 0
+DEAL::8430 0
+DEAL::8431 0
+DEAL::8432 0
+DEAL::8433 0
+DEAL::8434 0
+DEAL::8435 0
+DEAL::8436 0
+DEAL::8437 0
+DEAL::8438 0
+DEAL::8439 0
+DEAL::8440 0
+DEAL::8441 0
+DEAL::8442 0
+DEAL::8443 0
+DEAL::8444 0
+DEAL::8445 0
+DEAL::8446 0
+DEAL::8447 0
+DEAL::8448 0
+DEAL::8449 0
+DEAL::8450 0
+DEAL::8451 0
+DEAL::8452 0
+DEAL::8453 0
+DEAL::8454 0
+DEAL::8455 0
+DEAL::8456 0
+DEAL::8457 0
+DEAL::8458 0
+DEAL::8459 0
+DEAL::8460 0
+DEAL::8461 0
+DEAL::8462 0
+DEAL::8463 0
+DEAL::8464 0
+DEAL::8465 0
+DEAL::8466 0
+DEAL::8467 0
+DEAL::8468 0
+DEAL::8469 0
+DEAL::8470 0
+DEAL::8471 0
+DEAL::8472 3
+DEAL::8473 3
+DEAL::8474 3
+DEAL::8475 3
+DEAL::8476 3
+DEAL::8477 3
+DEAL::8478 3
+DEAL::8479 3
+DEAL::8480 3
+DEAL::8481 3
+DEAL::8482 3
+DEAL::8483 3
+DEAL::8484 3
+DEAL::8485 3
+DEAL::8486 3
+DEAL::8487 3
+DEAL::8488 3
+DEAL::8489 3
+DEAL::8490 3
+DEAL::8491 3
+DEAL::8492 3
+DEAL::8493 3
+DEAL::8494 3
+DEAL::8495 3
+DEAL::8496 3
+DEAL::8497 3
+DEAL::8498 3
+DEAL::8499 3
+DEAL::8500 3
+DEAL::8501 3
+DEAL::8502 3
+DEAL::8503 3
+DEAL::8504 3
+DEAL::8505 3
+DEAL::8506 3
+DEAL::8507 3
+DEAL::8508 3
+DEAL::8509 3
+DEAL::8510 3
+DEAL::8511 3
+DEAL::8512 3
+DEAL::8513 3
+DEAL::8514 3
+DEAL::8515 3
+DEAL::8516 3
+DEAL::8517 3
+DEAL::8518 3
+DEAL::8519 3
+DEAL::8520 3
+DEAL::8521 3
+DEAL::8522 3
+DEAL::8523 3
+DEAL::8524 3
+DEAL::8525 3
+DEAL::8526 3
+DEAL::8527 3
+DEAL::8528 3
+DEAL::8529 3
+DEAL::8530 3
+DEAL::8531 3
+DEAL::8532 3
+DEAL::8533 3
+DEAL::8534 3
+DEAL::8535 3
+DEAL::8536 3
+DEAL::8537 3
+DEAL::8538 3
+DEAL::8539 3
+DEAL::8540 3
+DEAL::8541 3
+DEAL::8542 3
+DEAL::8543 3
+DEAL::8544 3
+DEAL::8545 3
+DEAL::8546 3
+DEAL::8547 3
+DEAL::8548 3
+DEAL::8549 3
+DEAL::8550 3
+DEAL::8551 3
+DEAL::8552 3
+DEAL::8553 3
+DEAL::8554 3
+DEAL::8555 3
+DEAL::8556 3
+DEAL::8557 3
+DEAL::8558 3
+DEAL::8559 3
+DEAL::8560 3
+DEAL::8561 3
+DEAL::8562 3
+DEAL::8563 3
+DEAL::8564 3
+DEAL::8565 3
+DEAL::8566 3
+DEAL::8567 3
+DEAL::8568 3
+DEAL::8569 3
+DEAL::8570 3
+DEAL::8571 3
+DEAL::8572 3
+DEAL::8573 3
+DEAL::8574 3
+DEAL::8575 3
+DEAL::8576 3
+DEAL::8577 3
+DEAL::8578 3
+DEAL::8579 3
+DEAL::8580 3
+DEAL::8581 3
+DEAL::8582 3
+DEAL::8583 3
+DEAL::8584 3
+DEAL::8585 3
+DEAL::8586 3
+DEAL::8587 3
+DEAL::8588 3
POINT_DATA 230
SCALARS partitions double 1
LOOKUP_TABLE default
-3.00000 3.00000 2.00000 2.00000 3.00000 3.00000 2.00000 2.00000 4.00000 4.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 2.00000 2.00000 1.00000 1.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000
+4.00000 4.00000 2.00000 2.00000 4.00000 4.00000 2.00000 2.00000 3.00000 3.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 2.00000 2.00000 0.00000 0.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000
DEAL::Dimension = 2
# vtk DataFile Version 3.0
#This file was generated
POINT_DATA 4744
SCALARS partitions double 1
LOOKUP_TABLE default
-4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000
+0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000
DEAL::Dimension = 3
# vtk DataFile Version 3.0
#This file was generated
POINT_DATA 5888
SCALARS partitions double 1
LOOKUP_TABLE default
-4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000
+4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 2.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 4.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000
// $Id$
// Version: $Name$
//
-// Copyright (C) 2009, 2010, 2011 by the deal.II authors
+// Copyright (C) 2009, 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
const unsigned int numprocs = Utilities::MPI::n_mpi_processes (MPI_COMM_WORLD);
- int int_sum, uint_sum, double_sum, float_sum;
+ int int_sum;
+ unsigned int uint_sum;
+ double double_sum;
+ float float_sum;
+
int_sum
=
Utilities::MPI::sum<int>(myid+1,
-DEAL:mpi::1 1 1 1
+DEAL:mpi::1 1 1.00000 1.00000
-DEAL:mpi::55 55 55 55
+DEAL:mpi::55 55 55.0000 55.0000
-DEAL:mpi::10 10 10 10
+DEAL:mpi::10 10 10.0000 10.0000
// $Id$
// Version: $Name$
//
-// Copyright (C) 2009, 2010, 2011 by the deal.II authors
+// Copyright (C) 2009, 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
const unsigned int numprocs = Utilities::MPI::n_mpi_processes (MPI_COMM_WORLD);
- int int_sum, uint_sum, double_sum, float_sum;
+ int int_sum;
+ unsigned int uint_sum;
+ double double_sum;
+ float float_sum;
+
int_sum
=
Utilities::MPI::max<int>(myid+1,
-DEAL:mpi::1 1 1 1
+DEAL:mpi::1 1 1.00000 1.00000
-DEAL:mpi::10 10 10 10
+DEAL:mpi::10 10 10.0000 10.0000
-DEAL:mpi::4 4 4 4
+DEAL:mpi::4 4 4.00000 4.00000
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
#include <deal.II/dofs/dof_accessor.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
TrilinosWrappers::MPI::Vector interpolated(dofh.locally_owned_dofs(),
MPI_COMM_WORLD);
- deallog << "before" << std::endl;
VectorTools::interpolate (dofh,
LinearFunction<dim>(),
interpolated);
- deallog << "after" << std::endl;
interpolated.compress();
double norm = interpolated.l2_norm();
-DEAL:0:2d::difference = 0.577350
-DEAL:0:3d::difference = 0.577350
+DEAL:0:2d::norm = 3.00000
-DEAL:0:2d::difference = 0.577350
-DEAL:0:3d::difference = 0.577350
+DEAL:0:2d::norm = 3.00000
#include <deal.II/lac/trilinos_sparsity_pattern.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <deal.II/dofs/dof_handler.h>
#include <deal.II/lac/constraint_matrix.h>
#include <deal.II/fe/fe_q.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <deal.II/lac/trilinos_sparsity_pattern.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <iostream>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/lac/trilinos_vector.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <sstream>
ConstraintMatrix constraints;
constraints.reinit(relevant_set);
DoFTools::make_hanging_node_constraints (dofh, constraints);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (1);
const unsigned int degree = 1;
VectorTools::compute_no_normal_flux_constraints (dofh, 0,
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/lac/trilinos_vector.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <sstream>
ConstraintMatrix constraints;
constraints.reinit(relevant_set);
DoFTools::make_hanging_node_constraints (dofh, constraints);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (1);
const unsigned int degree = 1;
/* VectorTools::compute_no_normal_flux_constraints (dofh, 0,
std::string base = output_file_for_mpi("no_flux_constraints_02");
- if (myid==0)
- system(("rm -rf " + base + "cm_?.dot").c_str());
-
MPI_Barrier(MPI_COMM_WORLD);
{ //write the constraintmatrix to a file on each cpu
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/mapping_q.h>
#include <deal.II/lac/trilinos_vector.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <fstream>
#include <sstream>
ConstraintMatrix constraints;
constraints.reinit(relevant_set);
DoFTools::make_hanging_node_constraints (dofh, constraints);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (0);
const unsigned int degree = 1;
VectorTools::compute_no_normal_flux_constraints (dofh, 0,
MappingQ<dim>(degree));
constraints.close();
- if (myid==0)
- system("rm -rf no_flux_constraints_03/cm_?.dot");
-
+ std::string base = output_file_for_mpi("no_flux_constraints_03");
+
MPI_Barrier(MPI_COMM_WORLD);
-
+
{ //write the constraintmatrix to a file on each cpu
- char fname[] = "no_flux_constraints_03/cm_0.dot";
- fname[26]+=myid;
- std::ofstream file(fname);
- constraints.print(file);
+ std::string fname = base+"cm_" + Utilities::int_to_string(myid) + ".dot";
+ std::ofstream file(fname.c_str());
+ constraints.print(file);
}
MPI_Barrier(MPI_COMM_WORLD);
sleep(1);
{
//sort and merge the constraint matrices on proc 0, generate a checksum
//and output that into the deallog
- system("cat no_flux_constraints_03/cm_?.dot|sort -n|uniq >no_flux_constraints_03/cm");
- system("md5sum no_flux_constraints_03/cm >no_flux_constraints_03/cm.check");
- {
- std::ifstream file("no_flux_constraints_03/cm.check");
- std::string str;
- while (!file.eof())
- {
- std::getline(file, str);
- deallog << str << std::endl;
- }
- }
+ system((std::string("cat ") + base+"cm_?.dot|sort -n|uniq >" + base+"cm").c_str());
+ system((std::string("md5sum ") + base + "cm >" + base + "cm.check").c_str());
+ {
+ std::ifstream file((base+"cm.check").c_str());
+ std::string str;
+ while (!file.eof())
+ {
+ std::getline(file, str);
+ deallog << str << std::endl;
+ }
+ }
+
}
// print the number of constraints. since
DEAL:0:3d::#cells = 568
DEAL:0:3d::#dofs = 2481
-DEAL:0:3d::17a5cf8e1f66b693f8b54bf284cab4ac no_flux_constraints_03/cm
+DEAL:0:3d::17a5cf8e1f66b693f8b54bf284cab4ac no_flux_constraints_03/ncpu_1/outputcm
DEAL:0:3d::
DEAL:0:3d::#constraints on 0: 702
DEAL:0:3d::OK
DEAL:0:3d::#cells = 568
DEAL:0:3d::#dofs = 2481
-DEAL:0:3d::17a5cf8e1f66b693f8b54bf284cab4ac no_flux_constraints_03/cm
+DEAL:0:3d::17a5cf8e1f66b693f8b54bf284cab4ac no_flux_constraints_03/ncpu_9/outputcm
DEAL:0:3d::
DEAL:0:3d::#constraints on 0: 198
DEAL:0:3d::#constraints on 1: 221
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
cm,
velocity_mask);
- std::set<types::boundary_id_t> no_normal_flux_boundaries;
+ std::set<types::boundary_id> no_normal_flux_boundaries;
no_normal_flux_boundaries.insert (1);
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
#include "../tests.h"
#include <deal.II/base/logstream.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/tria.h>
#include <deal.II/distributed/tria.h>
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
// compress (no addition)
if (myid > 0)
v(1) = 7;
- v.compress(/* add_ghost_data = */ false);
+ v.compress(VectorOperation::insert);
if (myid == 0)
{
#include <deal.II/base/logstream.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/function.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/grid/filtered_iterator.h>
#include <deal.II/grid/tria.h>
--- /dev/null
+//---------------------------- trilinos_vector_equality_4.cc ---------------------------
+// $Id: trilinos_ghost_01.cc 24924 2012-01-25 12:35:17Z kormann $
+// Version: $Name$
+//
+// Copyright (C) 2004, 2005, 2008, 2010 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- trilinos_vector_equality_4.cc ---------------------------
+
+
+// check Trilinos has_ghost_elements() if run on one CPU only
+
+#include "../tests.h"
+#include <deal.II/base/utilities.h>
+#include <deal.II/base/index_set.h>
+#include <deal.II/lac/trilinos_vector.h>
+#include <fstream>
+#include <iostream>
+#include <vector>
+
+
+void test ()
+{
+ unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
+ unsigned int numproc = Utilities::MPI::n_mpi_processes (MPI_COMM_WORLD);
+
+ if (myid==0) deallog << "numproc=" << numproc << std::endl;
+
+
+ // each processor owns 2 indices and all
+ // are ghosting element 1 (the second)
+ IndexSet local_active(numproc*2);
+ local_active.add_range(myid*2,myid*2+2);
+ IndexSet local_relevant(numproc*2);
+ local_relevant = local_active;
+ local_relevant.add_range(1,2);
+
+ TrilinosWrappers::MPI::Vector v(local_active, MPI_COMM_WORLD);
+ TrilinosWrappers::MPI::Vector v_tmp(local_relevant, MPI_COMM_WORLD);
+
+ // only one CPU checks has_ghost_elements()
+ MPI_Barrier(MPI_COMM_WORLD);
+ if (myid==0)
+ {
+ deallog << v_tmp.has_ghost_elements() << std::endl;
+ int dummy=0;
+ MPI_Send(&dummy, 1, MPI_INT, 1, 12345, MPI_COMM_WORLD);
+ }
+
+ if (myid==1)
+ {
+ MPI_Status status;
+ MPI_Request request;
+ int flag=0;
+ int tests=0;
+
+ while (!flag && tests<10)
+ {
+ tests++;
+ MPI_Iprobe(0, 12345, MPI_COMM_WORLD, &flag, &status);
+ std::cout << flag << std::endl;
+
+ sleep(1);
+ }
+
+ Assert(flag!=0, ExcMessage("hang in has_ghost_elements()"));
+ }
+
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ deallog << v_tmp.has_ghost_elements() << std::endl;
+
+ if (myid==0)
+ deallog << "OK" << std::endl;
+}
+
+
+
+int main (int argc, char **argv)
+{
+ Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv);
+
+ unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
+ deallog.push(Utilities::int_to_string(myid));
+
+ if (myid == 0)
+ {
+ std::ofstream logfile(output_file_for_mpi("trilinos_01").c_str());
+ deallog.attach(logfile);
+ deallog << std::setprecision(4);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ test();
+ }
+ else
+ test();
+
+}
--- /dev/null
+
+DEAL:0::numproc=10
+DEAL:0::1
+DEAL:0::1
+DEAL:0::OK
--- /dev/null
+
+DEAL:0::numproc=4
+DEAL:0::1
+DEAL:0::1
+DEAL:0::OK
--- /dev/null
+//---------------------------- trilinos_vector_equality_4.cc ---------------------------
+// $Id: trilinos_ghost_01.cc 24924 2012-01-25 12:35:17Z kormann $
+// Version: $Name$
+//
+// Copyright (C) 2004, 2005, 2008, 2010 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- trilinos_vector_equality_4.cc ---------------------------
+
+
+// check Trilinos has_ghost_elements()
+
+#include "../tests.h"
+#include <deal.II/base/utilities.h>
+#include <deal.II/base/index_set.h>
+#include <deal.II/lac/trilinos_vector.h>
+#include <fstream>
+#include <iostream>
+#include <vector>
+
+void check(TrilinosWrappers::MPI::Vector & v, bool ghost)
+{
+ Assert(v.has_ghost_elements()==ghost, ExcMessage("wrong ghost elements"));
+}
+
+void test ()
+{
+ unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
+ unsigned int numproc = Utilities::MPI::n_mpi_processes (MPI_COMM_WORLD);
+
+ if (myid==0) deallog << "numproc=" << numproc << std::endl;
+
+ // each processor owns 2 indices and all
+ // are ghosting element 1 (the second)
+ IndexSet local_active(numproc*2);
+ local_active.add_range(myid*2,myid*2+2);
+ IndexSet local_relevant(numproc*2);
+ local_relevant = local_active;
+ local_relevant.add_range(1,2);
+
+ TrilinosWrappers::MPI::Vector v(local_active, MPI_COMM_WORLD);
+ check(v, false);
+
+ TrilinosWrappers::MPI::Vector v2(local_relevant, MPI_COMM_WORLD);
+ check(v2, true);
+
+ TrilinosWrappers::MPI::Vector v3=v;
+ check(v3, false);
+
+ v3.reinit(v2);
+ check(v3, true);
+
+ v3.reinit(local_active);
+ check(v3, false);
+
+ v3.reinit(local_relevant);
+ check(v3, true);
+
+ TrilinosWrappers::MPI::Vector v4=v2;
+ check(v4, true);
+
+ v4 = v;
+ check(v4, true); //this only copies contents!
+
+ v4 = v2;
+ check(v4, true);
+
+ TrilinosWrappers::MPI::Vector v5(v2);
+ check(v5, true);
+
+ if (myid==0)
+ deallog << "OK" << std::endl;
+}
+
+
+
+int main (int argc, char **argv)
+{
+ Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv);
+
+ unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
+ deallog.push(Utilities::int_to_string(myid));
+
+ if (myid == 0)
+ {
+ std::ofstream logfile(output_file_for_mpi("trilinos_02").c_str());
+ deallog.attach(logfile);
+ deallog << std::setprecision(4);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ test();
+ }
+ else
+ test();
+
+}
--- /dev/null
+
+DEAL:0::numproc=10
+DEAL:0::OK
--- /dev/null
+
+DEAL:0::numproc=4
+DEAL:0::OK
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/multigrid/multigrid.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/mesh_worker.h>
#include <deal.II/numerics/mesh_worker_loop.h>
#include <deal.II/fe/fe_system.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/mesh_worker.h>
#include <deal.II/numerics/mesh_worker_loop.h>
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_values.h>
-#include <deal.II/numerics/vectors.h>
+#include <deal.II/numerics/vector_tools.h>
#include <deal.II/numerics/data_out.h>
#include <deal.II/numerics/error_estimator.h>
PETScWrappers::Vector w (100);
test (v,w);
}
- ierr = VecDestroy(vpetsc);
+
+#if DEAL_II_PETSC_VERSION_LT(3,2,0)
+ ierr = VecDestroy (vpetsc);
+#else
+ ierr = VecDestroy (&vpetsc);
+#endif
+
AssertThrow (ierr == 0, ExcPETScError(ierr));
PetscFinalize();
// $Id$
// Version: $Name$
//
-// Copyright (C) 2010, 2011 by the deal.II authors
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include <deal.II/fe/fe_q.h>
#include <deal.II/fe/fe_system.h>
-template <int dim, int spacedim>
-bool operator == (const DoFHandler<dim,spacedim> &t1,
- const DoFHandler<dim,spacedim> &t2)
+namespace dealii
{
- // test a few attributes, though we can't
- // test everything unfortunately...
- typename DoFHandler<dim,spacedim>::cell_iterator
- c1 = t1.begin(),
- c2 = t2.begin();
- for (; (c1 != t1.end()) && (c2 != t2.end()); ++c1, ++c2)
- {
- for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
- {
- if (c1->vertex(v) != c2->vertex(v))
- return false;
- if (c1->vertex_index(v) != c2->vertex_index(v))
- return false;
- }
-
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- {
- if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary())
- return false;
-
- if (c1->face(f)->at_boundary())
- {
- if (c1->face(f)->boundary_indicator() !=
- c2->face(f)->boundary_indicator())
- return false;
- }
- else
- {
- if (c1->neighbor(f)->level() != c2->neighbor(f)->level())
- return false;
- if (c1->neighbor(f)->index() != c2->neighbor(f)->index())
- return false;
- }
- }
-
- if (c1->subdomain_id() != c2->subdomain_id())
- return false;
-
- if (c1->material_id() != c2->material_id())
- return false;
-
- if (c1->user_index() != c2->user_index())
- return false;
-
- if (c1->user_flag_set() != c2->user_flag_set())
- return false;
-
- if (c1->get_fe().get_name() != c2->get_fe().get_name())
- return false;
-
- if (c1->active_fe_index() != c2->active_fe_index())
- return false;
-
- // compare dofs on this cell and then on the faces
- if (c1->has_children() == false)
+ template <int dim, int spacedim>
+ bool operator == (const DoFHandler<dim,spacedim> &t1,
+ const DoFHandler<dim,spacedim> &t2)
+ {
+ // test a few attributes, though we can't
+ // test everything unfortunately...
+ typename DoFHandler<dim,spacedim>::cell_iterator
+ c1 = t1.begin(),
+ c2 = t2.begin();
+ for (; (c1 != t1.end()) && (c2 != t2.end()); ++c1, ++c2)
{
- std::vector<unsigned int> local_dofs_1 (c1->get_fe().dofs_per_cell);
- std::vector<unsigned int> local_dofs_2 (c2->get_fe().dofs_per_cell);
+ for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
+ {
+ if (c1->vertex(v) != c2->vertex(v))
+ return false;
+ if (c1->vertex_index(v) != c2->vertex_index(v))
+ return false;
+ }
+
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary())
+ return false;
+
+ if (c1->face(f)->at_boundary())
+ {
+ if (c1->face(f)->boundary_indicator() !=
+ c2->face(f)->boundary_indicator())
+ return false;
+ }
+ else
+ {
+ if (c1->neighbor(f)->level() != c2->neighbor(f)->level())
+ return false;
+ if (c1->neighbor(f)->index() != c2->neighbor(f)->index())
+ return false;
+ }
+ }
+
+ if (c1->subdomain_id() != c2->subdomain_id())
+ return false;
- c1->get_dof_indices (local_dofs_1);
- c2->get_dof_indices (local_dofs_2);
- if (local_dofs_1 != local_dofs_2)
+ if (c1->material_id() != c2->material_id())
return false;
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- {
- std::vector<unsigned int> local_dofs_1 (c1->get_fe().dofs_per_face);
- std::vector<unsigned int> local_dofs_2 (c2->get_fe().dofs_per_face);
-
- c1->face(f)->get_dof_indices (local_dofs_1);
- c2->face(f)->get_dof_indices (local_dofs_2);
- if (local_dofs_1 != local_dofs_2)
- return false;
- }
+ if (c1->user_index() != c2->user_index())
+ return false;
+
+ if (c1->user_flag_set() != c2->user_flag_set())
+ return false;
+
+ if (c1->get_fe().get_name() != c2->get_fe().get_name())
+ return false;
+
+ if (c1->active_fe_index() != c2->active_fe_index())
+ return false;
+
+ // compare dofs on this cell and then on the faces
+ if (c1->has_children() == false)
+ {
+ std::vector<unsigned int> local_dofs_1 (c1->get_fe().dofs_per_cell);
+ std::vector<unsigned int> local_dofs_2 (c2->get_fe().dofs_per_cell);
+
+ c1->get_dof_indices (local_dofs_1);
+ c2->get_dof_indices (local_dofs_2);
+ if (local_dofs_1 != local_dofs_2)
+ return false;
+
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ std::vector<unsigned int> local_dofs_1 (c1->get_fe().dofs_per_face);
+ std::vector<unsigned int> local_dofs_2 (c2->get_fe().dofs_per_face);
+
+ c1->face(f)->get_dof_indices (local_dofs_1);
+ c2->face(f)->get_dof_indices (local_dofs_2);
+ if (local_dofs_1 != local_dofs_2)
+ return false;
+ }
+ }
}
- }
-
- // also check the order of raw iterators as they contain
- // something about the history of the triangulation
- typename DoFHandler<dim,spacedim>::cell_iterator
- r1 = t1.begin_raw(),
- r2 = t2.begin_raw();
- for (; (r1 != t1.end()) && (r2 != t2.end()); ++r1, ++r2)
- {
- if (r1->level() != r2->level())
- return false;
- if (r1->index() != r2->index())
- return false;
- }
- return true;
+ // also check the order of raw iterators as they contain
+ // something about the history of the triangulation
+ typename DoFHandler<dim,spacedim>::cell_iterator
+ r1 = t1.begin_raw(),
+ r2 = t2.begin_raw();
+ for (; (r1 != t1.end()) && (r2 != t2.end()); ++r1, ++r2)
+ {
+ if (r1->level() != r2->level())
+ return false;
+ if (r1->index() != r2->index())
+ return false;
+ }
+
+ return true;
+ }
}
template <int dim, int spacedim>
// $Id$
// Version: $Name$
//
-// Copyright (C) 2010, 2011 by the deal.II authors
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include <deal.II/grid/tria_iterator.h>
#include <deal.II/grid/grid_generator.h>
-template <int dim, int spacedim>
-bool operator == (const Triangulation<dim,spacedim> &t1,
- const Triangulation<dim,spacedim> &t2)
+namespace dealii
{
- // test a few attributes, though we can't
- // test everything unfortunately...
- if (t1.n_active_cells() != t2.n_active_cells())
- return false;
-
- if (t1.n_cells() != t2.n_cells())
- return false;
-
- if (t1.n_faces() != t2.n_faces())
- return false;
-
- typename Triangulation<dim,spacedim>::cell_iterator
- c1 = t1.begin(),
- c2 = t2.begin();
- for (; (c1 != t1.end()) && (c2 != t2.end()); ++c1, ++c2)
- {
- for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
- {
- if (c1->vertex(v) != c2->vertex(v))
- return false;
- if (c1->vertex_index(v) != c2->vertex_index(v))
- return false;
- }
-
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- {
- if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary())
- return false;
-
- if (c1->face(f)->at_boundary())
- {
- if (c1->face(f)->boundary_indicator() !=
- c2->face(f)->boundary_indicator())
- return false;
- }
- else
- {
- if (c1->neighbor(f)->level() != c2->neighbor(f)->level())
- return false;
- if (c1->neighbor(f)->index() != c2->neighbor(f)->index())
- return false;
- }
- }
-
- if (c1->subdomain_id() != c2->subdomain_id())
- return false;
-
- if (c1->material_id() != c2->material_id())
- return false;
-
- if (c1->user_index() != c2->user_index())
- return false;
-
- if (c1->user_flag_set() != c2->user_flag_set())
- return false;
- }
-
- // also check the order of raw iterators as they contain
- // something about the history of the triangulation
- typename Triangulation<dim,spacedim>::cell_iterator
- r1 = t1.begin_raw(),
- r2 = t2.begin_raw();
- for (; (r1 != t1.end()) && (r2 != t2.end()); ++r1, ++r2)
+ template <int dim, int spacedim>
+ bool operator == (const Triangulation<dim,spacedim> &t1,
+ const Triangulation<dim,spacedim> &t2)
{
- if (r1->level() != r2->level())
+ // test a few attributes, though we can't
+ // test everything unfortunately...
+ if (t1.n_active_cells() != t2.n_active_cells())
return false;
- if (r1->index() != r2->index())
+
+ if (t1.n_cells() != t2.n_cells())
return false;
- }
- return true;
+ if (t1.n_faces() != t2.n_faces())
+ return false;
+
+ typename Triangulation<dim,spacedim>::cell_iterator
+ c1 = t1.begin(),
+ c2 = t2.begin();
+ for (; (c1 != t1.end()) && (c2 != t2.end()); ++c1, ++c2)
+ {
+ for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
+ {
+ if (c1->vertex(v) != c2->vertex(v))
+ return false;
+ if (c1->vertex_index(v) != c2->vertex_index(v))
+ return false;
+ }
+
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary())
+ return false;
+
+ if (c1->face(f)->at_boundary())
+ {
+ if (c1->face(f)->boundary_indicator() !=
+ c2->face(f)->boundary_indicator())
+ return false;
+ }
+ else
+ {
+ if (c1->neighbor(f)->level() != c2->neighbor(f)->level())
+ return false;
+ if (c1->neighbor(f)->index() != c2->neighbor(f)->index())
+ return false;
+ }
+ }
+
+ if (c1->subdomain_id() != c2->subdomain_id())
+ return false;
+
+ if (c1->material_id() != c2->material_id())
+ return false;
+
+ if (c1->user_index() != c2->user_index())
+ return false;
+
+ if (c1->user_flag_set() != c2->user_flag_set())
+ return false;
+ }
+
+ // also check the order of raw iterators as they contain
+ // something about the history of the triangulation
+ typename Triangulation<dim,spacedim>::cell_iterator
+ r1 = t1.begin_raw(),
+ r2 = t2.begin_raw();
+ for (; (r1 != t1.end()) && (r2 != t2.end()); ++r1, ++r2)
+ {
+ if (r1->level() != r2->level())
+ return false;
+ if (r1->index() != r2->index())
+ return false;
+ }
+
+ return true;
+ }
}
+
template <int dim, int spacedim>
void do_boundary (Triangulation<dim,spacedim> &t1)
{
tria_1.begin_active()->set_refine_flag (RefinementCase<dim>::cut_x);
do_boundary (tria_1);
-
+
verify (tria_1, tria_2);
}
test<2,2> ();
test<2,3> ();
test<3,3> ();
-
+
deallog << "OK" << std::endl;
}
// $Id$
// Version: $Name$
//
-// Copyright (C) 2010, 2011 by the deal.II authors
+// Copyright (C) 2010, 2011, 2012 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include "../../include/deal.II/grid/tria.h"
-template <int dim, int spacedim>
-bool operator == (const Triangulation<dim,spacedim> &t1,
- const Triangulation<dim,spacedim> &t2)
+namespace dealii
{
- // test a few attributes, though we can't
- // test everything unfortunately...
- if (t1.n_active_cells() != t2.n_active_cells())
- return false;
-
- if (t1.n_cells() != t2.n_cells())
- return false;
-
- if (t1.n_faces() != t2.n_faces())
- return false;
-
- typename Triangulation<dim,spacedim>::cell_iterator
- c1 = t1.begin(),
- c2 = t2.begin();
- for (; (c1 != t1.end()) && (c2 != t2.end()); ++c1, ++c2)
- {
- for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
- {
- if (c1->vertex(v) != c2->vertex(v))
- return false;
- if (c1->vertex_index(v) != c2->vertex_index(v))
- return false;
- }
-
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- {
- if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary())
- return false;
-
- if (c1->face(f)->at_boundary())
- {
- if (c1->face(f)->boundary_indicator() !=
- c2->face(f)->boundary_indicator())
- return false;
- }
- else
- {
- if (c1->neighbor(f)->level() != c2->neighbor(f)->level())
- return false;
- if (c1->neighbor(f)->index() != c2->neighbor(f)->index())
- return false;
- }
- }
-
- if (c1->subdomain_id() != c2->subdomain_id())
- return false;
-
- if (c1->material_id() != c2->material_id())
- return false;
-
- if (c1->user_index() != c2->user_index())
- return false;
-
- if (c1->user_flag_set() != c2->user_flag_set())
- return false;
- }
-
- // also check the order of raw iterators as they contain
- // something about the history of the triangulation
- typename Triangulation<dim,spacedim>::cell_iterator
- r1 = t1.begin_raw(),
- r2 = t2.begin_raw();
- for (; (r1 != t1.end()) && (r2 != t2.end()); ++r1, ++r2)
+ template <int dim, int spacedim>
+ bool operator == (const Triangulation<dim,spacedim> &t1,
+ const Triangulation<dim,spacedim> &t2)
{
- if (r1->level() != r2->level())
+ // test a few attributes, though we can't
+ // test everything unfortunately...
+ if (t1.n_active_cells() != t2.n_active_cells())
return false;
- if (r1->index() != r2->index())
+
+ if (t1.n_cells() != t2.n_cells())
return false;
- }
- return true;
+ if (t1.n_faces() != t2.n_faces())
+ return false;
+
+ typename Triangulation<dim,spacedim>::cell_iterator
+ c1 = t1.begin(),
+ c2 = t2.begin();
+ for (; (c1 != t1.end()) && (c2 != t2.end()); ++c1, ++c2)
+ {
+ for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_cell; ++v)
+ {
+ if (c1->vertex(v) != c2->vertex(v))
+ return false;
+ if (c1->vertex_index(v) != c2->vertex_index(v))
+ return false;
+ }
+
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ if (c1->face(f)->at_boundary() != c2->face(f)->at_boundary())
+ return false;
+
+ if (c1->face(f)->at_boundary())
+ {
+ if (c1->face(f)->boundary_indicator() !=
+ c2->face(f)->boundary_indicator())
+ return false;
+ }
+ else
+ {
+ if (c1->neighbor(f)->level() != c2->neighbor(f)->level())
+ return false;
+ if (c1->neighbor(f)->index() != c2->neighbor(f)->index())
+ return false;
+ }
+ }
+
+ if (c1->subdomain_id() != c2->subdomain_id())
+ return false;
+
+ if (c1->material_id() != c2->material_id())
+ return false;
+
+ if (c1->user_index() != c2->user_index())
+ return false;
+
+ if (c1->user_flag_set() != c2->user_flag_set())
+ return false;
+ }
+
+ // also check the order of raw iterators as they contain
+ // something about the history of the triangulation
+ typename Triangulation<dim,spacedim>::cell_iterator
+ r1 = t1.begin_raw(),
+ r2 = t2.begin_raw();
+ for (; (r1 != t1.end()) && (r2 != t2.end()); ++r1, ++r2)
+ {
+ if (r1->level() != r2->level())
+ return false;
+ if (r1->index() != r2->index())
+ return false;
+ }
+
+ return true;
+ }
}
+
template <int dim, int spacedim>
void do_boundary (Triangulation<dim,spacedim> &t1)
{
// now add one cell again
tria_1.begin_active()->set_refine_flag ();
tria_1.execute_coarsening_and_refinement();
-
+
tria_1.begin_active()->set_subdomain_id (1);
tria_1.begin_active()->set_material_id (2);
tria_1.begin_active()->set_user_index (3);
tria_1.begin_active()->set_refine_flag (RefinementCase<dim>::cut_x);
do_boundary (tria_1);
-
+
verify (tria_1, tria_2);
}
test<2,2> ();
test<2,3> ();
test<3,3> ();
-
+
deallog << "OK" << std::endl;
}
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim, typename MATRIX, typename VECTOR>
void assemble_laplace (MATRIX &B, VECTOR &bb, DoFHandler<dim> &dof_handler, FiniteElement<dim> &fe)
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>
#include <deal.II/grid/tria.h>
#include <deal.II/grid/grid_generator.h>
-#include <deal.II/numerics/vectors.h>
-#include <deal.II/numerics/matrices.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/matrix_tools.h>
template <int dim>