From: Matthias Maier Date: Wed, 27 May 2015 12:21:47 +0000 (+0200) Subject: Refactoring I: Remove PackagedOperation and block stuff X-Git-Tag: v8.3.0-rc1~150^2~4 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=842066dc370fe21ed07f406bcfbd25b3c2c5d38a;p=dealii.git Refactoring I: Remove PackagedOperation and block stuff Remove all PackagedOperation related code and code for block structures from linear_operator.h, remove corresponding tests and rename remaining tests. --- diff --git a/include/deal.II/lac/linear_operator.h b/include/deal.II/lac/linear_operator.h index ce1145ebd0..6d306e9cc4 100644 --- a/include/deal.II/lac/linear_operator.h +++ b/include/deal.II/lac/linear_operator.h @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2010 - 2015 by the deal.II authors +// Copyright (C) 2014 - 2015 by the deal.II authors // // This file is part of the deal.II library. // @@ -30,7 +30,6 @@ DEAL_II_NAMESPACE_OPEN // Forward declarations: template class Vector; -template class BlockVector; template , typename Domain = Range> class LinearOperator; @@ -47,7 +46,6 @@ template , typename Matrix> LinearOperator linear_operator (const Matrix &); -template > class PackagedOperation; /** * A class to store the abstract concept of a linear operator. @@ -239,8 +237,7 @@ public: LinearOperator & operator+=(const LinearOperator &second_op) { - *this = *this + second_op; - return *this; + return *this = *this + second_op; } /** @@ -250,8 +247,7 @@ public: LinearOperator & operator-=(const LinearOperator &second_op) { - *this = *this - second_op; - return *this; + return *this = *this - second_op; } /** @@ -261,8 +257,7 @@ public: LinearOperator & operator*=(const LinearOperator &second_op) { - *this = *this * second_op; - return *this; + return *this = *this * second_op; } /** @@ -272,8 +267,7 @@ public: LinearOperator operator*=(typename Domain::value_type number) { - *this = *this * number; - return *this; + return *this = *this * number; } //@} @@ -355,8 +349,8 @@ operator-(const LinearOperator &first_op, /** * @relates LinearOperator * - * Scalar multiplication of a ScalarOperator object @p op with @p - * number from the left. + * Scalar multiplication of a ScalarOperator object @p op with @p number + * from the left. * * The @p Domain and @p Range types must implement the following * operator*= member functions accepting the appropriate @@ -380,59 +374,54 @@ operator*(typename Range::value_type number, LinearOperator return_op = op; + // ensure to have valid computation objects by catching number and op by + // value - // the trivial case: number is zero - if (number == 0.) - { - return_op.vmult = [] (Range &v, const Domain &) - { - v = 0.; - }; - - return_op.vmult_add = [] (Range &, const Domain &) - { - }; - - return_op.Tvmult = [](Domain &v, const Range &) + return_op.vmult = [number, op](Range &v, const Domain &u) + { + if (number == 0.) { v = 0.; - }; - - return_op.Tvmult_add = [](Domain &, const Range &) - { - }; - } - else - { - // ensure to have valid computation objects by catching number and op by - // value - - return_op.vmult = [number, op](Range &v, const Domain &u) + } + else { op.vmult(v,u); v *= number; - }; + } + }; - return_op.vmult_add = [number, op](Range &v, const Domain &u) + return_op.vmult_add = [number, op](Range &v, const Domain &u) + { + if (number != 0.) { v /= number; op.vmult_add(v,u); v *= number; - }; + } + }; - return_op.Tvmult = [number, op](Domain &v, const Range &u) + return_op.Tvmult = [number, op](Domain &v, const Range &u) + { + if (number == 0.) + { + v = 0.; + } + else { op.Tvmult(v,u); v *= number; - }; + } + }; - return_op.Tvmult_add = [number, op](Domain &v, const Range &u) + return_op.Tvmult_add = [number, op](Domain &v, const Range &u) + { + if (number != 0.) { v /= number; op.Tvmult_add(v,u); v *= number; - }; - } + } + }; return return_op; } @@ -751,7 +740,6 @@ namespace { // A trait class that determines whether type T provides public // (templated or non-templated) vmult_add and Tvmult_add member functions - template class has_vmult_add { @@ -802,7 +790,6 @@ namespace // A helper class to add a reduced matrix interface to a LinearOperator // (typically provided by Preconditioner classes) - template class MatrixInterfaceWithoutVmultAdd { @@ -869,7 +856,6 @@ namespace // A helper class to add the full matrix interface to a LinearOperator - template class MatrixInterfaceWithVmultAdd { @@ -1036,1412 +1022,6 @@ linear_operator(const OperatorExemplar &operator_exemplar, const Matrix &matrix) return return_op; } -//@} - - -/** - * @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) - * @code - * op_a00 | op_a01 - * | - * --------------- - * | - * op_a10 | op_a11 - * @endcode - * The coresponding block_operator invocation takes the form - * @code - * block_operator<2, 2, BlockVector>({op_a00, op_a01, op_a10, op_a11}); - * @endcode - * - * @ingroup LAOperators - */ -template , - typename Domain = Range> -LinearOperator -block_operator(const std::array, n>, m> &ops) -{ - static_assert(m > 0 && n > 0, - "a blocked LinearOperator must consist of at least one block"); - - LinearOperator 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) - * diag(op_a0, op_a1, ..., op_am). The coresponding - * block_operator invocation takes the form - * @code - * block_diagonal_operator>({op_00, op_a1, ..., op_am}); - * @endcode - * - * @ingroup LAOperators - */ -template , - typename Domain = Range> -LinearOperator -block_diagonal_operator(const std::array, m> &ops) -{ - static_assert(m > 0, - "a blockdiagonal LinearOperator must consist of at least one block"); - - LinearOperator 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 , - typename Domain = Range> -LinearOperator -block_diagonal_operator(const LinearOperator &op) -{ - - static_assert(m > 0, - "a blockdiagonal LinearOperator must consist of at least " - "one block"); - - LinearOperator 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; -} - -//@} - - - -/** - * A class to store a computation. - * - * The PackagedOperation class allows lazy evaluation of expressions - * involving vectors and linear operators. This is done by storing the - * computational expression and only performing the computation when either - * the object is implicitly converted to a vector object, or - * apply (or apply_add) is invoked by hand. This - * avoids unnecessary temporary storage of intermediate results. - * - * The class essentially consists of std::function objects - * that store the knowledge of how to generate the result of a computation - * and store it in a vector: - * @code - * std::function apply; - * std::function apply_add; - * @endcode - * - * Similar to the LinearOperator class it also has knowledge about how to - * initialize a vector of the @p Range space: - * @code - * std::function reinit_vector; - * @endcode - * - * As an example consider the addition of multiple vectors - * @code - * dealii::Vector a, b, c, d; - * // .. - * dealii::Vector result = a + b - c + d; - * @endcode - * or the computation of a residual $b-Ax$: - * @code - * dealii::SparseMatrix A; - * dealii::Vector b, x; - * // .. - * const auto op_a = linear_operator(A); - * - * dealii::Vector residual = b - op_a * x; - * @endcode - * The expression residual is of type - * PackagedOperation>. It stores - * references to A, b and x and - * defers the actual computation until apply, or - * apply_add are explicitly invoked, - * @code - * dealii::Vector y; - * residual.reinit_vector(y); - * residual.apply(y); - * residual.apply_add(y); - * @endcode - * or until the @p PackagedOperation object is implictly converted: - * @code - * dealii::Vector y; - * y = residual; - * y += residual; - * y -= residual; - * @endcode - * - * @author Matthias Maier, 2015 - * - * @ingroup LAOperators - */ -template class PackagedOperation -{ -public: - - /** - * Create an empty PackagedOperation object. All std::function - * member objects are initialized with default variants that throw an - * exception upon invocation. - */ - PackagedOperation () - { - apply = [](Range &) - { - Assert(false, - ExcMessage("Uninitialized PackagedOperation::apply called")); - }; - - apply_add = [](Range &) - { - Assert(false, - ExcMessage("Uninitialized PackagedOperation::apply_add called")); - }; - - reinit_vector = [](Range &, bool) - { - Assert(false, - ExcMessage("Uninitialized PackagedOperation::reinit_vector " - "method called")); - }; - } - - /** - * Default copy constructor. - */ - PackagedOperation (const PackagedOperation &) = default; - - /** - * Constructor that creates a PackagedOperation object from a reference vector - * @p u. The PackagedOperation returns @p u. - * - * The PackagedOperation object that is created stores a reference to @p - * u. Thus, the vector must remain a valid reference for the whole - * lifetime of the PackagedOperation object. All changes made on @p u - * after the creation of the PackagedOperation object are reflected by - * the operator object. - */ - PackagedOperation (const Range &u) - { - *this = u; - } - - /** - * Default copy assignment operator. - */ - PackagedOperation &operator=(const PackagedOperation &) = default; - - /** Copy assignment operator that creates a PackagedOperation object from a - * reference vector @p u. The PackagedOperation returns @p u. - * - * The PackagedOperation object that is created stores a reference to @p u. - * Thus, the vector must remain a valid reference for the whole lifetime - * of the PackagedOperation object. All changes made on @p u after the creation - * of the PackagedOperation object are reflected by the operator object. - */ - PackagedOperation &operator=(const Range &u) - { - apply = [&u](Range &v) - { - v = u; - }; - - apply_add = [&u](Range &v) - { - v += u; - }; - - reinit_vector = [&u](Range &v, bool fast) - { - v.reinit(u, fast); - }; - - return *this; - } - - /** - * Convert a PackagedOperation to its result. - * - * This conversion operator creates a vector of the Range space and calls - * apply() on it. - */ - operator Range() const - { - Range result_vector; - - reinit_vector(result_vector, /*bool fast=*/ true); - apply(result_vector); - - return result_vector; - } - - /** - * @name In-place vector space operations - */ - //@{ - - /** - * Addition with a PackagedOperation @p second_comp with the same @p Range. - */ - PackagedOperation &operator+=(const PackagedOperation &second_comp) - { - return *this = *this + second_comp; - } - - /** - * Subtraction with a PackagedOperation @p second_comp with the same @p Range. - */ - PackagedOperation &operator-=(const PackagedOperation &second_comp) - { - return *this = *this - second_comp; - } - - /** - * Add a constant @p offset (of the @p Range space) to the result of a - * PackagedOperation. - */ - PackagedOperation &operator+=(const Range &offset) - { - return *this = *this + PackagedOperation(offset); - } - - /** - * Subract a constant @p offset (of the @p Range space) from the result - * of a PackagedOperation. - */ - PackagedOperation &operator-=(const Range &offset) - { - return *this = *this - PackagedOperation(offset); - } - - /** - * Scalar multiplication of the PackagedOperation with a @p number. - */ - PackagedOperation &operator*=(typename Range::value_type number) - { - return *this = *this * number; - } - //@} - - /** - * Store the result of the PackagedOperation in a vector v of the @p Range - * space. - */ - std::function apply; - - /** - * Add the result of the PackagedOperation to a vector v of the @p Range space. - */ - std::function apply_add; - - /** - * Initializes a vector v of the Range space to be directly usable as the - * destination parameter in an application of apply, or apply_add. - * Similar to the reinit functions of the vector classes, the boolean - * determines whether a fast initialization is done, i.e., if it is set - * to false the content of the vector is set to 0. - */ - std::function reinit_vector; -}; - - -/** - * @name Vector space operations - */ -//@{ - -/** - * @relates PackagedOperation - * - * Addition of two PackagedOperation objects @p first_comp and - * @p second_comp given by vector space addition of the corresponding results. - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator+(const PackagedOperation &first_comp, - const PackagedOperation &second_comp) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = first_comp.reinit_vector; - - // ensure to have valid PackagedOperation objects by catching first_comp and - // second_comp by value - - return_comp.apply = [first_comp, second_comp](Range &v) - { - first_comp.apply(v); - second_comp.apply_add(v); - }; - - return_comp.apply_add = [first_comp, second_comp](Range &v) - { - first_comp.apply_add(v); - second_comp.apply_add(v); - }; - - return return_comp; -} - -/** - * @relates PackagedOperation - * - * Subtraction of two PackagedOperation objects @p first_comp and @p second_comp - * given by vector space addition of the corresponding results. - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator-(const PackagedOperation &first_comp, - const PackagedOperation &second_comp) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = first_comp.reinit_vector; - - // ensure to have valid PackagedOperation objects by catching first_comp and - // second_comp by value - - return_comp.apply = [first_comp, second_comp](Range &v) - { - second_comp.apply(v); - v *= -1.; - first_comp.apply_add(v); - }; - - return_comp.apply_add = [first_comp, second_comp](Range &v) - { - first_comp.apply_add(v); - v *= -1.; - second_comp.apply_add(v); - v *= -1.; - }; - - return return_comp; -} - -/** - * @relates PackagedOperation - * - * Scalar multiplication of a PackagedOperation objects @p comp with a - * scalar @p number given by a scaling PackagedOperation result with - * @p number. - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator*(const PackagedOperation &comp, - typename Range::value_type number) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = comp.reinit_vector; - - // the trivial case: number is zero - if (number == 0.) - { - return_comp.apply = [](Range &v) - { - v = 0.; - }; - - return_comp.apply_add = [](Range &) - { - }; - } - else - { - return_comp.apply = [comp, number](Range &v) - { - comp.apply(v); - v *= number; - }; - - return_comp.apply_add = [comp, number](Range &v) - { - v /= number; - comp.apply_add(v); - v *= number; - }; - } - - return return_comp; -} - -/** - * @relates PackagedOperation - * - * Scalar multiplication of a PackagedOperation objects @p comp with a - * scalar @p number given by a scaling PackagedOperation result with - * @p number. - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator*(typename Range::value_type number, - const PackagedOperation &comp) -{ - return comp * number; -} - -/** - * @relates PackagedOperation - * - * Add a constant @p offset (of the @p Range space) to the result of a - * PackagedOperation. - * - * @ingroup LAOperators - */ -template -PackagedOperation operator+(const PackagedOperation &comp, - const Range &offset) -{ - return comp + PackagedOperation(offset); -} - -/** - * @relates PackagedOperation - * - * Add a constant @p offset (of the @p Range space) to the result of a - * PackagedOperation. - * - * @ingroup LAOperators - */ -template -PackagedOperation operator+(const Range &offset, - const PackagedOperation &comp) -{ - return PackagedOperation(offset) + comp; -} - -/** - * @relates PackagedOperation - * - * Subtract a constant @p offset (of the @p Range space) from the result of a - * PackagedOperation. - * - * @ingroup LAOperators - */ -template -PackagedOperation operator-(const PackagedOperation &comp, - const Range &offset) -{ - return comp - PackagedOperation(offset); -} - - -/** - * @relates PackagedOperation - * - * Subtract a computational result from a constant @p offset (of the @p - * Range space). The result is a PackagedOperation object that applies this - * computation. - * - * @ingroup LAOperators - */ -template -PackagedOperation operator-(const Range &offset, - const PackagedOperation &comp) -{ - return PackagedOperation(offset) - comp; -} - -//@} - - -/** - * @name Creation of a PackagedOperation object - */ -//@{ - -namespace -{ - // Poor man's trait class that determines whether type T is a vector: - // FIXME: Implement this as a proper type trait - similar to - // isBlockVector - - template - class has_vector_interface - { - template - static std::false_type test(...); - - template - static std::true_type test(decltype(&C::operator+=), - decltype(&C::operator-=), - decltype(&C::l2_norm)); - - public: - // type is std::true_type if Matrix provides vmult_add and Tvmult_add, - // otherwise it is std::false_type - - typedef decltype(test(0, 0, 0)) type; - }; -} - - -/** - * @relates PackagedOperation - * - * Create a PackagedOperation object that stores the addition of two vectors. - * - * The PackagedOperation object that is created stores a reference to @p u and @p - * v. Thus, the vectors must remain valid references for the whole lifetime - * of the PackagedOperation object. All changes made on @p u or @p v after the - * creation of the PackagedOperation object are reflected by the operator object. - * - * @ingroup LAOperators - */ - -template ::type::value>::type> -PackagedOperation operator+(const Range &u, const Range &v) -{ - PackagedOperation return_comp; - - // ensure to have valid PackagedOperation objects by catching op by value - // u is catched by reference - - return_comp.reinit_vector = [&u](Range &x, bool fast) - { - x.reinit(u, fast); - }; - - return_comp.apply = [&u, &v](Range &x) - { - x = u; - x += v; - }; - - return_comp.apply_add = [&u, &v](Range &x) - { - x += u; - x += v; - }; - - return return_comp; -} - - -/** - * @relates PackagedOperation - * - * Create a PackagedOperation object that stores the subtraction of two vectors. - * - * The PackagedOperation object that is created stores a reference to @p u - * and @p v. Thus, the vectors must remain valid references for the whole - * lifetime of the PackagedOperation object. All changes made on @p u or @p - * v after the creation of the PackagedOperation object are reflected by - * the operator object. - * - * @ingroup LAOperators - */ - -template ::type::value>::type> -PackagedOperation operator-(const Range &u, const Range &v) -{ - PackagedOperation return_comp; - - // ensure to have valid PackagedOperation objects by catching op by value - // u is catched by reference - - return_comp.reinit_vector = [&u](Range &x, bool fast) - { - x.reinit(u, fast); - }; - - return_comp.apply = [&u, &v](Range &x) - { - x = u; - x -= v; - }; - - return_comp.apply_add = [&u, &v](Range &x) - { - x += u; - x -= v; - }; - - return return_comp; -} - - -/** - * @relates PackagedOperation - * - * Create a PackagedOperation object that stores the scaling of a vector - * with a @p number. - * - * The PackagedOperation object that is created stores a reference to @p u. - * Thus, the vectors must remain valid references for the whole lifetime of - * the PackagedOperation object. All changes made on @p u or @p v after the - * creation of the PackagedOperation object are reflected by the operator - * object. - * - * @ingroup LAOperators - */ -template ::type::value>::type> -PackagedOperation operator*(const Range &u, - typename Range::value_type number) -{ - return PackagedOperation(u) * number; -} - - -/** - * @relates PackagedOperation - * - * Create a PackagedOperation object that stores the scaling of a vector - * with a @p number. - * - * The PackagedOperation object that is created stores a reference to @p u. - * Thus, the vectors must remain valid references for the whole lifetime of - * the PackagedOperation object. All changes made on @p u or @p v after the - * creation of the PackagedOperation object are reflected by the operator - * object. - * - * @ingroup LAOperators - */ -template ::type::value>::type> -PackagedOperation operator*(typename Range::value_type number, - const Range &u) -{ - return number * PackagedOperation(u); -} - - -/** - * @relates PackagedOperation - * - * Create a PackagedOperation object from a LinearOperator and a reference to a - * vector @p u of the Domain space. The object stores the PackagedOperation - * $\text{op} \,u$ (in matrix notation). return - * (return_add) are implemented with vmult(__1,u) - * (vmult_add(__1,u)). - * - * The PackagedOperation object that is created stores a reference to @p u. - * Thus, the vector must remain a valid reference for the whole lifetime of - * the PackagedOperation object. All changes made on @p u after the - * creation of the PackagedOperation object are reflected by the operator - * object. - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator*(const LinearOperator &op, - const Domain &u) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = op.reinit_range_vector; - - // ensure to have valid PackagedOperation objects by catching op by value - // u is catched by reference - - return_comp.apply = [op, &u](Range &v) - { - op.vmult(v, u); - }; - - return_comp.apply_add = [op, &u](Range &v) - { - op.vmult_add(v, u); - }; - - return return_comp; -} - - -/** - * @relates PackagedOperation - * - * Create a PackagedOperation object from a LinearOperator and a reference - * to a vector @p u of the Range space. The object stores the - * PackagedOperation $\text{op}^T \,u$ (in matrix notation). - * return (return_add) are implemented with - * Tvmult(__1,u) (Tvmult_add(__1,u)). - * - * The PackagedOperation object that is created stores a reference to @p u. - * Thus, the vector must remain a valid reference for the whole lifetime of - * the PackagedOperation object. All changes made on @p u after the - * creation of the PackagedOperation object are reflected by the operator - * object. - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator*(const Range &u, - const LinearOperator &op) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = op.reinit_domain_vector; - - // ensure to have valid PackagedOperation objects by catching op by value - // u is catched by reference - - return_comp.apply = [op, &u](Domain &v) - { - op.Tvmult(v, u); - }; - - return_comp.apply_add = [op, &u](Domain &v) - { - op.Tvmult_add(v, u); - }; - - return return_comp; -} - - -/** - * @relates PackagedOperation - * - * Composition of a PackagedOperation object with a LinearOperator. The - * object stores the computation $\text{op} \,comp$ (in matrix notation). - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator*(const LinearOperator &op, - const PackagedOperation &comp) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = op.reinit_range_vector; - - // ensure to have valid PackagedOperation objects by catching op by value - // u is catched by reference - - return_comp.apply = [op, comp](Domain &v) - { - static GrowingVectorMemory vector_memory; - - Range *i = vector_memory.alloc(); - op.reinit_domain_vector(*i, /*bool fast =*/ true); - - comp.apply(*i); - op.vmult(v, *i); - - vector_memory.free(i); - }; - - return_comp.apply_add = [op, comp](Domain &v) - { - static GrowingVectorMemory vector_memory; - - Range *i = vector_memory.alloc(); - op.reinit_range_vector(*i, /*bool fast =*/ true); - - comp.apply(*i); - op.vmult_add(v, *i); - - vector_memory.free(i); - }; - - return return_comp; -} - - -/** - * @relates PackagedOperation - * - * Composition of a PackagedOperation object with a LinearOperator. The - * object stores the computation $\text{op}^T \,comp$ (in matrix notation). - * - * @ingroup LAOperators - */ -template -PackagedOperation -operator*(const PackagedOperation &comp, - const LinearOperator &op) -{ - PackagedOperation return_comp; - - return_comp.reinit_vector = op.reinit_domain_vector; - - // ensure to have valid PackagedOperation objects by catching op by value - // u is catched by reference - - return_comp.apply = [op, comp](Domain &v) - { - static GrowingVectorMemory vector_memory; - - Range *i = vector_memory.alloc(); - op.reinit_range_vector(*i, /*bool fast =*/ true); - - comp.apply(*i); - op.Tvmult(v, *i); - - vector_memory.free(i); - }; - - return_comp.apply_add = [op, comp](Domain &v) - { - static GrowingVectorMemory vector_memory; - - Range *i = vector_memory.alloc(); - op.reinit_range_vector(*i, /*bool fast =*/ true); - - comp.apply(*i); - op.Tvmult_add(v, *i); - - vector_memory.free(i); - }; - - return return_comp; -} - - -/** - * @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 Domain = Range, - typename BlockMatrix> -LinearOperator -lower_triangular_operator(const BlockMatrix &); - - -template -LinearOperator -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 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(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(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 Domain = Range, - typename BlockMatrix> -LinearOperator -upper_triangular_operator(const BlockMatrix &); - - -template -LinearOperator -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 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(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(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 Domain = Range, - typename BlockMatrix> -LinearOperator -block_triangular_inverse(const BlockMatrix &, - const LinearOperator &, - bool lower = true); - - -template -LinearOperator -block_triangular_inverse(const BlockMatrix &block_matrix, - const LinearOperator &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 op_a; - - if (lower) - { - op_a = lower_triangular_operator(block_matrix); - } - else - { - op_a = upper_triangular_operator(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 diff --git a/tests/lac/linear_operator_05.cc b/tests/lac/linear_operator_05.cc index d0bb18ffd3..0eab4f6f22 100644 --- a/tests/lac/linear_operator_05.cc +++ b/tests/lac/linear_operator_05.cc @@ -13,208 +13,227 @@ // // --------------------------------------------------------------------- -// Tests for block_operator +// Test linear_operator constructor for full and reduced interface: #include "../tests.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include -#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() +class MyMatrix1 { - initlog(); - deallog << std::setprecision(10); - - static const int dim = 2; +public: + size_t m() const { return 1; }; + size_t n() const { return 1; }; - Triangulation triangulation; - GridGenerator::hyper_cube (triangulation); - triangulation.refine_global(2); - - MappingQ1 mapping_q1; - FESystem fe(FE_Q(2), 1, FE_Q(1), 1); - DoFHandler dof_handler(triangulation); - - dof_handler.distribute_dofs(fe); - - std::vector 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); - } + void vmult(Vector &, const Vector &) const + { + deallog << "MyMatrix1::vmult" << std::endl; } - 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 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>(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, 2> temp{op_b00, op_b01, op_b10, - op_b11}; - auto op_b = block_operator<2, 2, BlockVector>(temp); - - // vmult: - - BlockVector u; - op_a.reinit_domain_vector(u, false); - for (unsigned int i = 0; i < u.size(); ++i) { - u[i] = (double)(i+1); + void Tvmult(Vector &, const Vector &) const + { + deallog << "MyMatrix1::Tvmult" << std::endl; } - PRINTME("u", u); - - BlockVector v; - op_a.reinit_domain_vector(v, false); - BlockVector w; - op_a.reinit_domain_vector(w, false); - BlockVector 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: +class MyMatrix2 +{ +public: + size_t m() const { return 1; }; + size_t n() const { return 1; }; - auto op_x = op_a - op_b; + void vmult(Vector &, const Vector &) const + { + deallog << "MyMatrix2::vmult" << std::endl; + } - op_x.vmult(x, u); - PRINTME("vmult", x); + void Tvmult(Vector &, const Vector &) const + { + deallog << "MyMatrix2::Tvmult" << std::endl; + } - x = 0.; - op_x.vmult_add(x, u); - PRINTME("vmult_add", x); + void vmult_add(Vector &, const Vector &) const + { + deallog << "MyMatrix2::vmult_add" << std::endl; + } - op_x.Tvmult(x, u); - PRINTME("Tvmult", x); + void Tvmult_add(Vector &, const Vector &) const + { + deallog << "MyMatrix2::Tvmult_add" << std::endl; + } +}; - x = 0.; - op_x.Tvmult_add(x, u); - PRINTME("Tvmult_add", x); +class MyMatrix3 +{ +public: + size_t m() const { return 1; }; + size_t n() const { return 1; }; + + template + void vmult(OutVector &, const InVector &) const + { + deallog << "MyMatrix3::vmult" << std::endl; + } + template + void Tvmult(OutVector &, const InVector &) const + { + deallog << "MyMatrix3::Tvmult" << std::endl; + } - // Test vector reinitalization: + template + void vmult_add(OutVector &, const InVector &) const + { + deallog << "MyMatrix3::vmult_add" << std::endl; + } - op_x = op_b * op_b * op_b; - op_x.vmult(x, u); - PRINTME("(B*B*B) vmult", x); + template + void Tvmult_add(OutVector &, const InVector &) const + { + deallog << "MyMatrix3::Tvmult_add" << std::endl; + } +}; - x = 0.; - op_x.vmult_add(x, u); - PRINTME("(B*B*B) vmult_add", x); +class MyMatrix4 +{ +public: + size_t m() const { return 1; }; + size_t n() const { return 1; }; + + template + void vmult(OutVector &, const InVector &, bool = true) const + { + deallog << "MyMatrix4::vmult" << std::endl; + } - op_x.Tvmult(x, u); - PRINTME("(B*B*B) Tvmult", x); + template + void Tvmult(OutVector &, const InVector &, bool = true) const + { + deallog << "MyMatrix4::Tvmult" << std::endl; + } - x = 0.; - op_x.Tvmult_add(x, u); - PRINTME("(B*B*B) Tvmult_add", x); + template + void vmult_add(OutVector &, const InVector &, bool = true) const + { + deallog << "MyMatrix4::vmult_add" << std::endl; + } - // And finally complicated block structures: + template + void Tvmult_add(OutVector &, const InVector &, bool = true) const + { + deallog << "MyMatrix4::Tvmult_add" << std::endl; + } +}; - std::array, 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>(temp2); +class MyMatrix5 +{ +public: + size_t m() const { return 1; }; + size_t n() const { return 1; }; + + template + void vmult(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix5::vmult" << std::endl; + } - op_upp_x_upu.reinit_domain_vector(u, false); - for (unsigned int i = 0; i < u.size(); ++i) { - u[i] = (double)(i+1); + template + void Tvmult(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix5::Tvmult" << std::endl; } - PRINTME("u", u); - op_upp_x_upu.reinit_range_vector(v, false); - op_upp_x_upu.vmult(v, u); - PRINTME("v", v); + template + void vmult_add(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix5::vmult_add" << std::endl; + } - v = 0.; - op_upp_x_upu.vmult_add(v, u); - PRINTME("v", v); + template + void Tvmult_add(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix5::Tvmult_add" << std::endl; + } +}; - std::array, 3> temp3{op_b01, op_b11, op_b11}; - auto op_upp_x_p = block_operator<3, 1, BlockVector>(temp3); +class MyMatrix6 +{ +public: + size_t m() const { return 1; }; + size_t n() const { return 1; }; + + template + void vmult(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix6::vmult" << std::endl; + } - std::array, 1> temp4{op_b00, op_b01, op_b00}; - auto op_u_x_upu = block_operator<1, 3, BlockVector>(temp4); + template + void Tvmult(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix6::Tvmult" << std::endl; + } - auto op_long = op_u_x_upu * transpose_operator(op_upp_x_upu) * op_upp_x_p; + template + void vmult_add(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix6::vmult_add" << std::endl; + } - op_long.reinit_domain_vector(u, false); - for (unsigned int i = 0; i < u.size(); ++i) { - u[i] = (double)(i+1); + template + void Tvmult_add(Vector &, const Vector &, bool = true) const + { + deallog << "MyMatrix6::Tvmult_add" << std::endl; } - PRINTME("u", u); +}; - op_long.reinit_range_vector(v, false); - op_long.vmult(v, u); - PRINTME("v", v); +using namespace dealii; - v = 0.; - op_long.vmult_add(v, u); - PRINTME("v", v); +int main() +{ + initlog(); + deallog << std::setprecision(10); + Vector u (1); + Vector v (1); + + MyMatrix1 m1; + MyMatrix2 m2; + MyMatrix3 m3; + MyMatrix4 m4; + MyMatrix5 m5; + MyMatrix6 m6; + + linear_operator(m1).vmult(v, u); + linear_operator(m1).Tvmult(v, u); + linear_operator(m1).vmult_add(v, u); + linear_operator(m1).Tvmult_add(v, u); + + linear_operator(m2).vmult(v, u); + linear_operator(m2).Tvmult(v, u); + linear_operator(m2).vmult_add(v, u); + linear_operator(m2).Tvmult_add(v, u); + + linear_operator(m3).vmult(v, u); + linear_operator(m3).Tvmult(v, u); + linear_operator(m3).vmult_add(v, u); + linear_operator(m3).Tvmult_add(v, u); + + linear_operator(m4).vmult(v, u); + linear_operator(m4).Tvmult(v, u); + linear_operator(m4).vmult_add(v, u); + linear_operator(m4).Tvmult_add(v, u); + + linear_operator(m5).vmult(v, u); + linear_operator(m5).Tvmult(v, u); + linear_operator(m5).vmult_add(v, u); + linear_operator(m5).Tvmult_add(v, u); + + linear_operator(m6).vmult(v, u); + linear_operator(m6).Tvmult(v, u); + linear_operator(m6).vmult_add(v, u); + linear_operator(m6).Tvmult_add(v, u); } - - - diff --git a/tests/lac/linear_operator_05.with_cxx11=on.output b/tests/lac/linear_operator_05.with_cxx11=on.output index 0841217c73..b1e55fa541 100644 --- a/tests/lac/linear_operator_05.with_cxx11=on.output +++ b/tests/lac/linear_operator_05.with_cxx11=on.output @@ -1,55 +1,25 @@ -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 +DEAL::MyMatrix1::vmult +DEAL::MyMatrix1::Tvmult +DEAL::MyMatrix1::vmult +DEAL::MyMatrix1::Tvmult +DEAL::MyMatrix2::vmult +DEAL::MyMatrix2::Tvmult +DEAL::MyMatrix2::vmult_add +DEAL::MyMatrix2::Tvmult_add +DEAL::MyMatrix3::vmult +DEAL::MyMatrix3::Tvmult +DEAL::MyMatrix3::vmult_add +DEAL::MyMatrix3::Tvmult_add +DEAL::MyMatrix4::vmult +DEAL::MyMatrix4::Tvmult +DEAL::MyMatrix4::vmult_add +DEAL::MyMatrix4::Tvmult_add +DEAL::MyMatrix5::vmult +DEAL::MyMatrix5::Tvmult +DEAL::MyMatrix5::vmult_add +DEAL::MyMatrix5::Tvmult_add +DEAL::MyMatrix6::vmult +DEAL::MyMatrix6::Tvmult +DEAL::MyMatrix6::vmult_add +DEAL::MyMatrix6::Tvmult_add diff --git a/tests/lac/linear_operator_06.cc b/tests/lac/linear_operator_06.cc index 0eab4f6f22..d15d626d53 100644 --- a/tests/lac/linear_operator_06.cc +++ b/tests/lac/linear_operator_06.cc @@ -13,227 +13,76 @@ // // --------------------------------------------------------------------- -// Test linear_operator constructor for full and reduced interface: +// Test non symmetric variants: #include "../tests.h" +#include +#include +#include #include -#include +#include #include -class MyMatrix1 -{ -public: - size_t m() const { return 1; }; - size_t n() const { return 1; }; - - void vmult(Vector &, const Vector &) const - { - deallog << "MyMatrix1::vmult" << std::endl; - } - - void Tvmult(Vector &, const Vector &) const - { - deallog << "MyMatrix1::Tvmult" << std::endl; - } +#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); -}; -class MyMatrix2 -{ -public: - size_t m() const { return 1; }; - size_t n() const { return 1; }; - - void vmult(Vector &, const Vector &) const - { - deallog << "MyMatrix2::vmult" << std::endl; - } - - void Tvmult(Vector &, const Vector &) const - { - deallog << "MyMatrix2::Tvmult" << std::endl; - } - - void vmult_add(Vector &, const Vector &) const - { - deallog << "MyMatrix2::vmult_add" << std::endl; - } - - void Tvmult_add(Vector &, const Vector &) const - { - deallog << "MyMatrix2::Tvmult_add" << std::endl; - } -}; - -class MyMatrix3 -{ -public: - size_t m() const { return 1; }; - size_t n() const { return 1; }; - - template - void vmult(OutVector &, const InVector &) const - { - deallog << "MyMatrix3::vmult" << std::endl; - } - - template - void Tvmult(OutVector &, const InVector &) const - { - deallog << "MyMatrix3::Tvmult" << std::endl; - } - - template - void vmult_add(OutVector &, const InVector &) const - { - deallog << "MyMatrix3::vmult_add" << std::endl; - } - - template - void Tvmult_add(OutVector &, const InVector &) const - { - deallog << "MyMatrix3::Tvmult_add" << std::endl; - } -}; +using namespace dealii; -class MyMatrix4 +int main() { -public: - size_t m() const { return 1; }; - size_t n() const { return 1; }; - - template - void vmult(OutVector &, const InVector &, bool = true) const - { - deallog << "MyMatrix4::vmult" << std::endl; - } - - template - void Tvmult(OutVector &, const InVector &, bool = true) const - { - deallog << "MyMatrix4::Tvmult" << std::endl; - } - - template - void vmult_add(OutVector &, const InVector &, bool = true) const - { - deallog << "MyMatrix4::vmult_add" << std::endl; - } + initlog(); + deallog << std::setprecision(10); - template - void Tvmult_add(OutVector &, const InVector &, bool = true) const + // SparseMatrix: { - deallog << "MyMatrix4::Tvmult_add" << std::endl; - } -}; + SparsityPattern sparsity_pattern (10, 5, 0); + sparsity_pattern.compress(); -class MyMatrix5 -{ -public: - size_t m() const { return 1; }; - size_t n() const { return 1; }; + SparseMatrix a (sparsity_pattern); - template - void vmult(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix5::vmult" << std::endl; - } + auto op_a = linear_operator(a); - template - void Tvmult(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix5::Tvmult" << std::endl; - } + Vector u; + op_a.reinit_domain_vector(u, false); + Vector v; + op_a.reinit_range_vector(v, false); + op_a.vmult(v, u); + op_a.vmult_add(v, u); + op_a.Tvmult(u, v); + op_a.Tvmult_add(u, v); - template - void vmult_add(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix5::vmult_add" << std::endl; + deallog << "OK" << std::endl; } - template - void Tvmult_add(Vector &, const Vector &, bool = true) const + // BlockSparseMatrix: { - deallog << "MyMatrix5::Tvmult_add" << std::endl; - } -}; + BlockDynamicSparsityPattern dsp(5, 3); + for (unsigned int i = 0; i < 5; ++i) + for (unsigned int j = 0; j < 3; ++j) + dsp.block(i, j).reinit (10, 5); + dsp.collect_sizes (); -class MyMatrix6 -{ -public: - size_t m() const { return 1; }; - size_t n() const { return 1; }; + BlockSparsityPattern sparsity_pattern; + sparsity_pattern.copy_from(dsp); + sparsity_pattern.compress(); - template - void vmult(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix6::vmult" << std::endl; - } + BlockSparseMatrix a (sparsity_pattern); - template - void Tvmult(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix6::Tvmult" << std::endl; - } + auto op_a = linear_operator>(a); - template - void vmult_add(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix6::vmult_add" << std::endl; - } - - template - void Tvmult_add(Vector &, const Vector &, bool = true) const - { - deallog << "MyMatrix6::Tvmult_add" << std::endl; + BlockVector u; + op_a.reinit_domain_vector(u, false); + BlockVector v; + op_a.reinit_range_vector(v, false); + op_a.vmult(v, u); + op_a.vmult_add(v, u); + op_a.Tvmult(u, v); + op_a.Tvmult_add(u, v); + deallog << "OK" << std::endl; } -}; - -using namespace dealii; - -int main() -{ - initlog(); - deallog << std::setprecision(10); - - Vector u (1); - Vector v (1); - - MyMatrix1 m1; - MyMatrix2 m2; - MyMatrix3 m3; - MyMatrix4 m4; - MyMatrix5 m5; - MyMatrix6 m6; - - linear_operator(m1).vmult(v, u); - linear_operator(m1).Tvmult(v, u); - linear_operator(m1).vmult_add(v, u); - linear_operator(m1).Tvmult_add(v, u); - - linear_operator(m2).vmult(v, u); - linear_operator(m2).Tvmult(v, u); - linear_operator(m2).vmult_add(v, u); - linear_operator(m2).Tvmult_add(v, u); - - linear_operator(m3).vmult(v, u); - linear_operator(m3).Tvmult(v, u); - linear_operator(m3).vmult_add(v, u); - linear_operator(m3).Tvmult_add(v, u); - - linear_operator(m4).vmult(v, u); - linear_operator(m4).Tvmult(v, u); - linear_operator(m4).vmult_add(v, u); - linear_operator(m4).Tvmult_add(v, u); - - linear_operator(m5).vmult(v, u); - linear_operator(m5).Tvmult(v, u); - linear_operator(m5).vmult_add(v, u); - linear_operator(m5).Tvmult_add(v, u); - - linear_operator(m6).vmult(v, u); - linear_operator(m6).Tvmult(v, u); - linear_operator(m6).vmult_add(v, u); - linear_operator(m6).Tvmult_add(v, u); } + diff --git a/tests/lac/linear_operator_06.with_cxx11=on.output b/tests/lac/linear_operator_06.with_cxx11=on.output index b1e55fa541..8b3b075900 100644 --- a/tests/lac/linear_operator_06.with_cxx11=on.output +++ b/tests/lac/linear_operator_06.with_cxx11=on.output @@ -1,25 +1,3 @@ -DEAL::MyMatrix1::vmult -DEAL::MyMatrix1::Tvmult -DEAL::MyMatrix1::vmult -DEAL::MyMatrix1::Tvmult -DEAL::MyMatrix2::vmult -DEAL::MyMatrix2::Tvmult -DEAL::MyMatrix2::vmult_add -DEAL::MyMatrix2::Tvmult_add -DEAL::MyMatrix3::vmult -DEAL::MyMatrix3::Tvmult -DEAL::MyMatrix3::vmult_add -DEAL::MyMatrix3::Tvmult_add -DEAL::MyMatrix4::vmult -DEAL::MyMatrix4::Tvmult -DEAL::MyMatrix4::vmult_add -DEAL::MyMatrix4::Tvmult_add -DEAL::MyMatrix5::vmult -DEAL::MyMatrix5::Tvmult -DEAL::MyMatrix5::vmult_add -DEAL::MyMatrix5::Tvmult_add -DEAL::MyMatrix6::vmult -DEAL::MyMatrix6::Tvmult -DEAL::MyMatrix6::vmult_add -DEAL::MyMatrix6::Tvmult_add +DEAL::OK +DEAL::OK diff --git a/tests/lac/linear_operator_07.cc b/tests/lac/linear_operator_07.cc index 4f630bbfbe..df29941639 100644 --- a/tests/lac/linear_operator_07.cc +++ b/tests/lac/linear_operator_07.cc @@ -13,20 +13,16 @@ // // --------------------------------------------------------------------- -// Tests for block_diagonal_operator +// Test scaling with a number which might be 0 #include "../tests.h" -#include -#include -#include -#include -#include -#include #include #include #include #include +#include +#include #define PRINTME(name, var) \ deallog << "Block vector: " name << ":" << std::endl; \ @@ -41,147 +37,25 @@ int main() initlog(); deallog << std::setprecision(10); - static const int dim = 2; + // SparseMatrix: + { + SparsityPattern sparsity_pattern (10, 5, 0); + sparsity_pattern.compress(); - Triangulation triangulation; - GridGenerator::hyper_cube (triangulation); - triangulation.refine_global(2); + SparseMatrix a (sparsity_pattern); - MappingQ1 mapping_q1; - FESystem fe(FE_Q(2), 1, FE_Q(1), 1, FE_Q(3), 1); - DoFHandler dof_handler(triangulation); + auto op_a = 0*linear_operator(a); - dof_handler.distribute_dofs(fe); + Vector u; + op_a.reinit_domain_vector(u, false); + Vector v; + op_a.reinit_range_vector(v, false); + op_a.vmult(v, u); + op_a.vmult_add(v, u); + op_a.Tvmult(u, v); + op_a.Tvmult_add(u, v); - std::vector 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 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>(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 temp{op_b0, op_b1, op_b2}; - auto op_b = block_diagonal_operator<3, BlockVector>(temp); - - // vmult: - - BlockVector 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 v; - op_a.reinit_domain_vector(v, false); - BlockVector w; - op_a.reinit_domain_vector(w, false); - BlockVector 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 temp2{op_b0, op_b0, op_b0, op_b0, op_b0}; - auto op_c = block_diagonal_operator<5, BlockVector>(temp2); - - auto op_d = block_diagonal_operator<5, BlockVector>(op_b0); - - op_c.reinit_domain_vector(u, false); - for (unsigned int i = 0; i < u.size(); ++i) { - u[i] = (double)(i+1); + deallog << "OK" << std::endl; } - 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); - } - - diff --git a/tests/lac/linear_operator_07.with_cxx11=on.output b/tests/lac/linear_operator_07.with_cxx11=on.output index dab468f636..0fd8fc12f0 100644 --- a/tests/lac/linear_operator_07.with_cxx11=on.output +++ b/tests/lac/linear_operator_07.with_cxx11=on.output @@ -1,79 +1,2 @@ -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 +DEAL::OK diff --git a/tests/lac/linear_operator_08.cc b/tests/lac/linear_operator_08.cc deleted file mode 100644 index d15d626d53..0000000000 --- a/tests/lac/linear_operator_08.cc +++ /dev/null @@ -1,88 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 non symmetric variants: - -#include "../tests.h" - -#include -#include -#include -#include -#include -#include - -#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); - - // SparseMatrix: - { - SparsityPattern sparsity_pattern (10, 5, 0); - sparsity_pattern.compress(); - - SparseMatrix a (sparsity_pattern); - - auto op_a = linear_operator(a); - - Vector u; - op_a.reinit_domain_vector(u, false); - Vector v; - op_a.reinit_range_vector(v, false); - op_a.vmult(v, u); - op_a.vmult_add(v, u); - op_a.Tvmult(u, v); - op_a.Tvmult_add(u, v); - - deallog << "OK" << std::endl; - } - - // BlockSparseMatrix: - { - BlockDynamicSparsityPattern dsp(5, 3); - for (unsigned int i = 0; i < 5; ++i) - for (unsigned int j = 0; j < 3; ++j) - dsp.block(i, j).reinit (10, 5); - dsp.collect_sizes (); - - BlockSparsityPattern sparsity_pattern; - sparsity_pattern.copy_from(dsp); - sparsity_pattern.compress(); - - BlockSparseMatrix a (sparsity_pattern); - - auto op_a = linear_operator>(a); - - BlockVector u; - op_a.reinit_domain_vector(u, false); - BlockVector v; - op_a.reinit_range_vector(v, false); - op_a.vmult(v, u); - op_a.vmult_add(v, u); - op_a.Tvmult(u, v); - op_a.Tvmult_add(u, v); - deallog << "OK" << std::endl; - } -} - diff --git a/tests/lac/linear_operator_08.with_cxx11=on.output b/tests/lac/linear_operator_08.with_cxx11=on.output deleted file mode 100644 index 8b3b075900..0000000000 --- a/tests/lac/linear_operator_08.with_cxx11=on.output +++ /dev/null @@ -1,3 +0,0 @@ - -DEAL::OK -DEAL::OK diff --git a/tests/lac/linear_operator_09.cc b/tests/lac/linear_operator_09.cc deleted file mode 100644 index 1c96442ea8..0000000000 --- a/tests/lac/linear_operator_09.cc +++ /dev/null @@ -1,141 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 PackagedOperation for -// dealii::Vector -// dealii::SparseMatrix - -#include "../tests.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace dealii; - - -void test_applies(std::string description, - const PackagedOperation > &expr) -{ - // test apply - Vector tmp = expr; - deallog << description << ": " << tmp << std::endl; - - // test apply_add - for (auto &i : tmp) - i = 100.; - expr.apply_add(tmp); - deallog << "100. * 1_n + " << description << ": " << tmp << std::endl; -} - - -int main() -{ - initlog(); - deallog << std::setprecision(10); - - static const int dim = 2; - - // Create mass marix M, and an iterative inverse MInv: - - Triangulation triangulation; - GridGenerator::hyper_cube (triangulation); - triangulation.refine_global(2); - - MappingQ1 mapping_q1; - FE_Q q1(1); - DoFHandler dof_handler(triangulation); - dof_handler.distribute_dofs(q1); - - DynamicSparsityPattern dsp(dof_handler.n_dofs(), dof_handler.n_dofs()); - DoFTools::make_sparsity_pattern(dof_handler, dsp); - dsp.compress(); - SparsityPattern sparsity_pattern; - sparsity_pattern.copy_from(dsp); - sparsity_pattern.compress(); - - SparseMatrix m (sparsity_pattern); - - QGauss quadrature(4); - MatrixCreator::create_mass_matrix(mapping_q1, dof_handler, quadrature, m); - - auto M = linear_operator(m); - - SolverControl solver_control (1000, 1e-12); - SolverCG<> solver (solver_control); - - auto MInv = inverse_operator(M, solver, PreconditionIdentity()); - - // Tests: - - Vector u; - M.reinit_domain_vector(u, true); - for (unsigned int i = 0; i < u.size(); ++i) { - u[i] = (double)(i+1); - } - - deallog << "u: " << u << std::endl; - - // creation via operator+, operator-, operator* - - test_applies("u + u", u + u); - test_applies("u - u", u - u); - test_applies("3. * u", 3. * u); - test_applies("u * 3.", u * 3.); - - // creation via mixed operator+, operator- - - auto expr = 2. * u; - - test_applies("2. * u + u", expr + u); - test_applies("2. * u - u", expr - u); - - test_applies("u + 2. * u", u + expr); - test_applies("u - 2. * u", u - expr); - - // operator+, operator-, operator* - - PackagedOperation > expr2 = u; - - test_applies("2. * u + u", expr + expr2); - test_applies("2. * u - u", expr - expr2); - test_applies("3. * u", 3. * expr2); - test_applies("u * 3.", expr2 * 3.); - - // creation with LinearOperator object - - deallog.depth_file(0); - Vector b = MInv * u; - deallog.depth_file(3); - deallog << "b: " << b << std::endl; - - test_applies("M * b", M * b); - test_applies("b * M", b * M); - - expr = b; - test_applies("M * b", M * expr); - test_applies("b * M", expr * M); -} diff --git a/tests/lac/linear_operator_09.with_cxx11=on.output b/tests/lac/linear_operator_09.with_cxx11=on.output deleted file mode 100644 index b3dbb71b68..0000000000 --- a/tests/lac/linear_operator_09.with_cxx11=on.output +++ /dev/null @@ -1,69 +0,0 @@ - -DEAL::u: 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:: -DEAL::u + u: 2.000000000 4.000000000 6.000000000 8.000000000 10.00000000 12.00000000 14.00000000 16.00000000 18.00000000 20.00000000 22.00000000 24.00000000 26.00000000 28.00000000 30.00000000 32.00000000 34.00000000 36.00000000 38.00000000 40.00000000 42.00000000 44.00000000 46.00000000 48.00000000 50.00000000 -DEAL:: -DEAL::100. * 1_n + u + u: 102.0000000 104.0000000 106.0000000 108.0000000 110.0000000 112.0000000 114.0000000 116.0000000 118.0000000 120.0000000 122.0000000 124.0000000 126.0000000 128.0000000 130.0000000 132.0000000 134.0000000 136.0000000 138.0000000 140.0000000 142.0000000 144.0000000 146.0000000 148.0000000 150.0000000 -DEAL:: -DEAL::u - u: 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 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:: -DEAL::100. * 1_n + u - u: 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 100.0000000 -DEAL:: -DEAL::3. * u: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + 3. * u: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::u * 3.: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + u * 3.: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::2. * u + u: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + 2. * u + u: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::2. * u - u: 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:: -DEAL::100. * 1_n + 2. * u - u: 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 -DEAL:: -DEAL::u + 2. * u: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + u + 2. * u: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::u - 2. * u: -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:: -DEAL::100. * 1_n + u - 2. * u: 99.00000000 98.00000000 97.00000000 96.00000000 95.00000000 94.00000000 93.00000000 92.00000000 91.00000000 90.00000000 89.00000000 88.00000000 87.00000000 86.00000000 85.00000000 84.00000000 83.00000000 82.00000000 81.00000000 80.00000000 79.00000000 78.00000000 77.00000000 76.00000000 75.00000000 -DEAL:: -DEAL::2. * u + u: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + 2. * u + u: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::2. * u - u: 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:: -DEAL::100. * 1_n + 2. * u - u: 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 -DEAL:: -DEAL::3. * u: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + 3. * u: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::u * 3.: 3.000000000 6.000000000 9.000000000 12.00000000 15.00000000 18.00000000 21.00000000 24.00000000 27.00000000 30.00000000 33.00000000 36.00000000 39.00000000 42.00000000 45.00000000 48.00000000 51.00000000 54.00000000 57.00000000 60.00000000 63.00000000 66.00000000 69.00000000 72.00000000 75.00000000 -DEAL:: -DEAL::100. * 1_n + u * 3.: 103.0000000 106.0000000 109.0000000 112.0000000 115.0000000 118.0000000 121.0000000 124.0000000 127.0000000 130.0000000 133.0000000 136.0000000 139.0000000 142.0000000 145.0000000 148.0000000 151.0000000 154.0000000 157.0000000 160.0000000 163.0000000 166.0000000 169.0000000 172.0000000 175.0000000 -DEAL:: -DEAL::b: 80.16326531 28.24489796 86.53061224 25.79591837 259.4285714 57.14285714 328.0000000 88.00000000 184.0000000 226.6122449 40.48979592 1446.693878 315.7551020 160.0000000 760.0000000 387.7551020 81.63265306 190.8571429 2286.693878 470.0408163 1140.571429 108.0816327 569.9591837 539.1020408 3018.448980 -DEAL:: -DEAL::M * b: 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:: -DEAL::100. * 1_n + M * b: 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 -DEAL:: -DEAL::b * M: 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:: -DEAL::100. * 1_n + b * M: 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 -DEAL:: -DEAL::M * b: 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:: -DEAL::100. * 1_n + M * b: 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 -DEAL:: -DEAL::b * M: 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:: -DEAL::100. * 1_n + b * M: 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 -DEAL:: diff --git a/tests/lac/linear_operator_10.cc b/tests/lac/linear_operator_10.cc deleted file mode 100644 index a52661dfe6..0000000000 --- a/tests/lac/linear_operator_10.cc +++ /dev/null @@ -1,61 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 scaling with a number which might be - -#include "../tests.h" - -#include -#include -#include -#include -#include -#include - -#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); - - // SparseMatrix: - { - SparsityPattern sparsity_pattern (10, 5, 0); - sparsity_pattern.compress(); - - SparseMatrix a (sparsity_pattern); - - auto op_a = 0*linear_operator(a); - - Vector u; - op_a.reinit_domain_vector(u, false); - Vector v; - op_a.reinit_range_vector(v, false); - op_a.vmult(v, u); - op_a.vmult_add(v, u); - op_a.Tvmult(u, v); - op_a.Tvmult_add(u, v); - - deallog << "OK" << std::endl; - } -} - diff --git a/tests/lac/linear_operator_10.with_cxx11=on.output b/tests/lac/linear_operator_10.with_cxx11=on.output deleted file mode 100644 index 0fd8fc12f0..0000000000 --- a/tests/lac/linear_operator_10.with_cxx11=on.output +++ /dev/null @@ -1,2 +0,0 @@ - -DEAL::OK diff --git a/tests/lac/linear_operator_11.cc b/tests/lac/linear_operator_11.cc deleted file mode 100644 index 02c674bd7b..0000000000 --- a/tests/lac/linear_operator_11.cc +++ /dev/null @@ -1,101 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 -#include -#include -#include -#include -#include - -#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 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>(a); - auto triangular_block_op = lower_triangular_operator< BlockVector, BlockVector, BlockSparseMatrix >(a); - - BlockVector u; - op_a.reinit_domain_vector(u, false); - BlockVector 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); - } -} diff --git a/tests/lac/linear_operator_11.with_cxx11=on.output b/tests/lac/linear_operator_11.with_cxx11=on.output deleted file mode 100644 index 1507567775..0000000000 --- a/tests/lac/linear_operator_11.with_cxx11=on.output +++ /dev/null @@ -1,21 +0,0 @@ - -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 diff --git a/tests/lac/linear_operator_12.cc b/tests/lac/linear_operator_12.cc deleted file mode 100644 index 1b6601d624..0000000000 --- a/tests/lac/linear_operator_12.cc +++ /dev/null @@ -1,101 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 -#include -#include -#include -#include -#include - -#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 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>(a); - - auto triangular_block_op = upper_triangular_operator< BlockVector, BlockVector, BlockSparseMatrix >(a); - - BlockVector u; - op_a.reinit_domain_vector(u, false); - BlockVector 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); - } -} diff --git a/tests/lac/linear_operator_12.with_cxx11=on.output b/tests/lac/linear_operator_12.with_cxx11=on.output deleted file mode 100644 index 822b43771b..0000000000 --- a/tests/lac/linear_operator_12.with_cxx11=on.output +++ /dev/null @@ -1,21 +0,0 @@ - -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. diff --git a/tests/lac/linear_operator_13.cc b/tests/lac/linear_operator_13.cc deleted file mode 100644 index 61488e2f89..0000000000 --- a/tests/lac/linear_operator_13.cc +++ /dev/null @@ -1,136 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 -#include -#include -#include -#include -#include - -#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 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>(a); - - auto lower_triangular_block_op = lower_triangular_operator< BlockVector, BlockVector, BlockSparseMatrix >(a); - auto upper_triangular_block_op = upper_triangular_operator< BlockVector, BlockVector, BlockSparseMatrix >(a); - - - BlockVector u1; - op_a.reinit_domain_vector(u1, false); - BlockVector v1; - op_a.reinit_range_vector(v1, false); - BlockVector u2; - op_a.reinit_domain_vector(u2, false); - BlockVector 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); - } -} diff --git a/tests/lac/linear_operator_13.with_cxx11=on.output b/tests/lac/linear_operator_13.with_cxx11=on.output deleted file mode 100644 index 476923c248..0000000000 --- a/tests/lac/linear_operator_13.with_cxx11=on.output +++ /dev/null @@ -1,33 +0,0 @@ - -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 diff --git a/tests/lac/linear_operator_14.cc b/tests/lac/linear_operator_14.cc deleted file mode 100644 index 7a49f4574b..0000000000 --- a/tests/lac/linear_operator_14.cc +++ /dev/null @@ -1,125 +0,0 @@ -// --------------------------------------------------------------------- -// -// 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 -#include -#include -#include -#include -#include - -#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 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 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 >(a); - auto diagonal_inv = linear_operator< BlockVector >(d); - // auto diagonal_inv = block_diagonal_operator(diag); - auto inverse_op_a = block_triangular_inverse< BlockVector, BlockVector, BlockSparseMatrix >(a, diagonal_inv); - - auto identity = inverse_op_a * op_a; - - BlockVector u; - BlockVector 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); - } - } -} diff --git a/tests/lac/linear_operator_14.with_cxx11=on.output b/tests/lac/linear_operator_14.with_cxx11=on.output deleted file mode 100644 index f4633ca2e2..0000000000 --- a/tests/lac/linear_operator_14.with_cxx11=on.output +++ /dev/null @@ -1,40 +0,0 @@ - -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