This file is indexed.

/usr/include/deal.II/lac/block_matrix.h is in libdeal.ii-dev 8.4.2-2+b1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// ---------------------------------------------------------------------
//
// Copyright (C) 2000 - 2015 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------

#ifndef dealii__block_matrix_h
#define dealii__block_matrix_h


#include <deal.II/base/config.h>
#include <deal.II/base/exceptions.h>
#include <deal.II/base/smartpointer.h>
#include <deal.II/lac/block_vector.h>

DEAL_II_NAMESPACE_OPEN

/*! @addtogroup Matrix2
 *@{
 */

/**
 * A matrix with several copies of the same block on the diagonal.
 *
 * This matrix implements an @p m by @p m block matrix. Each diagonal block
 * consists of the same (non-block) matrix, while off-diagonal blocks are
 * void.
 *
 * One special application is a one by one block matrix, allowing to apply the
 * @p vmult of the original matrix (or preconditioner) to a block vector.
 *
 * @deprecated If deal.II was configured with C++11 support, use the
 * LinearOperator class instead, see the module on
 * @ref LAOperators "linear operators"
 * for further details.
 *
 * @see
 * @ref GlossBlockLA "Block (linear algebra)"
 * @author Guido Kanschat, 2000
 */
template <typename MatrixType>
class BlockDiagonalMatrix : public Subscriptor
{
public:
  /**
   * Constructor for an @p n_blocks by @p n_blocks matrix with diagonal blocks
   * @p M.
   */
  BlockDiagonalMatrix (const MatrixType   &M,
                       const unsigned int  n_blocks);

  /**
   * Matrix-vector-multiplication.
   */
  template <typename number1, typename number2>
  void vmult (BlockVector<number1> &dst,
              const BlockVector<number2> &src) const;

  /**
   * Transposed matrix-vector-multiplication.
   */
  template <typename number1, typename number2>
  void Tvmult (BlockVector<number1> &dst,
               const BlockVector<number2> &src) const;
private:
  /**
   * Number of blocks.
   */
  unsigned int num_blocks;

  /**
   * Diagonal entry.
   */
  SmartPointer<const MatrixType,BlockDiagonalMatrix<MatrixType> > matrix;
};

/*@}*/
//---------------------------------------------------------------------------

template <typename MatrixType>
BlockDiagonalMatrix<MatrixType>::BlockDiagonalMatrix (const MatrixType &M,
                                                      const unsigned int num_blocks)
  :
  num_blocks (num_blocks),
  matrix(&M)
{}


template <typename MatrixType>
template <typename number1, typename number2>
void
BlockDiagonalMatrix<MatrixType>::vmult (BlockVector<number1>       &dst,
                                        const BlockVector<number2> &src) const
{
  Assert (dst.n_blocks()==num_blocks,
          ExcDimensionMismatch(dst.n_blocks(),num_blocks));
  Assert (src.n_blocks()==num_blocks,
          ExcDimensionMismatch(src.n_blocks(),num_blocks));

  for (unsigned int i=0; i<num_blocks; ++i)
    matrix->vmult (dst.block(i), src.block(i));
}


template <typename MatrixType>
template <typename number1, typename number2>
void
BlockDiagonalMatrix<MatrixType>::Tvmult (BlockVector<number1>       &dst,
                                         const BlockVector<number2> &src) const
{
  Assert (dst.n_blocks()==num_blocks,
          ExcDimensionMismatch(dst.n_blocks(),num_blocks));
  Assert (src.n_blocks()==num_blocks,
          ExcDimensionMismatch(src.n_blocks(),num_blocks));

  for (unsigned int i=0; i<num_blocks; ++i)
    matrix->Tvmult (dst.block(i), src.block(i));
}


DEAL_II_NAMESPACE_CLOSE

#endif