This file is indexed.

/usr/include/deal.II/meshworker/output.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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
// ---------------------------------------------------------------------
//
// Copyright (C) 2010 - 2015 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------


#ifndef dealii__mesh_worker_output_h
#define dealii__mesh_worker_output_h

#include <deal.II/meshworker/dof_info.h>
#include <deal.II/base/smartpointer.h>
#include <deal.II/base/utilities.h>
#include <deal.II/lac/block_vector.h>
#include <deal.II/base/mg_level_object.h>


DEAL_II_NAMESPACE_OPEN

namespace MeshWorker
{
  namespace Assembler
  {

    /**
     * A class that, instead of assembling into a matrix or vector, outputs
     * the results on a cell to a gnuplot patch.
     *
     * This assembler expects that LocalResults contains quadrature values set
     * with LocalResults::quadrature_value(). When it is initialized with the
     * number of quadrature points in a single (!) space direction and the
     * number of data fields to be displayed, it initializes LocalResults
     * automatically. The number of data fields in local results will be
     * increased by dim in order to accommodate for the coordinates of the
     * data points.
     *
     * While data slots for the space coordinates are allocated automatically,
     * these coordinates are not entered. It is up to the user to enter the
     * coordinates in the first dim data entries at every point. This adds the
     * flexibility to output transformed coordinates or even something
     * completely different.
     *
     * @note In the current implementation, only cell data can be written.
     *
     * @author Guido Kanschat
     * @date 2011, 2012
     */
    class GnuplotPatch
    {
    public:
      /**
       * Constructor.
       */
      GnuplotPatch();

      /**
       * Initialize for writing <i>n</i> data vectors. The number of points is
       * the number of quadrature points in a single direction in a tensor
       * product formula. It must match the number in the actual Quadrature
       * used to create the patches. The total number of data vectors produced
       * is <tt>n+dim</tt> and the first dim should be the space coordinates
       * of the points. Nevertheless, it is up to the user to set these values
       * to whatever is desired.
       */
      void initialize (const unsigned int n_points,
                       const unsigned int n_vectors);

      /**
       * Set the stream #os to which data is written. If no stream is selected
       * with this function, data goes to @p deallog.
       */
      void initialize_stream (std::ostream &stream);

      /**
       * Initialize the local data in the DoFInfo object used later for
       * assembling.
       *
       * The info object refers to a cell if <code>!face</code>, or else to an
       * interior or boundary face.
       */
      template <int dim>
      void initialize_info(DoFInfo<dim> &info, bool face);

      /**
       * Write the patch to the output stream.
       */
      template<int dim>
      void assemble(const DoFInfo<dim> &info);

      /**
       * @warning Not implemented yet
       */
      template<int dim>
      void assemble(const DoFInfo<dim> &info1,
                    const DoFInfo<dim> &info2);

    private:
      /**
       * Write the object T either to the stream #os, if initialize_stream()
       * has been called, or to @p deallog if no pointer has been set.
       */
      template<typename T>
      void write(const T &t) const;

      /**
       * Write an end-of-line marker either to the stream #os, if
       * initialize_stream has been called, or to @p deallog if no pointer has
       * been set.
       */
      void write_endl () const;

      /**
       * The number of output components in each point.
       */
      unsigned int n_vectors;
      /**
       * The number of points in one direction.
       */
      unsigned int n_points;

      /**
       * Stream to which output is to be written. Set by initialize_stream().
       */
      std::ostream *os;
    };

//----------------------------------------------------------------------//

    template <typename T>
    inline void
    GnuplotPatch::write(const T &d) const
    {
      if (os == 0)
        deallog << d;
      else
        (*os) << d;
    }


    inline void
    GnuplotPatch::write_endl() const
    {
      if (os == 0)
        deallog << std::endl;
      else
        (*os) << std::endl;
    }


    inline
    GnuplotPatch::GnuplotPatch()
      :
      os(0)
    {}


    inline void
    GnuplotPatch::initialize (const unsigned int np,
                              const unsigned int nv)
    {
      n_vectors = nv;
      n_points = np;
    }


    inline void
    GnuplotPatch::initialize_stream (std::ostream &stream)
    {
      os = &stream;
    }


    template <int dim>
    inline void
    GnuplotPatch::initialize_info(DoFInfo<dim> &info, bool face)
    {
      if (face)
        info.initialize_quadrature(Utilities::fixed_power<dim-1>(n_points), n_vectors+dim);
      else
        info.initialize_quadrature(Utilities::fixed_power<dim>(n_points), n_vectors+dim);
    }


    template <int dim>
    inline void
    GnuplotPatch::assemble(const DoFInfo<dim> &info)
    {
      const unsigned int np = info.n_quadrature_points();
      const unsigned int nv = info.n_quadrature_values();
      const unsigned int patch_dim = (info.face_number == numbers::invalid_unsigned_int)
                                     ? dim : (dim-1);
      const unsigned int row_length = n_points;
      // If patches are 1D, end the
      // patch after a row, else end
      // it after a square
      const unsigned int row_length2 = (patch_dim==1) ? row_length : (row_length*row_length);

//      AssertDimension(np, Utilities::fixed_power<dim>(n_points));
      AssertDimension(nv, n_vectors+dim);


      for (unsigned int k=0; k<np; ++k)
        {
          if (k % row_length == 0)
            write_endl();
          if (k % row_length2 == 0)
            write_endl();

          for (unsigned int i=0; i<nv; ++i)
            {
              write(info.quadrature_value(k,i));
              write('\t');
            }
          write_endl();
        }
    }


    template <int dim>
    inline void
    GnuplotPatch::assemble(const DoFInfo<dim> &info1, const DoFInfo<dim> &info2)
    {
      assemble(info1);
      assemble(info2);
    }
  }
}

DEAL_II_NAMESPACE_CLOSE

#endif