--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2010 - 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+#ifndef __deal2__block_linear_operator_h
+#define __deal2__block_linear_operator_h
+
+#include <deal.II/base/config.h>
+#include <deal.II/base/exceptions.h>
+
+#include <deal.II/lac/linear_operator.h>
+
+#ifdef DEAL_II_WITH_CXX11
+
+DEAL_II_NAMESPACE_OPEN
+
+// Forward declarations:
+template <typename Number> class BlockVector;
+
+/**
+ * @name Creation of LinearOperator block structures
+ */
+//@{
+
+/**
+ * @relates LinearOperator
+ *
+ * A function that encapsulates a given collection @p ops of
+ * LinearOperators into a block structure. Hereby, it is assumed that Range
+ * and Domain are blockvectors, i.e., derived from @ref BlockVectorBase.
+ * The individual linear operators in @p ops must act on a the underlying
+ * vector type of the block vectors, i.e., on Domain::BlockType yielding a
+ * result in Range::BlockType.
+ *
+ * The list @p ops is best passed as an initializer list. Consider for
+ * example a linear operator block (acting on Vector<double>)
+ * @code
+ * op_a00 | op_a01
+ * |
+ * ---------------
+ * |
+ * op_a10 | op_a11
+ * @endcode
+ * The coresponding block_operator invocation takes the form
+ * @code
+ * block_operator<2, 2, BlockVector<double>>({op_a00, op_a01, op_a10, op_a11});
+ * @endcode
+ *
+ * @ingroup LAOperators
+ */
+template <unsigned int m, unsigned int n,
+ typename Range = BlockVector<double>,
+ typename Domain = Range>
+LinearOperator<Range, Domain>
+block_operator(const std::array<std::array<LinearOperator<typename Range::BlockType, typename Domain::BlockType>, n>, m> &ops)
+{
+ static_assert(m > 0 && n > 0,
+ "a blocked LinearOperator must consist of at least one block");
+
+ LinearOperator<Range, Domain> return_op;
+
+ return_op.reinit_range_vector = [ops](Range &v, bool fast)
+ {
+ // Reinitialize the block vector to m blocks:
+ v.reinit(m);
+
+ // And reinitialize every individual block with reinit_range_vectors:
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i][0].reinit_range_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.reinit_domain_vector = [ops](Domain &v, bool fast)
+ {
+ // Reinitialize the block vector to n blocks:
+ v.reinit(n);
+
+ // And reinitialize every individual block with reinit_domain_vectors:
+ for (unsigned int i = 0; i < n; ++i)
+ ops[0][i].reinit_domain_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.vmult = [ops](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == n, ExcDimensionMismatch(u.n_blocks(), n));
+
+ for (unsigned int i = 0; i < m; ++i)
+ {
+ ops[i][0].vmult(v.block(i), u.block(0));
+ for (unsigned int j = 1; j < n; ++j)
+ ops[i][j].vmult_add(v.block(i), u.block(j));
+ }
+ };
+
+ return_op.vmult_add = [ops](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == n, ExcDimensionMismatch(u.n_blocks(), n));
+
+ for (unsigned int i = 0; i < m; ++i)
+ for (unsigned int j = 0; j < n; ++j)
+ ops[i][j].vmult_add(v.block(i), u.block(j));
+ };
+
+ return_op.Tvmult = [ops](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == n, ExcDimensionMismatch(v.n_blocks(), n));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < n; ++i)
+ {
+ ops[0][i].Tvmult(v.block(i), u.block(0));
+ for (unsigned int j = 1; j < m; ++j)
+ ops[j][i].Tvmult_add(v.block(i), u.block(j));
+ }
+ };
+
+ return_op.Tvmult_add = [ops](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == n, ExcDimensionMismatch(v.n_blocks(), n));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < n; ++i)
+ for (unsigned int j = 0; j < m; ++j)
+ ops[j][i].Tvmult_add(v.block(i), u.block(j));
+ };
+
+ return return_op;
+}
+
+
+/**
+ * @relates LinearOperator
+ *
+ * A variant of above function that builds up a block diagonal linear
+ * operator from an array @p ops of diagonal elements (off-diagonal blocks
+ * are assumed to be 0).
+ *
+ * The list @p ops is best passed as an initializer list. Consider for
+ * example a linear operator block (acting on Vector<double>)
+ * <code>diag(op_a0, op_a1, ..., op_am)</code>. The coresponding
+ * block_operator invocation takes the form
+ * @code
+ * block_diagonal_operator<m, BlockVector<double>>({op_00, op_a1, ..., op_am});
+ * @endcode
+ *
+ * @ingroup LAOperators
+ */
+template <unsigned int m,
+ typename Range = BlockVector<double>,
+ typename Domain = Range>
+LinearOperator<Range, Domain>
+block_diagonal_operator(const std::array<LinearOperator<typename Range::BlockType, typename Domain::BlockType>, m> &ops)
+{
+ static_assert(m > 0,
+ "a blockdiagonal LinearOperator must consist of at least one block");
+
+ LinearOperator<Range, Domain> return_op;
+
+ return_op.reinit_range_vector = [ops](Range &v, bool fast)
+ {
+ // Reinitialize the block vector to m blocks:
+ v.reinit(m);
+
+ // And reinitialize every individual block with reinit_range_vectors:
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i].reinit_range_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.reinit_domain_vector = [ops](Domain &v, bool fast)
+ {
+ // Reinitialize the block vector to m blocks:
+ v.reinit(m);
+
+ // And reinitialize every individual block with reinit_domain_vectors:
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i].reinit_domain_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.vmult = [ops](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i].vmult(v.block(i), u.block(i));
+ };
+
+ return_op.vmult_add = [ops](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i].vmult_add(v.block(i), u.block(i));
+ };
+
+ return_op.Tvmult = [ops](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i].Tvmult(v.block(i), u.block(i));
+ };
+
+ return_op.Tvmult_add = [ops](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ ops[i].Tvmult_add(v.block(i), u.block(i));
+ };
+
+ return return_op;
+}
+
+
+/**
+ * @relates LinearOperator
+ *
+ * A variant of above function that only takes a single LinearOperator
+ * argument @p op and creates a blockdiagonal linear operator with @p m
+ * copies of it.
+ *
+ * @ingroup LAOperators
+ */
+template <unsigned int m,
+ typename Range = BlockVector<double>,
+ typename Domain = Range>
+LinearOperator<Range, Domain>
+block_diagonal_operator(const LinearOperator<typename Range::BlockType, typename Domain::BlockType> &op)
+{
+
+ static_assert(m > 0,
+ "a blockdiagonal LinearOperator must consist of at least "
+ "one block");
+
+ LinearOperator<Range, Domain> return_op;
+
+ return_op.reinit_range_vector = [op](Range &v, bool fast)
+ {
+ // Reinitialize the block vector to m blocks:
+ v.reinit(m);
+
+ // And reinitialize every individual block with reinit_range_vectors:
+ for (unsigned int i = 0; i < m; ++i)
+ op.reinit_range_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.reinit_domain_vector = [op](Domain &v, bool fast)
+ {
+ // Reinitialize the block vector to m blocks:
+ v.reinit(m);
+
+ // And reinitialize every individual block with reinit_domain_vectors:
+ for (unsigned int i = 0; i < m; ++i)
+ op.reinit_domain_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.vmult = [op](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ op.vmult(v.block(i), u.block(i));
+ };
+
+ return_op.vmult_add = [op](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ op.vmult_add(v.block(i), u.block(i));
+ };
+
+ return_op.Tvmult = [op](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ op.Tvmult(v.block(i), u.block(i));
+ };
+
+ return_op.Tvmult_add = [op](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m));
+ Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m));
+
+ for (unsigned int i = 0; i < m; ++i)
+ op.Tvmult_add(v.block(i), u.block(i));
+ };
+
+ return return_op;
+}
+
+
+/**
+ * @relates LinearOperator
+ *
+ * A function that takes a block matrix @p a and returns its associated
+ * lower triangular matrix operator (diagonal is not included).
+ *
+ * @code
+ * a00 | a01 | a02 | |
+ * --------------- ---------------
+ * a10 | a11 | a12 -> a10 | |
+ * --------------- ---------------
+ * a20 | a21 | a22 a20 | a21 |
+ * @endcode
+ *
+ * @ingroup LAOperators
+ */
+
+// workaround for a bug in <=gcc-4.7 that does not like partial template
+// default values in combination with local lambda expressions [1]
+// [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53624
+template <typename Range = BlockVector<double>,
+ typename Domain = Range,
+ typename BlockMatrix>
+LinearOperator<Range, Domain>
+lower_triangular_operator(const BlockMatrix &);
+
+
+template <typename Range, typename Domain, typename BlockMatrix>
+LinearOperator<Range, Domain>
+lower_triangular_operator(const BlockMatrix &block_matrix)
+{
+ Assert(block_matrix.n_block_rows() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(block_matrix.n_block_rows(),block_matrix.n_block_cols()) );
+
+ LinearOperator<Range, Domain> return_op;
+
+ return_op.reinit_range_vector = [&block_matrix](Range &v, bool fast)
+ {
+ // Reinitialize the block vector to have the number of blocks
+ // equal to the number of row blocks of the matrix block_matrix.
+ v.reinit(block_matrix.n_block_rows());
+
+ // And reinitialize every individual block with reinit_range_vectors:
+ for (unsigned int i = 0; i < block_matrix.n_block_rows(); ++i)
+ linear_operator<typename Range::BlockType, typename Domain::BlockType,
+ typename BlockMatrix::BlockType>(block_matrix.block(i, 0))
+ .reinit_range_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.reinit_domain_vector = [&block_matrix](Domain &v, bool fast)
+ {
+ // Reinitialize the block vector to have the number of blocks
+ // equal to the number of coloumn blocks of the matrix block_matrix.
+ v.reinit(block_matrix.n_block_cols());
+
+ // And reinitialize every individual block with reinit_domain_vectors:
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ linear_operator<typename Range::BlockType, typename Domain::BlockType,
+ typename BlockMatrix::BlockType>(block_matrix.block(0, i))
+ .reinit_domain_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.vmult = [&block_matrix](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));
+ Assert(u.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));
+
+ v.block(0) *= 0;
+ for (unsigned int i = 1; i < block_matrix.n_block_rows(); ++i)
+ {
+ block_matrix.block(i,0).vmult(v.block(i), u.block(0));
+ for (unsigned int j = 1; j < i; ++j)
+ block_matrix.block(i,j).vmult_add(v.block(i), u.block(j));
+ }
+ };
+
+ return_op.vmult_add = [&block_matrix](Range &v, const Domain &u)
+ {
+ Assert(v.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));
+ Assert(u.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));
+
+ for (unsigned int i = 1; i < block_matrix.n_block_rows(); ++i)
+ {
+ block_matrix.block(i,0).vmult_add(v.block(i), u.block(0));
+ for (unsigned int j = 1; j < i; ++j)
+ block_matrix.block(i,j).vmult_add(v.block(i), u.block(j));
+ }
+ };
+
+ return_op.Tvmult = [&block_matrix](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));
+ Assert(u.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));
+
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ {
+ v.block(i) *= 0;
+ for (unsigned int j = i + 1; j < block_matrix.n_block_rows(); ++j)
+ block_matrix.block(j,i).Tvmult_add(v.block(i), u.block(j));
+ }
+ };
+
+ return_op.Tvmult_add = [&block_matrix](Domain &v, const Range &u)
+ {
+ Assert(v.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));
+ Assert(u.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));
+
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ for (unsigned int j = i + 1; j < block_matrix.n_block_rows(); ++j)
+ block_matrix.block(j,i).Tvmult_add(v.block(i), u.block(j));
+ };
+
+ return return_op;
+}
+
+
+/**
+ * @relates LinearOperator
+ *
+ * A function that takes a block matrix @p a and returns its associated
+ * upper triangular matrix operator (diagonal is not included).
+ *
+ * @code
+ * a00 | a01 | a02 | a01 | a02
+ * --------------- ---------------
+ * a10 | a11 | a12 -> | | a12
+ * --------------- ---------------
+ * a20 | a21 | a22 | |
+ * @endcode
+ *
+ * @ingroup LAOperators
+ */
+
+// workaround for a bug in <=gcc-4.7 that does not like partial template
+// default values in combination with local lambda expressions [1]
+// [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53624
+template <typename Range = BlockVector<double>,
+ typename Domain = Range,
+ typename BlockMatrix>
+LinearOperator<Range, Domain>
+upper_triangular_operator(const BlockMatrix &);
+
+
+template <typename Range, typename Domain, typename BlockMatrix>
+LinearOperator<Range, Domain>
+upper_triangular_operator(const BlockMatrix &block_matrix)
+{
+ Assert( block_matrix.n_block_rows() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(block_matrix.n_block_rows(),block_matrix.n_block_cols()) );
+
+ LinearOperator<Range, Domain> return_op;
+
+ return_op.reinit_range_vector = [&block_matrix](Range &v, bool fast)
+ {
+ // Reinitialize the block vector to have the number of blocks
+ // equal to the number of row blocks of the matrix block_matrix.
+ v.reinit(block_matrix.n_block_rows());
+
+ // And reinitialize every individual block with reinit_range_vectors:
+ for (unsigned int i = 0; i < block_matrix.n_block_rows(); ++i)
+ linear_operator<typename Range::BlockType, typename Domain::BlockType,
+ typename BlockMatrix::BlockType>(block_matrix.block(i, 0))
+ .reinit_range_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.reinit_domain_vector = [&block_matrix](Domain &v, bool fast)
+ {
+ // Reinitialize the block vector to have the number of blocks
+ // equal to the number of coloumn blocks of the matrix block_matrix.
+ v.reinit(block_matrix.n_block_cols());
+
+ // And reinitialize every individual block with reinit_domain_vectors:
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ linear_operator<typename Range::BlockType, typename Domain::BlockType,
+ typename BlockMatrix::BlockType>(block_matrix.block(0, i))
+ .reinit_domain_vector(v.block(i), fast);
+
+ v.collect_sizes();
+ };
+
+ return_op.vmult = [&block_matrix](Range &v, const Domain &u)
+ {
+ Assert( v.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));
+ Assert( u.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));
+
+ for (unsigned int i = 0; i < block_matrix.n_block_rows(); ++i)
+ {
+ v.block(i) *= 0;
+ for (unsigned int j = i + 1; j < block_matrix.n_block_cols(); ++j)
+ block_matrix.block(i,j).Tvmult_add(v.block(i), u.block(j));
+ }
+
+ };
+
+ return_op.vmult_add = [&block_matrix](Range &v, const Domain &u)
+ {
+ Assert( v.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));
+ Assert( u.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));
+
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ for (unsigned int j = i + 1; j < block_matrix.n_block_rows(); ++j)
+ block_matrix.block(i,j).Tvmult_add(v.block(i), u.block(j));
+ };
+
+ return_op.Tvmult = [&block_matrix](Domain &v, const Range &u)
+ {
+ Assert( v.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));
+ Assert( u.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));
+
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ {
+ v.block(i) *= 0;
+ for (unsigned int j = 0; j < i; ++j)
+ block_matrix.block(j,i).vmult_add(v.block(i), u.block(j));
+ }
+ };
+
+ return_op.Tvmult_add = [&block_matrix](Domain &v, const Range &u)
+ {
+ Assert( v.n_blocks() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));
+ Assert( u.n_blocks() == block_matrix.n_block_rows(),
+ ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));
+
+ for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)
+ for (unsigned int j = 0; j < i; ++j)
+ block_matrix.block(j,i).vmult_add(v.block(i), u.block(j));
+ };
+
+ return return_op;
+}
+
+
+/**
+ * @relates LinearOperator
+ *
+ * Let M be a block matrix of the form Id + T made of nxn blocks and where
+ * T is a lower / upper triangular (without diagonal). Then, its inverse is
+ * of the form:
+ * @code
+ * Id + sum_{i=1}^{n-1} (-1)^i T^i
+ * @endcode
+ * This formula can be used to invert all triangular matrices (diagonal
+ * included of course).
+ *
+ * This function takes a block matrix @p block_matrix (possibly full) and a
+ * linear block operator @p inverse_diagonal made of the inverse of the
+ * diagonal blocks inverses. The output is the inverse of the matrix in the
+ * case of a triangular matrix and as inverse_diagonal its diagonal blocks
+ * inverses. Otherwise, the result is a preconditioner.
+ *
+ * The parameter @p lower is a bool that allows to specify if we want to
+ * use lower triangular part of @p block_matrix (true, this is the default
+ * value) or to use upper triangular part of @p block_matrix (false).
+ *
+ * @ingroup LAOperators
+ */
+
+// workaround for a bug in <=gcc-4.7 that does not like partial template
+// default values in combination with local lambda expressions [1]
+// [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53624
+template <typename Range = BlockVector<double>,
+ typename Domain = Range,
+ typename BlockMatrix>
+LinearOperator<Range, Domain>
+block_triangular_inverse(const BlockMatrix &,
+ const LinearOperator<Range, Domain> &,
+ bool lower = true);
+
+
+template <typename Range, typename Domain, typename BlockMatrix>
+LinearOperator<Range, Domain>
+block_triangular_inverse(const BlockMatrix &block_matrix,
+ const LinearOperator<Range, Domain> &inverse_diagonal,
+ bool lower)
+{
+ Assert(block_matrix.n_block_rows() == block_matrix.n_block_cols(),
+ ExcDimensionMismatch(block_matrix.n_block_rows(),
+ block_matrix.n_block_cols()));
+
+ LinearOperator<Domain, Range> op_a;
+
+ if (lower)
+ {
+ op_a = lower_triangular_operator<Range, Domain, BlockMatrix>(block_matrix);
+ }
+ else
+ {
+ op_a = upper_triangular_operator<Range, Domain, BlockMatrix>(block_matrix);
+ }
+
+ auto id = identity_operator(op_a.reinit_range_vector);
+ auto result = identity_operator(op_a.reinit_range_vector);
+
+ // Notice that the following formula is recursive. We are evaluating:
+ // Id - T + T^2 - T^3 ... (- T)^block_matrix.n_block_cols()
+ for (unsigned int i = 0; i < block_matrix.n_block_cols() - 1; ++i)
+ result = id - inverse_diagonal * op_a * result;
+
+ return result * inverse_diagonal;
+}
+
+
+//@}
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif // DEAL_II_WITH_CXX11
+#endif
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Tests for block_operator
+
+#include "../tests.h"
+
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/dofs/dof_tools.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/lac/block_linear_operator.h>
+#include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/dynamic_sparsity_pattern.h>
+
+#define PRINTME(name, var) \
+ deallog << "Block vector: " name << ":" << std::endl; \
+ for (unsigned int i = 0; i < var.n_blocks(); ++i) \
+ deallog << "[block " << i << " ] " << var.block(i);
+
+
+using namespace dealii;
+
+int main()
+{
+ initlog();
+ deallog << std::setprecision(10);
+
+ static const int dim = 2;
+
+ Triangulation<dim> triangulation;
+ GridGenerator::hyper_cube (triangulation);
+ triangulation.refine_global(2);
+
+ MappingQ1<dim> mapping_q1;
+ FESystem<dim> fe(FE_Q<dim>(2), 1, FE_Q<dim>(1), 1);
+ DoFHandler<dim> dof_handler(triangulation);
+
+ dof_handler.distribute_dofs(fe);
+
+ std::vector<types::global_dof_index> dofs_per_component (2);
+ DoFTools::count_dofs_per_component (dof_handler, dofs_per_component);
+ const unsigned int n_u = dofs_per_component[0],
+ n_p = dofs_per_component[1];
+
+ BlockDynamicSparsityPattern dsp(2, 2);
+ dsp.block(0, 0).reinit (n_u, n_u);
+ dsp.block(1, 0).reinit (n_p, n_u);
+ dsp.block(0, 1).reinit (n_u, n_p);
+ dsp.block(1, 1).reinit (n_p, n_p);
+
+ for (unsigned int i = 0; i < n_u; ++i) {
+ for (unsigned int j = 0; j < n_u; ++j)
+ dsp.block(0, 0).add(i, j);
+ for (unsigned int j = 0; j < n_p; ++j) {
+ dsp.block(0, 1).add(i, j);
+ dsp.block(1, 0).add(j, i);
+ }
+ }
+ for (unsigned int i = 0; i < n_p; ++i)
+ for (unsigned int j = 0; j < n_p; ++j)
+ dsp.block(1, 1).add(i, j);
+ dsp.collect_sizes ();
+
+ BlockSparsityPattern sparsity_pattern;
+ sparsity_pattern.copy_from(dsp);
+ sparsity_pattern.compress();
+
+ BlockSparseMatrix<double> a (sparsity_pattern);
+
+ // Come up with some simple, but non-trivial structure:
+
+ for(unsigned int i = 0; i < a.block(0, 0).n(); ++i)
+ a.block(0, 0).set(i, i, 10.);
+
+ for(unsigned int i = 0; i < a.block(1, 1).n(); ++i)
+ a.block(1, 1).set(i, i, 5.);
+
+ for(unsigned int i = 0; i < a.block(1, 0).m(); ++i)
+ a.block(0, 1).set(i, i, 3.);
+
+ for(unsigned int i = 0; i < a.block(0, 1).n(); ++i)
+ a.block(1, 0).set(i, i, 1.);
+
+
+ auto op_a = linear_operator<BlockVector<double>>(a);
+
+ auto op_b00 = linear_operator(a.block(0, 0));
+ auto op_b01 = linear_operator(a.block(0, 1));
+ auto op_b10 = linear_operator(a.block(1, 0));
+ auto op_b11 = linear_operator(a.block(1, 1));
+
+ std::array<std::array<decltype(op_b00), 2>, 2> temp{op_b00, op_b01, op_b10,
+ op_b11};
+ auto op_b = block_operator<2, 2, BlockVector<double>>(temp);
+
+ // vmult:
+
+ BlockVector<double> u;
+ op_a.reinit_domain_vector(u, false);
+ for (unsigned int i = 0; i < u.size(); ++i) {
+ u[i] = (double)(i+1);
+ }
+
+ PRINTME("u", u);
+
+ BlockVector<double> v;
+ op_a.reinit_domain_vector(v, false);
+ BlockVector<double> w;
+ op_a.reinit_domain_vector(w, false);
+ BlockVector<double> x;
+ op_a.reinit_domain_vector(x, false);
+
+ op_a.vmult(v, u);
+ PRINTME("Au", v);
+
+ op_b.vmult(w, u);
+ PRINTME("Bu", w);
+
+ x = v;
+ x -= w;
+ PRINTME("Au-Bu", x);
+
+ // Test that both objects give the same results:
+
+ auto op_x = op_a - op_b;
+
+ op_x.vmult(x, u);
+ PRINTME("vmult", x);
+
+ x = 0.;
+ op_x.vmult_add(x, u);
+ PRINTME("vmult_add", x);
+
+ op_x.Tvmult(x, u);
+ PRINTME("Tvmult", x);
+
+ x = 0.;
+ op_x.Tvmult_add(x, u);
+ PRINTME("Tvmult_add", x);
+
+
+ // Test vector reinitalization:
+
+ op_x = op_b * op_b * op_b;
+ op_x.vmult(x, u);
+ PRINTME("(B*B*B) vmult", x);
+
+ x = 0.;
+ op_x.vmult_add(x, u);
+ PRINTME("(B*B*B) vmult_add", x);
+
+ op_x.Tvmult(x, u);
+ PRINTME("(B*B*B) Tvmult", x);
+
+ x = 0.;
+ op_x.Tvmult_add(x, u);
+ PRINTME("(B*B*B) Tvmult_add", x);
+
+ // And finally complicated block structures:
+
+ std::array<std::array<decltype(op_b00), 3>, 3> temp2{
+ op_b00, op_b01, op_b00, op_b10, op_b11, op_b10, op_b10, op_b11, op_b10};
+ auto op_upp_x_upu = block_operator<3, 3, BlockVector<double>>(temp2);
+
+ op_upp_x_upu.reinit_domain_vector(u, false);
+ for (unsigned int i = 0; i < u.size(); ++i) {
+ u[i] = (double)(i+1);
+ }
+ PRINTME("u", u);
+
+ op_upp_x_upu.reinit_range_vector(v, false);
+ op_upp_x_upu.vmult(v, u);
+ PRINTME("v", v);
+
+ v = 0.;
+ op_upp_x_upu.vmult_add(v, u);
+ PRINTME("v", v);
+
+ std::array<std::array<decltype(op_b01), 1>, 3> temp3{op_b01, op_b11, op_b11};
+ auto op_upp_x_p = block_operator<3, 1, BlockVector<double>>(temp3);
+
+ std::array<std::array<decltype(op_b01), 3>, 1> temp4{op_b00, op_b01, op_b00};
+ auto op_u_x_upu = block_operator<1, 3, BlockVector<double>>(temp4);
+
+ auto op_long = op_u_x_upu * transpose_operator(op_upp_x_upu) * op_upp_x_p;
+
+ op_long.reinit_domain_vector(u, false);
+ for (unsigned int i = 0; i < u.size(); ++i) {
+ u[i] = (double)(i+1);
+ }
+ PRINTME("u", u);
+
+ op_long.reinit_range_vector(v, false);
+ op_long.vmult(v, u);
+ PRINTME("v", v);
+
+ v = 0.;
+ op_long.vmult_add(v, u);
+ PRINTME("v", v);
+
+}
+
+
+
--- /dev/null
+
+DEAL::Block vector: u:
+DEAL::[block 0 ] 1.000000000 2.000000000 3.000000000 4.000000000 5.000000000 6.000000000 7.000000000 8.000000000 9.000000000 10.00000000 11.00000000 12.00000000 13.00000000 14.00000000 15.00000000 16.00000000 17.00000000 18.00000000 19.00000000 20.00000000 21.00000000 22.00000000 23.00000000 24.00000000 25.00000000 26.00000000 27.00000000 28.00000000 29.00000000 30.00000000 31.00000000 32.00000000 33.00000000 34.00000000 35.00000000 36.00000000 37.00000000 38.00000000 39.00000000 40.00000000 41.00000000 42.00000000 43.00000000 44.00000000 45.00000000 46.00000000 47.00000000 48.00000000 49.00000000 50.00000000 51.00000000 52.00000000 53.00000000 54.00000000 55.00000000 56.00000000 57.00000000 58.00000000 59.00000000 60.00000000 61.00000000 62.00000000 63.00000000 64.00000000 65.00000000 66.00000000 67.00000000 68.00000000 69.00000000 70.00000000 71.00000000 72.00000000 73.00000000 74.00000000 75.00000000 76.00000000 77.00000000 78.00000000 79.00000000 80.00000000 81.00000000
+DEAL::[block 1 ] 82.00000000 83.00000000 84.00000000 85.00000000 86.00000000 87.00000000 88.00000000 89.00000000 90.00000000 91.00000000 92.00000000 93.00000000 94.00000000 95.00000000 96.00000000 97.00000000 98.00000000 99.00000000 100.0000000 101.0000000 102.0000000 103.0000000 104.0000000 105.0000000 106.0000000
+DEAL::Block vector: Au:
+DEAL::[block 0 ] 256.0000000 269.0000000 282.0000000 295.0000000 308.0000000 321.0000000 334.0000000 347.0000000 360.0000000 373.0000000 386.0000000 399.0000000 412.0000000 425.0000000 438.0000000 451.0000000 464.0000000 477.0000000 490.0000000 503.0000000 516.0000000 529.0000000 542.0000000 555.0000000 568.0000000 260.0000000 270.0000000 280.0000000 290.0000000 300.0000000 310.0000000 320.0000000 330.0000000 340.0000000 350.0000000 360.0000000 370.0000000 380.0000000 390.0000000 400.0000000 410.0000000 420.0000000 430.0000000 440.0000000 450.0000000 460.0000000 470.0000000 480.0000000 490.0000000 500.0000000 510.0000000 520.0000000 530.0000000 540.0000000 550.0000000 560.0000000 570.0000000 580.0000000 590.0000000 600.0000000 610.0000000 620.0000000 630.0000000 640.0000000 650.0000000 660.0000000 670.0000000 680.0000000 690.0000000 700.0000000 710.0000000 720.0000000 730.0000000 740.0000000 750.0000000 760.0000000 770.0000000 780.0000000 790.0000000 800.0000000 810.0000000
+DEAL::[block 1 ] 411.0000000 417.0000000 423.0000000 429.0000000 435.0000000 441.0000000 447.0000000 453.0000000 459.0000000 465.0000000 471.0000000 477.0000000 483.0000000 489.0000000 495.0000000 501.0000000 507.0000000 513.0000000 519.0000000 525.0000000 531.0000000 537.0000000 543.0000000 549.0000000 555.0000000
+DEAL::Block vector: Bu:
+DEAL::[block 0 ] 256.0000000 269.0000000 282.0000000 295.0000000 308.0000000 321.0000000 334.0000000 347.0000000 360.0000000 373.0000000 386.0000000 399.0000000 412.0000000 425.0000000 438.0000000 451.0000000 464.0000000 477.0000000 490.0000000 503.0000000 516.0000000 529.0000000 542.0000000 555.0000000 568.0000000 260.0000000 270.0000000 280.0000000 290.0000000 300.0000000 310.0000000 320.0000000 330.0000000 340.0000000 350.0000000 360.0000000 370.0000000 380.0000000 390.0000000 400.0000000 410.0000000 420.0000000 430.0000000 440.0000000 450.0000000 460.0000000 470.0000000 480.0000000 490.0000000 500.0000000 510.0000000 520.0000000 530.0000000 540.0000000 550.0000000 560.0000000 570.0000000 580.0000000 590.0000000 600.0000000 610.0000000 620.0000000 630.0000000 640.0000000 650.0000000 660.0000000 670.0000000 680.0000000 690.0000000 700.0000000 710.0000000 720.0000000 730.0000000 740.0000000 750.0000000 760.0000000 770.0000000 780.0000000 790.0000000 800.0000000 810.0000000
+DEAL::[block 1 ] 411.0000000 417.0000000 423.0000000 429.0000000 435.0000000 441.0000000 447.0000000 453.0000000 459.0000000 465.0000000 471.0000000 477.0000000 483.0000000 489.0000000 495.0000000 501.0000000 507.0000000 513.0000000 519.0000000 525.0000000 531.0000000 537.0000000 543.0000000 549.0000000 555.0000000
+DEAL::Block vector: Au-Bu:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: vmult:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: vmult_add:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: Tvmult:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: Tvmult_add:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (B*B*B) vmult:
+DEAL::[block 0 ] 44863.00000 46472.00000 48081.00000 49690.00000 51299.00000 52908.00000 54517.00000 56126.00000 57735.00000 59344.00000 60953.00000 62562.00000 64171.00000 65780.00000 67389.00000 68998.00000 70607.00000 72216.00000 73825.00000 75434.00000 77043.00000 78652.00000 80261.00000 81870.00000 83479.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 15348.00000 15711.00000 16074.00000 16437.00000 16800.00000 17163.00000 17526.00000 17889.00000 18252.00000 18615.00000 18978.00000 19341.00000 19704.00000 20067.00000 20430.00000 20793.00000 21156.00000 21519.00000 21882.00000 22245.00000 22608.00000 22971.00000 23334.00000 23697.00000 24060.00000
+DEAL::Block vector: (B*B*B) vmult_add:
+DEAL::[block 0 ] 44863.00000 46472.00000 48081.00000 49690.00000 51299.00000 52908.00000 54517.00000 56126.00000 57735.00000 59344.00000 60953.00000 62562.00000 64171.00000 65780.00000 67389.00000 68998.00000 70607.00000 72216.00000 73825.00000 75434.00000 77043.00000 78652.00000 80261.00000 81870.00000 83479.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 15348.00000 15711.00000 16074.00000 16437.00000 16800.00000 17163.00000 17526.00000 17889.00000 18252.00000 18615.00000 18978.00000 19341.00000 19704.00000 20067.00000 20430.00000 20793.00000 21156.00000 21519.00000 21882.00000 22245.00000 22608.00000 22971.00000 23334.00000 23697.00000 24060.00000
+DEAL::Block vector: (B*B*B) Tvmult:
+DEAL::[block 0 ] 15671.00000 16924.00000 18177.00000 19430.00000 20683.00000 21936.00000 23189.00000 24442.00000 25695.00000 26948.00000 28201.00000 29454.00000 30707.00000 31960.00000 33213.00000 34466.00000 35719.00000 36972.00000 38225.00000 39478.00000 40731.00000 41984.00000 43237.00000 44490.00000 45743.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 15704.00000 16423.00000 17142.00000 17861.00000 18580.00000 19299.00000 20018.00000 20737.00000 21456.00000 22175.00000 22894.00000 23613.00000 24332.00000 25051.00000 25770.00000 26489.00000 27208.00000 27927.00000 28646.00000 29365.00000 30084.00000 30803.00000 31522.00000 32241.00000 32960.00000
+DEAL::Block vector: (B*B*B) Tvmult_add:
+DEAL::[block 0 ] 15671.00000 16924.00000 18177.00000 19430.00000 20683.00000 21936.00000 23189.00000 24442.00000 25695.00000 26948.00000 28201.00000 29454.00000 30707.00000 31960.00000 33213.00000 34466.00000 35719.00000 36972.00000 38225.00000 39478.00000 40731.00000 41984.00000 43237.00000 44490.00000 45743.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 15704.00000 16423.00000 17142.00000 17861.00000 18580.00000 19299.00000 20018.00000 20737.00000 21456.00000 22175.00000 22894.00000 23613.00000 24332.00000 25051.00000 25770.00000 26489.00000 27208.00000 27927.00000 28646.00000 29365.00000 30084.00000 30803.00000 31522.00000 32241.00000 32960.00000
+DEAL::Block vector: u:
+DEAL::[block 0 ] 1.000000000 2.000000000 3.000000000 4.000000000 5.000000000 6.000000000 7.000000000 8.000000000 9.000000000 10.00000000 11.00000000 12.00000000 13.00000000 14.00000000 15.00000000 16.00000000 17.00000000 18.00000000 19.00000000 20.00000000 21.00000000 22.00000000 23.00000000 24.00000000 25.00000000 26.00000000 27.00000000 28.00000000 29.00000000 30.00000000 31.00000000 32.00000000 33.00000000 34.00000000 35.00000000 36.00000000 37.00000000 38.00000000 39.00000000 40.00000000 41.00000000 42.00000000 43.00000000 44.00000000 45.00000000 46.00000000 47.00000000 48.00000000 49.00000000 50.00000000 51.00000000 52.00000000 53.00000000 54.00000000 55.00000000 56.00000000 57.00000000 58.00000000 59.00000000 60.00000000 61.00000000 62.00000000 63.00000000 64.00000000 65.00000000 66.00000000 67.00000000 68.00000000 69.00000000 70.00000000 71.00000000 72.00000000 73.00000000 74.00000000 75.00000000 76.00000000 77.00000000 78.00000000 79.00000000 80.00000000 81.00000000
+DEAL::[block 1 ] 82.00000000 83.00000000 84.00000000 85.00000000 86.00000000 87.00000000 88.00000000 89.00000000 90.00000000 91.00000000 92.00000000 93.00000000 94.00000000 95.00000000 96.00000000 97.00000000 98.00000000 99.00000000 100.0000000 101.0000000 102.0000000 103.0000000 104.0000000 105.0000000 106.0000000
+DEAL::[block 2 ] 107.0000000 108.0000000 109.0000000 110.0000000 111.0000000 112.0000000 113.0000000 114.0000000 115.0000000 116.0000000 117.0000000 118.0000000 119.0000000 120.0000000 121.0000000 122.0000000 123.0000000 124.0000000 125.0000000 126.0000000 127.0000000 128.0000000 129.0000000 130.0000000 131.0000000 132.0000000 133.0000000 134.0000000 135.0000000 136.0000000 137.0000000 138.0000000 139.0000000 140.0000000 141.0000000 142.0000000 143.0000000 144.0000000 145.0000000 146.0000000 147.0000000 148.0000000 149.0000000 150.0000000 151.0000000 152.0000000 153.0000000 154.0000000 155.0000000 156.0000000 157.0000000 158.0000000 159.0000000 160.0000000 161.0000000 162.0000000 163.0000000 164.0000000 165.0000000 166.0000000 167.0000000 168.0000000 169.0000000 170.0000000 171.0000000 172.0000000 173.0000000 174.0000000 175.0000000 176.0000000 177.0000000 178.0000000 179.0000000 180.0000000 181.0000000 182.0000000 183.0000000 184.0000000 185.0000000 186.0000000 187.0000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 1326.000000 1349.000000 1372.000000 1395.000000 1418.000000 1441.000000 1464.000000 1487.000000 1510.000000 1533.000000 1556.000000 1579.000000 1602.000000 1625.000000 1648.000000 1671.000000 1694.000000 1717.000000 1740.000000 1763.000000 1786.000000 1809.000000 1832.000000 1855.000000 1878.000000 1580.000000 1600.000000 1620.000000 1640.000000 1660.000000 1680.000000 1700.000000 1720.000000 1740.000000 1760.000000 1780.000000 1800.000000 1820.000000 1840.000000 1860.000000 1880.000000 1900.000000 1920.000000 1940.000000 1960.000000 1980.000000 2000.000000 2020.000000 2040.000000 2060.000000 2080.000000 2100.000000 2120.000000 2140.000000 2160.000000 2180.000000 2200.000000 2220.000000 2240.000000 2260.000000 2280.000000 2300.000000 2320.000000 2340.000000 2360.000000 2380.000000 2400.000000 2420.000000 2440.000000 2460.000000 2480.000000 2500.000000 2520.000000 2540.000000 2560.000000 2580.000000 2600.000000 2620.000000 2640.000000 2660.000000 2680.000000
+DEAL::[block 1 ] 518.0000000 525.0000000 532.0000000 539.0000000 546.0000000 553.0000000 560.0000000 567.0000000 574.0000000 581.0000000 588.0000000 595.0000000 602.0000000 609.0000000 616.0000000 623.0000000 630.0000000 637.0000000 644.0000000 651.0000000 658.0000000 665.0000000 672.0000000 679.0000000 686.0000000
+DEAL::[block 2 ] 518.0000000 525.0000000 532.0000000 539.0000000 546.0000000 553.0000000 560.0000000 567.0000000 574.0000000 581.0000000 588.0000000 595.0000000 602.0000000 609.0000000 616.0000000 623.0000000 630.0000000 637.0000000 644.0000000 651.0000000 658.0000000 665.0000000 672.0000000 679.0000000 686.0000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 1326.000000 1349.000000 1372.000000 1395.000000 1418.000000 1441.000000 1464.000000 1487.000000 1510.000000 1533.000000 1556.000000 1579.000000 1602.000000 1625.000000 1648.000000 1671.000000 1694.000000 1717.000000 1740.000000 1763.000000 1786.000000 1809.000000 1832.000000 1855.000000 1878.000000 1580.000000 1600.000000 1620.000000 1640.000000 1660.000000 1680.000000 1700.000000 1720.000000 1740.000000 1760.000000 1780.000000 1800.000000 1820.000000 1840.000000 1860.000000 1880.000000 1900.000000 1920.000000 1940.000000 1960.000000 1980.000000 2000.000000 2020.000000 2040.000000 2060.000000 2080.000000 2100.000000 2120.000000 2140.000000 2160.000000 2180.000000 2200.000000 2220.000000 2240.000000 2260.000000 2280.000000 2300.000000 2320.000000 2340.000000 2360.000000 2380.000000 2400.000000 2420.000000 2440.000000 2460.000000 2480.000000 2500.000000 2520.000000 2540.000000 2560.000000 2580.000000 2600.000000 2620.000000 2640.000000 2660.000000 2680.000000
+DEAL::[block 1 ] 518.0000000 525.0000000 532.0000000 539.0000000 546.0000000 553.0000000 560.0000000 567.0000000 574.0000000 581.0000000 588.0000000 595.0000000 602.0000000 609.0000000 616.0000000 623.0000000 630.0000000 637.0000000 644.0000000 651.0000000 658.0000000 665.0000000 672.0000000 679.0000000 686.0000000
+DEAL::[block 2 ] 518.0000000 525.0000000 532.0000000 539.0000000 546.0000000 553.0000000 560.0000000 567.0000000 574.0000000 581.0000000 588.0000000 595.0000000 602.0000000 609.0000000 616.0000000 623.0000000 630.0000000 637.0000000 644.0000000 651.0000000 658.0000000 665.0000000 672.0000000 679.0000000 686.0000000
+DEAL::Block vector: u:
+DEAL::[block 0 ] 1.000000000 2.000000000 3.000000000 4.000000000 5.000000000 6.000000000 7.000000000 8.000000000 9.000000000 10.00000000 11.00000000 12.00000000 13.00000000 14.00000000 15.00000000 16.00000000 17.00000000 18.00000000 19.00000000 20.00000000 21.00000000 22.00000000 23.00000000 24.00000000 25.00000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 977.0000000 1954.000000 2931.000000 3908.000000 4885.000000 5862.000000 6839.000000 7816.000000 8793.000000 9770.000000 10747.00000 11724.00000 12701.00000 13678.00000 14655.00000 15632.00000 16609.00000 17586.00000 18563.00000 19540.00000 20517.00000 21494.00000 22471.00000 23448.00000 24425.00000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 977.0000000 1954.000000 2931.000000 3908.000000 4885.000000 5862.000000 6839.000000 7816.000000 8793.000000 9770.000000 10747.00000 11724.00000 12701.00000 13678.00000 14655.00000 15632.00000 16609.00000 17586.00000 18563.00000 19540.00000 20517.00000 21494.00000 22471.00000 23448.00000 24425.00000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Tests for block_diagonal_operator
+
+#include "../tests.h"
+
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/dofs/dof_tools.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/lac/block_linear_operator.h>
+#include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/dynamic_sparsity_pattern.h>
+
+#define PRINTME(name, var) \
+ deallog << "Block vector: " name << ":" << std::endl; \
+ for (unsigned int i = 0; i < var.n_blocks(); ++i) \
+ deallog << "[block " << i << " ] " << var.block(i);
+
+
+using namespace dealii;
+
+int main()
+{
+ initlog();
+ deallog << std::setprecision(10);
+
+ static const int dim = 2;
+
+ Triangulation<dim> triangulation;
+ GridGenerator::hyper_cube (triangulation);
+ triangulation.refine_global(2);
+
+ MappingQ1<dim> mapping_q1;
+ FESystem<dim> fe(FE_Q<dim>(2), 1, FE_Q<dim>(1), 1, FE_Q<dim>(3), 1);
+ DoFHandler<dim> dof_handler(triangulation);
+
+ dof_handler.distribute_dofs(fe);
+
+ std::vector<types::global_dof_index> dpc (3);
+ DoFTools::count_dofs_per_component (dof_handler, dpc);
+
+ BlockDynamicSparsityPattern dsp(3, 3);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ dsp.block(i, j).reinit (dpc[i], dpc[j]);
+ dsp.collect_sizes ();
+
+ BlockSparsityPattern sparsity_pattern;
+ sparsity_pattern.copy_from(dsp);
+ sparsity_pattern.compress();
+
+ BlockSparseMatrix<double> a (sparsity_pattern);
+
+ // Come up with a simple structure:
+
+ for(unsigned int i = 0; i < a.block(0, 0).m(); ++i)
+ a.block(0, 0).set(i, i, 10.);
+ for(unsigned int i = 0; i < a.block(1, 1).m(); ++i)
+ a.block(1, 1).set(i, i, 5.);
+ for(unsigned int i = 0; i < a.block(2, 2).m(); ++i)
+ a.block(2, 2).set(i, i, 3.);
+
+
+ auto op_a = linear_operator<BlockVector<double>>(a);
+
+ auto op_b0 = linear_operator(a.block(0, 0));
+ auto op_b1 = linear_operator(a.block(1, 1));
+ auto op_b2 = linear_operator(a.block(2, 2));
+
+
+ std::array<decltype(op_b0), 3> temp{op_b0, op_b1, op_b2};
+ auto op_b = block_diagonal_operator<3, BlockVector<double>>(temp);
+
+ // vmult:
+
+ BlockVector<double> u;
+ op_a.reinit_domain_vector(u, false);
+ for (unsigned int i = 0; i < u.size(); ++i) {
+ u[i] = (double)(i+1);
+ }
+
+ PRINTME("u", u);
+
+ BlockVector<double> v;
+ op_a.reinit_domain_vector(v, false);
+ BlockVector<double> w;
+ op_a.reinit_domain_vector(w, false);
+ BlockVector<double> x;
+ op_a.reinit_domain_vector(x, false);
+
+ op_a.vmult(v, u);
+ PRINTME("Au", v);
+
+ op_b.vmult(w, u);
+ PRINTME("Bu", w);
+
+ x = v;
+ x -= w;
+ PRINTME("Au-Bu", x);
+
+ // Test that both objects give the same results:
+
+ auto op_x = op_a - op_b;
+
+ op_x.vmult(x, u);
+ PRINTME("(A-B).vmult", x);
+
+ x = 0.;
+ op_x.vmult_add(x, u);
+ PRINTME("(A-B).vmult_add", x);
+
+ op_x.Tvmult(x, u);
+ PRINTME("(A-B).Tvmult", x);
+
+ x = 0.;
+ op_x.Tvmult_add(x, u);
+ PRINTME("(A-B).Tvmult_add", x);
+
+
+ // Test vector reinitalization:
+
+ op_x = op_b * op_b * op_b;
+ op_x.vmult(x, u);
+ PRINTME("(B*B*B) vmult", x);
+
+ x = 0.;
+ op_x.vmult_add(x, u);
+ PRINTME("(B*B*B) vmult_add", x);
+
+ op_x.Tvmult(x, u);
+ PRINTME("(B*B*B) Tvmult", x);
+
+ x = 0.;
+ op_x.Tvmult_add(x, u);
+ PRINTME("(B*B*B) Tvmult_add", x);
+
+ // And finally the other block_diagonal_operator variant:
+
+ std::array<decltype(op_b0), 5> temp2{op_b0, op_b0, op_b0, op_b0, op_b0};
+ auto op_c = block_diagonal_operator<5, BlockVector<double>>(temp2);
+
+ auto op_d = block_diagonal_operator<5, BlockVector<double>>(op_b0);
+
+ op_c.reinit_domain_vector(u, false);
+ for (unsigned int i = 0; i < u.size(); ++i) {
+ u[i] = (double)(i+1);
+ }
+ PRINTME("u", u);
+ op_c.reinit_domain_vector(x, false);
+
+ op_x = op_c - op_d;
+
+ op_x.vmult(x, u);
+ PRINTME("(C-D) vmult", x);
+
+ x = 0.;
+ op_x.vmult_add(x, u);
+ PRINTME("(C-D) vmult_add", x);
+
+ op_x.Tvmult(x, u);
+ PRINTME("(C-D) Tvmult", x);
+
+ x = 0.;
+ op_x.Tvmult_add(x, u);
+ PRINTME("(C-D) Tvmult_add", x);
+
+}
+
+
+
--- /dev/null
+
+DEAL::Block vector: u:
+DEAL::[block 0 ] 1.000000000 2.000000000 3.000000000 4.000000000 5.000000000 6.000000000 7.000000000 8.000000000 9.000000000 10.00000000 11.00000000 12.00000000 13.00000000 14.00000000 15.00000000 16.00000000 17.00000000 18.00000000 19.00000000 20.00000000 21.00000000 22.00000000 23.00000000 24.00000000 25.00000000 26.00000000 27.00000000 28.00000000 29.00000000 30.00000000 31.00000000 32.00000000 33.00000000 34.00000000 35.00000000 36.00000000 37.00000000 38.00000000 39.00000000 40.00000000 41.00000000 42.00000000 43.00000000 44.00000000 45.00000000 46.00000000 47.00000000 48.00000000 49.00000000 50.00000000 51.00000000 52.00000000 53.00000000 54.00000000 55.00000000 56.00000000 57.00000000 58.00000000 59.00000000 60.00000000 61.00000000 62.00000000 63.00000000 64.00000000 65.00000000 66.00000000 67.00000000 68.00000000 69.00000000 70.00000000 71.00000000 72.00000000 73.00000000 74.00000000 75.00000000 76.00000000 77.00000000 78.00000000 79.00000000 80.00000000 81.00000000
+DEAL::[block 1 ] 82.00000000 83.00000000 84.00000000 85.00000000 86.00000000 87.00000000 88.00000000 89.00000000 90.00000000 91.00000000 92.00000000 93.00000000 94.00000000 95.00000000 96.00000000 97.00000000 98.00000000 99.00000000 100.0000000 101.0000000 102.0000000 103.0000000 104.0000000 105.0000000 106.0000000
+DEAL::[block 2 ] 107.0000000 108.0000000 109.0000000 110.0000000 111.0000000 112.0000000 113.0000000 114.0000000 115.0000000 116.0000000 117.0000000 118.0000000 119.0000000 120.0000000 121.0000000 122.0000000 123.0000000 124.0000000 125.0000000 126.0000000 127.0000000 128.0000000 129.0000000 130.0000000 131.0000000 132.0000000 133.0000000 134.0000000 135.0000000 136.0000000 137.0000000 138.0000000 139.0000000 140.0000000 141.0000000 142.0000000 143.0000000 144.0000000 145.0000000 146.0000000 147.0000000 148.0000000 149.0000000 150.0000000 151.0000000 152.0000000 153.0000000 154.0000000 155.0000000 156.0000000 157.0000000 158.0000000 159.0000000 160.0000000 161.0000000 162.0000000 163.0000000 164.0000000 165.0000000 166.0000000 167.0000000 168.0000000 169.0000000 170.0000000 171.0000000 172.0000000 173.0000000 174.0000000 175.0000000 176.0000000 177.0000000 178.0000000 179.0000000 180.0000000 181.0000000 182.0000000 183.0000000 184.0000000 185.0000000 186.0000000 187.0000000 188.0000000 189.0000000 190.0000000 191.0000000 192.0000000 193.0000000 194.0000000 195.0000000 196.0000000 197.0000000 198.0000000 199.0000000 200.0000000 201.0000000 202.0000000 203.0000000 204.0000000 205.0000000 206.0000000 207.0000000 208.0000000 209.0000000 210.0000000 211.0000000 212.0000000 213.0000000 214.0000000 215.0000000 216.0000000 217.0000000 218.0000000 219.0000000 220.0000000 221.0000000 222.0000000 223.0000000 224.0000000 225.0000000 226.0000000 227.0000000 228.0000000 229.0000000 230.0000000 231.0000000 232.0000000 233.0000000 234.0000000 235.0000000 236.0000000 237.0000000 238.0000000 239.0000000 240.0000000 241.0000000 242.0000000 243.0000000 244.0000000 245.0000000 246.0000000 247.0000000 248.0000000 249.0000000 250.0000000 251.0000000 252.0000000 253.0000000 254.0000000 255.0000000 256.0000000 257.0000000 258.0000000 259.0000000 260.0000000 261.0000000 262.0000000 263.0000000 264.0000000 265.0000000 266.0000000 267.0000000 268.0000000 269.0000000 270.0000000 271.0000000 272.0000000 273.0000000 274.0000000 275.0000000
+DEAL::Block vector: Au:
+DEAL::[block 0 ] 10.00000000 20.00000000 30.00000000 40.00000000 50.00000000 60.00000000 70.00000000 80.00000000 90.00000000 100.0000000 110.0000000 120.0000000 130.0000000 140.0000000 150.0000000 160.0000000 170.0000000 180.0000000 190.0000000 200.0000000 210.0000000 220.0000000 230.0000000 240.0000000 250.0000000 260.0000000 270.0000000 280.0000000 290.0000000 300.0000000 310.0000000 320.0000000 330.0000000 340.0000000 350.0000000 360.0000000 370.0000000 380.0000000 390.0000000 400.0000000 410.0000000 420.0000000 430.0000000 440.0000000 450.0000000 460.0000000 470.0000000 480.0000000 490.0000000 500.0000000 510.0000000 520.0000000 530.0000000 540.0000000 550.0000000 560.0000000 570.0000000 580.0000000 590.0000000 600.0000000 610.0000000 620.0000000 630.0000000 640.0000000 650.0000000 660.0000000 670.0000000 680.0000000 690.0000000 700.0000000 710.0000000 720.0000000 730.0000000 740.0000000 750.0000000 760.0000000 770.0000000 780.0000000 790.0000000 800.0000000 810.0000000
+DEAL::[block 1 ] 410.0000000 415.0000000 420.0000000 425.0000000 430.0000000 435.0000000 440.0000000 445.0000000 450.0000000 455.0000000 460.0000000 465.0000000 470.0000000 475.0000000 480.0000000 485.0000000 490.0000000 495.0000000 500.0000000 505.0000000 510.0000000 515.0000000 520.0000000 525.0000000 530.0000000
+DEAL::[block 2 ] 321.0000000 324.0000000 327.0000000 330.0000000 333.0000000 336.0000000 339.0000000 342.0000000 345.0000000 348.0000000 351.0000000 354.0000000 357.0000000 360.0000000 363.0000000 366.0000000 369.0000000 372.0000000 375.0000000 378.0000000 381.0000000 384.0000000 387.0000000 390.0000000 393.0000000 396.0000000 399.0000000 402.0000000 405.0000000 408.0000000 411.0000000 414.0000000 417.0000000 420.0000000 423.0000000 426.0000000 429.0000000 432.0000000 435.0000000 438.0000000 441.0000000 444.0000000 447.0000000 450.0000000 453.0000000 456.0000000 459.0000000 462.0000000 465.0000000 468.0000000 471.0000000 474.0000000 477.0000000 480.0000000 483.0000000 486.0000000 489.0000000 492.0000000 495.0000000 498.0000000 501.0000000 504.0000000 507.0000000 510.0000000 513.0000000 516.0000000 519.0000000 522.0000000 525.0000000 528.0000000 531.0000000 534.0000000 537.0000000 540.0000000 543.0000000 546.0000000 549.0000000 552.0000000 555.0000000 558.0000000 561.0000000 564.0000000 567.0000000 570.0000000 573.0000000 576.0000000 579.0000000 582.0000000 585.0000000 588.0000000 591.0000000 594.0000000 597.0000000 600.0000000 603.0000000 606.0000000 609.0000000 612.0000000 615.0000000 618.0000000 621.0000000 624.0000000 627.0000000 630.0000000 633.0000000 636.0000000 639.0000000 642.0000000 645.0000000 648.0000000 651.0000000 654.0000000 657.0000000 660.0000000 663.0000000 666.0000000 669.0000000 672.0000000 675.0000000 678.0000000 681.0000000 684.0000000 687.0000000 690.0000000 693.0000000 696.0000000 699.0000000 702.0000000 705.0000000 708.0000000 711.0000000 714.0000000 717.0000000 720.0000000 723.0000000 726.0000000 729.0000000 732.0000000 735.0000000 738.0000000 741.0000000 744.0000000 747.0000000 750.0000000 753.0000000 756.0000000 759.0000000 762.0000000 765.0000000 768.0000000 771.0000000 774.0000000 777.0000000 780.0000000 783.0000000 786.0000000 789.0000000 792.0000000 795.0000000 798.0000000 801.0000000 804.0000000 807.0000000 810.0000000 813.0000000 816.0000000 819.0000000 822.0000000 825.0000000
+DEAL::Block vector: Bu:
+DEAL::[block 0 ] 10.00000000 20.00000000 30.00000000 40.00000000 50.00000000 60.00000000 70.00000000 80.00000000 90.00000000 100.0000000 110.0000000 120.0000000 130.0000000 140.0000000 150.0000000 160.0000000 170.0000000 180.0000000 190.0000000 200.0000000 210.0000000 220.0000000 230.0000000 240.0000000 250.0000000 260.0000000 270.0000000 280.0000000 290.0000000 300.0000000 310.0000000 320.0000000 330.0000000 340.0000000 350.0000000 360.0000000 370.0000000 380.0000000 390.0000000 400.0000000 410.0000000 420.0000000 430.0000000 440.0000000 450.0000000 460.0000000 470.0000000 480.0000000 490.0000000 500.0000000 510.0000000 520.0000000 530.0000000 540.0000000 550.0000000 560.0000000 570.0000000 580.0000000 590.0000000 600.0000000 610.0000000 620.0000000 630.0000000 640.0000000 650.0000000 660.0000000 670.0000000 680.0000000 690.0000000 700.0000000 710.0000000 720.0000000 730.0000000 740.0000000 750.0000000 760.0000000 770.0000000 780.0000000 790.0000000 800.0000000 810.0000000
+DEAL::[block 1 ] 410.0000000 415.0000000 420.0000000 425.0000000 430.0000000 435.0000000 440.0000000 445.0000000 450.0000000 455.0000000 460.0000000 465.0000000 470.0000000 475.0000000 480.0000000 485.0000000 490.0000000 495.0000000 500.0000000 505.0000000 510.0000000 515.0000000 520.0000000 525.0000000 530.0000000
+DEAL::[block 2 ] 321.0000000 324.0000000 327.0000000 330.0000000 333.0000000 336.0000000 339.0000000 342.0000000 345.0000000 348.0000000 351.0000000 354.0000000 357.0000000 360.0000000 363.0000000 366.0000000 369.0000000 372.0000000 375.0000000 378.0000000 381.0000000 384.0000000 387.0000000 390.0000000 393.0000000 396.0000000 399.0000000 402.0000000 405.0000000 408.0000000 411.0000000 414.0000000 417.0000000 420.0000000 423.0000000 426.0000000 429.0000000 432.0000000 435.0000000 438.0000000 441.0000000 444.0000000 447.0000000 450.0000000 453.0000000 456.0000000 459.0000000 462.0000000 465.0000000 468.0000000 471.0000000 474.0000000 477.0000000 480.0000000 483.0000000 486.0000000 489.0000000 492.0000000 495.0000000 498.0000000 501.0000000 504.0000000 507.0000000 510.0000000 513.0000000 516.0000000 519.0000000 522.0000000 525.0000000 528.0000000 531.0000000 534.0000000 537.0000000 540.0000000 543.0000000 546.0000000 549.0000000 552.0000000 555.0000000 558.0000000 561.0000000 564.0000000 567.0000000 570.0000000 573.0000000 576.0000000 579.0000000 582.0000000 585.0000000 588.0000000 591.0000000 594.0000000 597.0000000 600.0000000 603.0000000 606.0000000 609.0000000 612.0000000 615.0000000 618.0000000 621.0000000 624.0000000 627.0000000 630.0000000 633.0000000 636.0000000 639.0000000 642.0000000 645.0000000 648.0000000 651.0000000 654.0000000 657.0000000 660.0000000 663.0000000 666.0000000 669.0000000 672.0000000 675.0000000 678.0000000 681.0000000 684.0000000 687.0000000 690.0000000 693.0000000 696.0000000 699.0000000 702.0000000 705.0000000 708.0000000 711.0000000 714.0000000 717.0000000 720.0000000 723.0000000 726.0000000 729.0000000 732.0000000 735.0000000 738.0000000 741.0000000 744.0000000 747.0000000 750.0000000 753.0000000 756.0000000 759.0000000 762.0000000 765.0000000 768.0000000 771.0000000 774.0000000 777.0000000 780.0000000 783.0000000 786.0000000 789.0000000 792.0000000 795.0000000 798.0000000 801.0000000 804.0000000 807.0000000 810.0000000 813.0000000 816.0000000 819.0000000 822.0000000 825.0000000
+DEAL::Block vector: Au-Bu:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (A-B).vmult:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (A-B).vmult_add:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (A-B).Tvmult:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (A-B).Tvmult_add:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (B*B*B) vmult:
+DEAL::[block 0 ] 1000.000000 2000.000000 3000.000000 4000.000000 5000.000000 6000.000000 7000.000000 8000.000000 9000.000000 10000.00000 11000.00000 12000.00000 13000.00000 14000.00000 15000.00000 16000.00000 17000.00000 18000.00000 19000.00000 20000.00000 21000.00000 22000.00000 23000.00000 24000.00000 25000.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 10250.00000 10375.00000 10500.00000 10625.00000 10750.00000 10875.00000 11000.00000 11125.00000 11250.00000 11375.00000 11500.00000 11625.00000 11750.00000 11875.00000 12000.00000 12125.00000 12250.00000 12375.00000 12500.00000 12625.00000 12750.00000 12875.00000 13000.00000 13125.00000 13250.00000
+DEAL::[block 2 ] 2889.000000 2916.000000 2943.000000 2970.000000 2997.000000 3024.000000 3051.000000 3078.000000 3105.000000 3132.000000 3159.000000 3186.000000 3213.000000 3240.000000 3267.000000 3294.000000 3321.000000 3348.000000 3375.000000 3402.000000 3429.000000 3456.000000 3483.000000 3510.000000 3537.000000 3564.000000 3591.000000 3618.000000 3645.000000 3672.000000 3699.000000 3726.000000 3753.000000 3780.000000 3807.000000 3834.000000 3861.000000 3888.000000 3915.000000 3942.000000 3969.000000 3996.000000 4023.000000 4050.000000 4077.000000 4104.000000 4131.000000 4158.000000 4185.000000 4212.000000 4239.000000 4266.000000 4293.000000 4320.000000 4347.000000 4374.000000 4401.000000 4428.000000 4455.000000 4482.000000 4509.000000 4536.000000 4563.000000 4590.000000 4617.000000 4644.000000 4671.000000 4698.000000 4725.000000 4752.000000 4779.000000 4806.000000 4833.000000 4860.000000 4887.000000 4914.000000 4941.000000 4968.000000 4995.000000 5022.000000 5049.000000 5076.000000 5103.000000 5130.000000 5157.000000 5184.000000 5211.000000 5238.000000 5265.000000 5292.000000 5319.000000 5346.000000 5373.000000 5400.000000 5427.000000 5454.000000 5481.000000 5508.000000 5535.000000 5562.000000 5589.000000 5616.000000 5643.000000 5670.000000 5697.000000 5724.000000 5751.000000 5778.000000 5805.000000 5832.000000 5859.000000 5886.000000 5913.000000 5940.000000 5967.000000 5994.000000 6021.000000 6048.000000 6075.000000 6102.000000 6129.000000 6156.000000 6183.000000 6210.000000 6237.000000 6264.000000 6291.000000 6318.000000 6345.000000 6372.000000 6399.000000 6426.000000 6453.000000 6480.000000 6507.000000 6534.000000 6561.000000 6588.000000 6615.000000 6642.000000 6669.000000 6696.000000 6723.000000 6750.000000 6777.000000 6804.000000 6831.000000 6858.000000 6885.000000 6912.000000 6939.000000 6966.000000 6993.000000 7020.000000 7047.000000 7074.000000 7101.000000 7128.000000 7155.000000 7182.000000 7209.000000 7236.000000 7263.000000 7290.000000 7317.000000 7344.000000 7371.000000 7398.000000 7425.000000
+DEAL::Block vector: (B*B*B) vmult_add:
+DEAL::[block 0 ] 1000.000000 2000.000000 3000.000000 4000.000000 5000.000000 6000.000000 7000.000000 8000.000000 9000.000000 10000.00000 11000.00000 12000.00000 13000.00000 14000.00000 15000.00000 16000.00000 17000.00000 18000.00000 19000.00000 20000.00000 21000.00000 22000.00000 23000.00000 24000.00000 25000.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 10250.00000 10375.00000 10500.00000 10625.00000 10750.00000 10875.00000 11000.00000 11125.00000 11250.00000 11375.00000 11500.00000 11625.00000 11750.00000 11875.00000 12000.00000 12125.00000 12250.00000 12375.00000 12500.00000 12625.00000 12750.00000 12875.00000 13000.00000 13125.00000 13250.00000
+DEAL::[block 2 ] 2889.000000 2916.000000 2943.000000 2970.000000 2997.000000 3024.000000 3051.000000 3078.000000 3105.000000 3132.000000 3159.000000 3186.000000 3213.000000 3240.000000 3267.000000 3294.000000 3321.000000 3348.000000 3375.000000 3402.000000 3429.000000 3456.000000 3483.000000 3510.000000 3537.000000 3564.000000 3591.000000 3618.000000 3645.000000 3672.000000 3699.000000 3726.000000 3753.000000 3780.000000 3807.000000 3834.000000 3861.000000 3888.000000 3915.000000 3942.000000 3969.000000 3996.000000 4023.000000 4050.000000 4077.000000 4104.000000 4131.000000 4158.000000 4185.000000 4212.000000 4239.000000 4266.000000 4293.000000 4320.000000 4347.000000 4374.000000 4401.000000 4428.000000 4455.000000 4482.000000 4509.000000 4536.000000 4563.000000 4590.000000 4617.000000 4644.000000 4671.000000 4698.000000 4725.000000 4752.000000 4779.000000 4806.000000 4833.000000 4860.000000 4887.000000 4914.000000 4941.000000 4968.000000 4995.000000 5022.000000 5049.000000 5076.000000 5103.000000 5130.000000 5157.000000 5184.000000 5211.000000 5238.000000 5265.000000 5292.000000 5319.000000 5346.000000 5373.000000 5400.000000 5427.000000 5454.000000 5481.000000 5508.000000 5535.000000 5562.000000 5589.000000 5616.000000 5643.000000 5670.000000 5697.000000 5724.000000 5751.000000 5778.000000 5805.000000 5832.000000 5859.000000 5886.000000 5913.000000 5940.000000 5967.000000 5994.000000 6021.000000 6048.000000 6075.000000 6102.000000 6129.000000 6156.000000 6183.000000 6210.000000 6237.000000 6264.000000 6291.000000 6318.000000 6345.000000 6372.000000 6399.000000 6426.000000 6453.000000 6480.000000 6507.000000 6534.000000 6561.000000 6588.000000 6615.000000 6642.000000 6669.000000 6696.000000 6723.000000 6750.000000 6777.000000 6804.000000 6831.000000 6858.000000 6885.000000 6912.000000 6939.000000 6966.000000 6993.000000 7020.000000 7047.000000 7074.000000 7101.000000 7128.000000 7155.000000 7182.000000 7209.000000 7236.000000 7263.000000 7290.000000 7317.000000 7344.000000 7371.000000 7398.000000 7425.000000
+DEAL::Block vector: (B*B*B) Tvmult:
+DEAL::[block 0 ] 1000.000000 2000.000000 3000.000000 4000.000000 5000.000000 6000.000000 7000.000000 8000.000000 9000.000000 10000.00000 11000.00000 12000.00000 13000.00000 14000.00000 15000.00000 16000.00000 17000.00000 18000.00000 19000.00000 20000.00000 21000.00000 22000.00000 23000.00000 24000.00000 25000.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 10250.00000 10375.00000 10500.00000 10625.00000 10750.00000 10875.00000 11000.00000 11125.00000 11250.00000 11375.00000 11500.00000 11625.00000 11750.00000 11875.00000 12000.00000 12125.00000 12250.00000 12375.00000 12500.00000 12625.00000 12750.00000 12875.00000 13000.00000 13125.00000 13250.00000
+DEAL::[block 2 ] 2889.000000 2916.000000 2943.000000 2970.000000 2997.000000 3024.000000 3051.000000 3078.000000 3105.000000 3132.000000 3159.000000 3186.000000 3213.000000 3240.000000 3267.000000 3294.000000 3321.000000 3348.000000 3375.000000 3402.000000 3429.000000 3456.000000 3483.000000 3510.000000 3537.000000 3564.000000 3591.000000 3618.000000 3645.000000 3672.000000 3699.000000 3726.000000 3753.000000 3780.000000 3807.000000 3834.000000 3861.000000 3888.000000 3915.000000 3942.000000 3969.000000 3996.000000 4023.000000 4050.000000 4077.000000 4104.000000 4131.000000 4158.000000 4185.000000 4212.000000 4239.000000 4266.000000 4293.000000 4320.000000 4347.000000 4374.000000 4401.000000 4428.000000 4455.000000 4482.000000 4509.000000 4536.000000 4563.000000 4590.000000 4617.000000 4644.000000 4671.000000 4698.000000 4725.000000 4752.000000 4779.000000 4806.000000 4833.000000 4860.000000 4887.000000 4914.000000 4941.000000 4968.000000 4995.000000 5022.000000 5049.000000 5076.000000 5103.000000 5130.000000 5157.000000 5184.000000 5211.000000 5238.000000 5265.000000 5292.000000 5319.000000 5346.000000 5373.000000 5400.000000 5427.000000 5454.000000 5481.000000 5508.000000 5535.000000 5562.000000 5589.000000 5616.000000 5643.000000 5670.000000 5697.000000 5724.000000 5751.000000 5778.000000 5805.000000 5832.000000 5859.000000 5886.000000 5913.000000 5940.000000 5967.000000 5994.000000 6021.000000 6048.000000 6075.000000 6102.000000 6129.000000 6156.000000 6183.000000 6210.000000 6237.000000 6264.000000 6291.000000 6318.000000 6345.000000 6372.000000 6399.000000 6426.000000 6453.000000 6480.000000 6507.000000 6534.000000 6561.000000 6588.000000 6615.000000 6642.000000 6669.000000 6696.000000 6723.000000 6750.000000 6777.000000 6804.000000 6831.000000 6858.000000 6885.000000 6912.000000 6939.000000 6966.000000 6993.000000 7020.000000 7047.000000 7074.000000 7101.000000 7128.000000 7155.000000 7182.000000 7209.000000 7236.000000 7263.000000 7290.000000 7317.000000 7344.000000 7371.000000 7398.000000 7425.000000
+DEAL::Block vector: (B*B*B) Tvmult_add:
+DEAL::[block 0 ] 1000.000000 2000.000000 3000.000000 4000.000000 5000.000000 6000.000000 7000.000000 8000.000000 9000.000000 10000.00000 11000.00000 12000.00000 13000.00000 14000.00000 15000.00000 16000.00000 17000.00000 18000.00000 19000.00000 20000.00000 21000.00000 22000.00000 23000.00000 24000.00000 25000.00000 26000.00000 27000.00000 28000.00000 29000.00000 30000.00000 31000.00000 32000.00000 33000.00000 34000.00000 35000.00000 36000.00000 37000.00000 38000.00000 39000.00000 40000.00000 41000.00000 42000.00000 43000.00000 44000.00000 45000.00000 46000.00000 47000.00000 48000.00000 49000.00000 50000.00000 51000.00000 52000.00000 53000.00000 54000.00000 55000.00000 56000.00000 57000.00000 58000.00000 59000.00000 60000.00000 61000.00000 62000.00000 63000.00000 64000.00000 65000.00000 66000.00000 67000.00000 68000.00000 69000.00000 70000.00000 71000.00000 72000.00000 73000.00000 74000.00000 75000.00000 76000.00000 77000.00000 78000.00000 79000.00000 80000.00000 81000.00000
+DEAL::[block 1 ] 10250.00000 10375.00000 10500.00000 10625.00000 10750.00000 10875.00000 11000.00000 11125.00000 11250.00000 11375.00000 11500.00000 11625.00000 11750.00000 11875.00000 12000.00000 12125.00000 12250.00000 12375.00000 12500.00000 12625.00000 12750.00000 12875.00000 13000.00000 13125.00000 13250.00000
+DEAL::[block 2 ] 2889.000000 2916.000000 2943.000000 2970.000000 2997.000000 3024.000000 3051.000000 3078.000000 3105.000000 3132.000000 3159.000000 3186.000000 3213.000000 3240.000000 3267.000000 3294.000000 3321.000000 3348.000000 3375.000000 3402.000000 3429.000000 3456.000000 3483.000000 3510.000000 3537.000000 3564.000000 3591.000000 3618.000000 3645.000000 3672.000000 3699.000000 3726.000000 3753.000000 3780.000000 3807.000000 3834.000000 3861.000000 3888.000000 3915.000000 3942.000000 3969.000000 3996.000000 4023.000000 4050.000000 4077.000000 4104.000000 4131.000000 4158.000000 4185.000000 4212.000000 4239.000000 4266.000000 4293.000000 4320.000000 4347.000000 4374.000000 4401.000000 4428.000000 4455.000000 4482.000000 4509.000000 4536.000000 4563.000000 4590.000000 4617.000000 4644.000000 4671.000000 4698.000000 4725.000000 4752.000000 4779.000000 4806.000000 4833.000000 4860.000000 4887.000000 4914.000000 4941.000000 4968.000000 4995.000000 5022.000000 5049.000000 5076.000000 5103.000000 5130.000000 5157.000000 5184.000000 5211.000000 5238.000000 5265.000000 5292.000000 5319.000000 5346.000000 5373.000000 5400.000000 5427.000000 5454.000000 5481.000000 5508.000000 5535.000000 5562.000000 5589.000000 5616.000000 5643.000000 5670.000000 5697.000000 5724.000000 5751.000000 5778.000000 5805.000000 5832.000000 5859.000000 5886.000000 5913.000000 5940.000000 5967.000000 5994.000000 6021.000000 6048.000000 6075.000000 6102.000000 6129.000000 6156.000000 6183.000000 6210.000000 6237.000000 6264.000000 6291.000000 6318.000000 6345.000000 6372.000000 6399.000000 6426.000000 6453.000000 6480.000000 6507.000000 6534.000000 6561.000000 6588.000000 6615.000000 6642.000000 6669.000000 6696.000000 6723.000000 6750.000000 6777.000000 6804.000000 6831.000000 6858.000000 6885.000000 6912.000000 6939.000000 6966.000000 6993.000000 7020.000000 7047.000000 7074.000000 7101.000000 7128.000000 7155.000000 7182.000000 7209.000000 7236.000000 7263.000000 7290.000000 7317.000000 7344.000000 7371.000000 7398.000000 7425.000000
+DEAL::Block vector: u:
+DEAL::[block 0 ] 1.000000000 2.000000000 3.000000000 4.000000000 5.000000000 6.000000000 7.000000000 8.000000000 9.000000000 10.00000000 11.00000000 12.00000000 13.00000000 14.00000000 15.00000000 16.00000000 17.00000000 18.00000000 19.00000000 20.00000000 21.00000000 22.00000000 23.00000000 24.00000000 25.00000000 26.00000000 27.00000000 28.00000000 29.00000000 30.00000000 31.00000000 32.00000000 33.00000000 34.00000000 35.00000000 36.00000000 37.00000000 38.00000000 39.00000000 40.00000000 41.00000000 42.00000000 43.00000000 44.00000000 45.00000000 46.00000000 47.00000000 48.00000000 49.00000000 50.00000000 51.00000000 52.00000000 53.00000000 54.00000000 55.00000000 56.00000000 57.00000000 58.00000000 59.00000000 60.00000000 61.00000000 62.00000000 63.00000000 64.00000000 65.00000000 66.00000000 67.00000000 68.00000000 69.00000000 70.00000000 71.00000000 72.00000000 73.00000000 74.00000000 75.00000000 76.00000000 77.00000000 78.00000000 79.00000000 80.00000000 81.00000000
+DEAL::[block 1 ] 82.00000000 83.00000000 84.00000000 85.00000000 86.00000000 87.00000000 88.00000000 89.00000000 90.00000000 91.00000000 92.00000000 93.00000000 94.00000000 95.00000000 96.00000000 97.00000000 98.00000000 99.00000000 100.0000000 101.0000000 102.0000000 103.0000000 104.0000000 105.0000000 106.0000000 107.0000000 108.0000000 109.0000000 110.0000000 111.0000000 112.0000000 113.0000000 114.0000000 115.0000000 116.0000000 117.0000000 118.0000000 119.0000000 120.0000000 121.0000000 122.0000000 123.0000000 124.0000000 125.0000000 126.0000000 127.0000000 128.0000000 129.0000000 130.0000000 131.0000000 132.0000000 133.0000000 134.0000000 135.0000000 136.0000000 137.0000000 138.0000000 139.0000000 140.0000000 141.0000000 142.0000000 143.0000000 144.0000000 145.0000000 146.0000000 147.0000000 148.0000000 149.0000000 150.0000000 151.0000000 152.0000000 153.0000000 154.0000000 155.0000000 156.0000000 157.0000000 158.0000000 159.0000000 160.0000000 161.0000000 162.0000000
+DEAL::[block 2 ] 163.0000000 164.0000000 165.0000000 166.0000000 167.0000000 168.0000000 169.0000000 170.0000000 171.0000000 172.0000000 173.0000000 174.0000000 175.0000000 176.0000000 177.0000000 178.0000000 179.0000000 180.0000000 181.0000000 182.0000000 183.0000000 184.0000000 185.0000000 186.0000000 187.0000000 188.0000000 189.0000000 190.0000000 191.0000000 192.0000000 193.0000000 194.0000000 195.0000000 196.0000000 197.0000000 198.0000000 199.0000000 200.0000000 201.0000000 202.0000000 203.0000000 204.0000000 205.0000000 206.0000000 207.0000000 208.0000000 209.0000000 210.0000000 211.0000000 212.0000000 213.0000000 214.0000000 215.0000000 216.0000000 217.0000000 218.0000000 219.0000000 220.0000000 221.0000000 222.0000000 223.0000000 224.0000000 225.0000000 226.0000000 227.0000000 228.0000000 229.0000000 230.0000000 231.0000000 232.0000000 233.0000000 234.0000000 235.0000000 236.0000000 237.0000000 238.0000000 239.0000000 240.0000000 241.0000000 242.0000000 243.0000000
+DEAL::[block 3 ] 244.0000000 245.0000000 246.0000000 247.0000000 248.0000000 249.0000000 250.0000000 251.0000000 252.0000000 253.0000000 254.0000000 255.0000000 256.0000000 257.0000000 258.0000000 259.0000000 260.0000000 261.0000000 262.0000000 263.0000000 264.0000000 265.0000000 266.0000000 267.0000000 268.0000000 269.0000000 270.0000000 271.0000000 272.0000000 273.0000000 274.0000000 275.0000000 276.0000000 277.0000000 278.0000000 279.0000000 280.0000000 281.0000000 282.0000000 283.0000000 284.0000000 285.0000000 286.0000000 287.0000000 288.0000000 289.0000000 290.0000000 291.0000000 292.0000000 293.0000000 294.0000000 295.0000000 296.0000000 297.0000000 298.0000000 299.0000000 300.0000000 301.0000000 302.0000000 303.0000000 304.0000000 305.0000000 306.0000000 307.0000000 308.0000000 309.0000000 310.0000000 311.0000000 312.0000000 313.0000000 314.0000000 315.0000000 316.0000000 317.0000000 318.0000000 319.0000000 320.0000000 321.0000000 322.0000000 323.0000000 324.0000000
+DEAL::[block 4 ] 325.0000000 326.0000000 327.0000000 328.0000000 329.0000000 330.0000000 331.0000000 332.0000000 333.0000000 334.0000000 335.0000000 336.0000000 337.0000000 338.0000000 339.0000000 340.0000000 341.0000000 342.0000000 343.0000000 344.0000000 345.0000000 346.0000000 347.0000000 348.0000000 349.0000000 350.0000000 351.0000000 352.0000000 353.0000000 354.0000000 355.0000000 356.0000000 357.0000000 358.0000000 359.0000000 360.0000000 361.0000000 362.0000000 363.0000000 364.0000000 365.0000000 366.0000000 367.0000000 368.0000000 369.0000000 370.0000000 371.0000000 372.0000000 373.0000000 374.0000000 375.0000000 376.0000000 377.0000000 378.0000000 379.0000000 380.0000000 381.0000000 382.0000000 383.0000000 384.0000000 385.0000000 386.0000000 387.0000000 388.0000000 389.0000000 390.0000000 391.0000000 392.0000000 393.0000000 394.0000000 395.0000000 396.0000000 397.0000000 398.0000000 399.0000000 400.0000000 401.0000000 402.0000000 403.0000000 404.0000000 405.0000000
+DEAL::Block vector: (C-D) vmult:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 3 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 4 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (C-D) vmult_add:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 3 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 4 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (C-D) Tvmult:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 3 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 4 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::Block vector: (C-D) Tvmult_add:
+DEAL::[block 0 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 1 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 2 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 3 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
+DEAL::[block 4 ] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Test lower_triangular_operator:
+
+#include "../tests.h"
+
+#include <deal.II/lac/block_linear_operator.h>
+#include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/dynamic_sparsity_pattern.h>
+#include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/vector.h>
+
+#define PRINTME(title, name, var) \
+ deallog << title << std::endl; \
+ deallog << "Block vector: " name << ":" << std::endl; \
+ for (unsigned int i = 0; i < var.n_blocks(); ++i) \
+ deallog << "[block " << i << " ] " << var.block(i);
+
+
+using namespace dealii;
+
+int main()
+{
+ initlog();
+ deallog << std::setprecision(2);
+
+ // BlockSparseMatrix:
+ {
+ BlockDynamicSparsityPattern dsp(3, 3);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ dsp.block(i, j).reinit (1, 1);
+ dsp.collect_sizes ();
+
+ BlockSparsityPattern sparsity_pattern;
+ sparsity_pattern.copy_from(dsp);
+ sparsity_pattern.compress();
+
+ // | 2 1 0 | | 0 0 0 |
+ // | 3 2 1 | -> | 3 0 0 |
+ // | 4 3 2 | | 4 3 0 |
+ BlockSparseMatrix<double> a (sparsity_pattern);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ a.block(i,j).set(0, 0, 2 + i - j);
+
+ auto op_a = linear_operator<BlockVector<double>>(a);
+ auto triangular_block_op = lower_triangular_operator< BlockVector<double>, BlockVector<double>, BlockSparseMatrix<double> >(a);
+
+ BlockVector<double> u;
+ op_a.reinit_domain_vector(u, false);
+ BlockVector<double> v;
+ op_a.reinit_range_vector(v, false);
+
+
+ // vmult:
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u.block(i)[0] = i+1;
+ v.block(i)[0] = 1;
+ }
+
+ triangular_block_op.vmult(v, u);
+ PRINTME(" -- vmult --", "v", v);
+
+ // vmult_add:
+ for(unsigned int i = 0; i<3; ++i)
+ v.block(i)[0] = 1;
+
+ triangular_block_op.vmult_add(v, u);
+ PRINTME(" -- vmult_add --", "v", v);
+
+ // Tvmult
+ for(unsigned int i = 0; i<3; ++i)
+ v.block(i)[0] = i+1;
+
+ triangular_block_op.Tvmult(u, v);
+ PRINTME(" -- Tvmult --", "u", u);
+
+ // Tvmult_add
+ for(unsigned int i = 0; i<3; ++i)
+ u.block(i)[0] = 1;
+
+ triangular_block_op.Tvmult_add(u, v);
+ PRINTME(" -- Tvmult_add --", "u", u);
+ }
+}
--- /dev/null
+
+DEAL:: -- vmult --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.0
+DEAL::[block 1 ] 3.0
+DEAL::[block 2 ] 10.
+DEAL:: -- vmult_add --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 1.0
+DEAL::[block 1 ] 4.0
+DEAL::[block 2 ] 11.
+DEAL:: -- Tvmult --
+DEAL::Block vector: u:
+DEAL::[block 0 ] 18.
+DEAL::[block 1 ] 9.0
+DEAL::[block 2 ] 0.0
+DEAL:: -- Tvmult_add --
+DEAL::Block vector: u:
+DEAL::[block 0 ] 19.
+DEAL::[block 1 ] 10.
+DEAL::[block 2 ] 1.0
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Test upper_triangular_operator:
+
+#include "../tests.h"
+
+#include <deal.II/lac/block_linear_operator.h>
+#include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/dynamic_sparsity_pattern.h>
+#include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/vector.h>
+
+#define PRINTME(title, name, var) \
+ deallog << title << std::endl; \
+ deallog << "Block vector: " name << ":" << std::endl; \
+ for (unsigned int i = 0; i < var.n_blocks(); ++i) \
+ deallog << "[block " << i << " ] " << var.block(i);
+
+using namespace dealii;
+
+int main()
+{
+ initlog();
+ deallog << std::setprecision(2);
+
+ // BlockSparseMatrix:
+ {
+ BlockDynamicSparsityPattern dsp(3, 3);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ dsp.block(i, j).reinit (1, 1);
+ dsp.collect_sizes ();
+
+ BlockSparsityPattern sparsity_pattern;
+ sparsity_pattern.copy_from(dsp);
+ sparsity_pattern.compress();
+
+ // | 2 3 4 |
+ // | 1 2 3 |
+ // | 0 1 2 |
+ BlockSparseMatrix<double> a (sparsity_pattern);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ a.block(i,j).set(0, 0, 2 + j - i);
+
+ auto op_a = linear_operator<BlockVector<double>>(a);
+
+ auto triangular_block_op = upper_triangular_operator< BlockVector<double>, BlockVector<double>, BlockSparseMatrix<double> >(a);
+
+ BlockVector<double> u;
+ op_a.reinit_domain_vector(u, false);
+ BlockVector<double> v;
+ op_a.reinit_range_vector(v, false);
+
+
+ // vmult:
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u.block(i)[0] = i+1;
+ v.block(i)[0] = 1;
+ }
+
+ triangular_block_op.vmult(v, u);
+ PRINTME(" -- vmult --","v", v);
+
+ // vmult_add:
+ for(unsigned int i = 0; i<3; ++i)
+ v.block(i)[0] = 1;
+
+ triangular_block_op.vmult_add(v, u);
+ PRINTME(" -- vmult_add --", "v", v);
+
+ // Tvmult
+ for(unsigned int i = 0; i<3; ++i)
+ v.block(i)[0] = i+1;
+
+ triangular_block_op.Tvmult(u, v);
+ PRINTME(" -- Tvmult --", "u", u);
+
+ // Tvmult_add
+ for(unsigned int i = 0; i<3; ++i)
+ u.block(i)[0] = 1;
+
+ triangular_block_op.Tvmult_add(u, v);
+ PRINTME(" -- Tvmult_add --", "u", u);
+ }
+}
--- /dev/null
+
+DEAL:: -- vmult --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 18.
+DEAL::[block 1 ] 9.0
+DEAL::[block 2 ] 0.0
+DEAL:: -- vmult_add --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 19.
+DEAL::[block 1 ] 10.
+DEAL::[block 2 ] 1.0
+DEAL:: -- Tvmult --
+DEAL::Block vector: u:
+DEAL::[block 0 ] 0.0
+DEAL::[block 1 ] 3.0
+DEAL::[block 2 ] 10.
+DEAL:: -- Tvmult_add --
+DEAL::Block vector: u:
+DEAL::[block 0 ] 1.0
+DEAL::[block 1 ] 4.0
+DEAL::[block 2 ] 11.
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Test upper_triangular_block_op and lower_triangular_operator
+// simultaneously:
+
+#include "../tests.h"
+
+#include <deal.II/lac/block_linear_operator.h>
+#include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/dynamic_sparsity_pattern.h>
+#include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/vector.h>
+
+#define PRINTME(name, var) \
+ deallog << "Block vector: " name << ":" << std::endl; \
+ for (unsigned int i = 0; i < var.n_blocks(); ++i) \
+ deallog << "[block " << i << " ] " << var.block(i);
+
+
+using namespace dealii;
+
+int main()
+{
+ initlog();
+ deallog << std::setprecision(2);
+
+ // BlockSparseMatrix:
+ {
+ BlockDynamicSparsityPattern dsp(3, 3);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ dsp.block(i, j).reinit (1, 1);
+ dsp.collect_sizes ();
+
+ BlockSparsityPattern sparsity_pattern;
+ sparsity_pattern.copy_from(dsp);
+ sparsity_pattern.compress();
+
+ BlockSparseMatrix<double> a (sparsity_pattern);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ a.block(i,j).set(0, 0, 2 + j + i);
+
+ auto op_a = linear_operator<BlockVector<double>>(a);
+
+ auto lower_triangular_block_op = lower_triangular_operator< BlockVector<double>, BlockVector<double>, BlockSparseMatrix<double> >(a);
+ auto upper_triangular_block_op = upper_triangular_operator< BlockVector<double>, BlockVector<double>, BlockSparseMatrix<double> >(a);
+
+
+ BlockVector<double> u1;
+ op_a.reinit_domain_vector(u1, false);
+ BlockVector<double> v1;
+ op_a.reinit_range_vector(v1, false);
+ BlockVector<double> u2;
+ op_a.reinit_domain_vector(u2, false);
+ BlockVector<double> v2;
+ op_a.reinit_range_vector(v2, false);
+
+
+ // check 1
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u1.block(i)[0] = i+1;
+ u2.block(i)[0] = i+1;
+ v1.block(i)[0] = 1;
+ v2.block(i)[0] = 1;
+ }
+
+ lower_triangular_block_op.vmult(v1, u1);
+ upper_triangular_block_op.Tvmult(v2, u2);
+
+ PRINTME("v1", v1);
+ PRINTME("v2", v2);
+
+
+ // check 2
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u1.block(i)[0] = i+1;
+ u2.block(i)[0] = i+1;
+ v1.block(i)[0] = 1;
+ v2.block(i)[0] = 1;
+ }
+
+ lower_triangular_block_op.Tvmult(v1, u1);
+ upper_triangular_block_op.vmult(v2, u2);
+
+ PRINTME("v1", v1);
+ PRINTME("v2", v2);
+
+ // check 3
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u1.block(i)[0] = i+1;
+ u2.block(i)[0] = i+1;
+ v1.block(i)[0] = 1;
+ v2.block(i)[0] = 1;
+ }
+
+ lower_triangular_block_op.vmult_add(v1, u1);
+ upper_triangular_block_op.Tvmult_add(v2, u2);
+
+ PRINTME("v1", v1);
+ PRINTME("v2", v2);
+
+
+ // check 4
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u1.block(i)[0] = i+1;
+ u2.block(i)[0] = i+1;
+ v1.block(i)[0] = 1;
+ v2.block(i)[0] = 1;
+ }
+
+ lower_triangular_block_op.Tvmult_add(v1, u1);
+ upper_triangular_block_op.vmult_add(v2, u2);
+
+ PRINTME("v1", v1);
+ PRINTME("v2", v2);
+ }
+}
--- /dev/null
+
+DEAL::Block vector: v1:
+DEAL::[block 0 ] 0.0
+DEAL::[block 1 ] 3.0
+DEAL::[block 2 ] 14.
+DEAL::Block vector: v2:
+DEAL::[block 0 ] 0.0
+DEAL::[block 1 ] 3.0
+DEAL::[block 2 ] 14.
+DEAL::Block vector: v1:
+DEAL::[block 0 ] 18.
+DEAL::[block 1 ] 15.
+DEAL::[block 2 ] 0.0
+DEAL::Block vector: v2:
+DEAL::[block 0 ] 18.
+DEAL::[block 1 ] 15.
+DEAL::[block 2 ] 0.0
+DEAL::Block vector: v1:
+DEAL::[block 0 ] 1.0
+DEAL::[block 1 ] 4.0
+DEAL::[block 2 ] 15.
+DEAL::Block vector: v2:
+DEAL::[block 0 ] 1.0
+DEAL::[block 1 ] 4.0
+DEAL::[block 2 ] 15.
+DEAL::Block vector: v1:
+DEAL::[block 0 ] 19.
+DEAL::[block 1 ] 16.
+DEAL::[block 2 ] 1.0
+DEAL::Block vector: v2:
+DEAL::[block 0 ] 19.
+DEAL::[block 1 ] 16.
+DEAL::[block 2 ] 1.0
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Test preconditioner_from_diagonal_inverse:
+
+#include "../tests.h"
+
+#include <deal.II/lac/block_linear_operator.h>
+#include <deal.II/lac/block_sparse_matrix.h>
+#include <deal.II/lac/block_vector.h>
+#include <deal.II/lac/dynamic_sparsity_pattern.h>
+#include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/vector.h>
+
+#define PRINTME(name, var) \
+ deallog << "Block vector: " name << ":" << std::endl; \
+ for (unsigned int i = 0; i < var.n_blocks(); ++i) \
+ deallog << "[block " << i << " ] " << var.block(i);
+
+
+using namespace dealii;
+
+int main()
+{
+ initlog();
+ deallog << std::setprecision(12);
+
+ // BlockSparseMatrix:
+ {
+ BlockDynamicSparsityPattern dsp(3, 3);
+ for (unsigned int i = 0; i < 3; ++i)
+ for (unsigned int j = 0; j < 3; ++j)
+ dsp.block(i, j).reinit (1, 1);
+ dsp.collect_sizes ();
+
+ BlockSparsityPattern sparsity_pattern;
+ sparsity_pattern.copy_from(dsp);
+ sparsity_pattern.compress();
+
+ BlockSparseMatrix<double> a (sparsity_pattern);
+ for (unsigned int i = 0; i < 3; ++i)
+ {
+ a.block(i,i).set(0, 0, i+i +1);
+ for (unsigned int j = 0; j < i; ++j)
+ a.block(i,j).set(0, 0, 10);
+ }
+
+ BlockSparseMatrix<double> d(sparsity_pattern);
+ for (unsigned int i = 0; i < 3; ++i)
+ d.set(i,i, 1.0 / (i+i +1) );
+
+ auto op_a = linear_operator< BlockVector<double> >(a);
+ auto diagonal_inv = linear_operator< BlockVector<double> >(d);
+ // auto diagonal_inv = block_diagonal_operator(diag);
+ auto inverse_op_a = block_triangular_inverse< BlockVector<double>, BlockVector<double>, BlockSparseMatrix<double> >(a, diagonal_inv);
+
+ auto identity = inverse_op_a * op_a;
+
+ BlockVector<double> u;
+ BlockVector<double> v;
+
+ deallog << " -- Matrix -- " << std::endl;
+ op_a.reinit_domain_vector(u, false);
+ op_a.reinit_range_vector(v, false);
+ for(unsigned int j = 0; j<3; ++j)
+ {
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u.block(i)[0] = 0;;
+ v.block(i)[0] = 0;
+ }
+ u.block(j)[0] = 1;;
+
+ op_a.vmult(v, u);
+
+ PRINTME("v", v);
+ }
+
+ deallog << " -- Inverse -- " << std::endl;
+ inverse_op_a.reinit_domain_vector(u, false);
+ inverse_op_a.reinit_range_vector(v, false);
+ for(unsigned int j = 0; j<3; ++j)
+ {
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u.block(i)[0] = 0;
+ v.block(i)[0] = 0;
+ }
+ u.block(j)[0] = 1;;
+
+ inverse_op_a.vmult(v, u);
+
+ PRINTME("v", v);
+ }
+
+ deallog << " -- Identity -- " << std::endl;
+ identity.reinit_domain_vector(u, false);
+ identity.reinit_range_vector(v, false);
+ for(unsigned int j = 0; j<3; ++j)
+ {
+ for(unsigned int i = 0; i<3; ++i)
+ {
+ u.block(i)[0] = 0;;
+ v.block(i)[0] = 0;
+ }
+ u.block(j)[0] = 1;;
+
+ identity.vmult(v, u);
+
+ PRINTME("v", v);
+ }
+ }
+}
--- /dev/null
+
+DEAL:: -- Matrix --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 1.00000000000
+DEAL::[block 1 ] 10.0000000000
+DEAL::[block 2 ] 10.0000000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.00000000000
+DEAL::[block 1 ] 3.00000000000
+DEAL::[block 2 ] 10.0000000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.00000000000
+DEAL::[block 1 ] 0.00000000000
+DEAL::[block 2 ] 5.00000000000
+DEAL:: -- Inverse --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 1.00000000000
+DEAL::[block 1 ] -3.33333333333
+DEAL::[block 2 ] 4.66666666667
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.00000000000
+DEAL::[block 1 ] 0.333333333333
+DEAL::[block 2 ] -0.666666666667
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.00000000000
+DEAL::[block 1 ] 0.00000000000
+DEAL::[block 2 ] 0.200000000000
+DEAL:: -- Identity --
+DEAL::Block vector: v:
+DEAL::[block 0 ] 1.00000000000
+DEAL::[block 1 ] 0.00000000000
+DEAL::[block 2 ] 0.00000000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.00000000000
+DEAL::[block 1 ] 1.00000000000
+DEAL::[block 2 ] 0.00000000000
+DEAL::Block vector: v:
+DEAL::[block 0 ] 0.00000000000
+DEAL::[block 1 ] 0.00000000000
+DEAL::[block 2 ] 1.00000000000