This file is indexed.

/usr/include/deal.II/algorithms/newton.h is in libdeal.ii-dev 8.1.0-6ubuntu1.

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
// ---------------------------------------------------------------------
// $Id: newton.h 30036 2013-07-18 16:55:32Z maier $
//
// Copyright (C) 2010 - 2013 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------


#ifndef __deal2__newton_h
#define __deal2__newton_h

#include <deal.II/base/smartpointer.h>
#include <deal.II/lac/solver_control.h>
#include <deal.II/algorithms/operator.h>

DEAL_II_NAMESPACE_OPEN

class ParameterHandler;

namespace Algorithms
{
  /**
   * Operator class performing Newton's iteration with standard step
   * size control and adaptive matrix generation.
   *
   * This class performs a Newton iteration up to convergence
   * determined by #control. If after an update the norm of the residual
   * has become larger, then step size control is activated and the
   * update is subsequently divided by two until the residual actually
   * becomes smaller (or the minimal scaling factor determined by
   * #n_stepsize_iterations is reached).
   *
   * Since assembling matrices, depending on the implementation, tends
   * to be costly, this method applies an adaptive reassembling
   * strategy. Only if the reduction factor for the residual is more
   * than #threshold, the event Algorithms::bad_derivative is submitted to
   * #inverse_derivative. It is up to this object to implement
   * reassembling accordingly.
   *
   * <h3>Contents of the NamedData objects</h3>
   *
   * The only value used by the Newton method is the first vector in the
   * parameter <tt>out</tt> of operator()(). It serves as the start
   * vector of Newton's method and in the end contains the solution. All
   * other vectors of <tt>out</tt> are ignored by Newton's method and
   * its inner Operator objects. All vectors of <tt>in</tt> are forwarded to
   * the inner Operator objects, with additional information added as follows.
   *
   * When calling (*#residual)(), the NamedData <tt>in</tt> given to the
   * Newton iteration is prepended by a vector <tt>"Newton iterate"</tt>,
   * the current value of the Newton iterate, which can be used to
   * evaluate the residual at this point.
   *
   * For the call to (*#inverse_derivative), the vector <tt>"Newton
   * residual"</tt> is inserted before <tt>"Newton iterate"</tt>.
   *
   * @author Guido Kanschat, 2006, 2010
   */
  template <class VECTOR>
  class Newton : public Operator<VECTOR>
  {
  public:
    /**
     * Constructor, receiving the
     * applications computing the
     * residual and solving the
     * linear problem, respectively.
     */
    Newton (Operator<VECTOR> &residual, Operator<VECTOR> &inverse_derivative);

    /**
     * Declare the parameters
     * applicable to Newton's method.
     */
    void declare_parameters (ParameterHandler &param);

    /**
     * Read the parameters.
     */
    void initialize (ParameterHandler &param);

    /**
     * Initialize the pointer
     * data_out for debugging.
     */
    void initialize (OutputOperator<VECTOR> &output);

    /**
     * The actual Newton
     * iteration. The initial value
     * is in <tt>out(0)</tt>, which
     * also contains the result
     * after convergence. Values in
     * <tt>in</tt> are not used by
     * Newton, but will be handed
     * down to the objects
     * #residual and #inverse_derivative.
     */
    virtual void operator() (NamedData<VECTOR *> &out, const NamedData<VECTOR *> &in);

    virtual void notify(const Event &);

    /**
     * Set the maximal residual
     * reduction allowed without
     * triggering assembling in the
     * next step. Return the
     * previous value.
     */
    double threshold(double new_value);

    /**
     * Control object for the
     * Newton iteration.
     */
    ReductionControl control;
  private:
    /**
     * The operator computing the residual.
     */
    SmartPointer<Operator<VECTOR>, Newton<VECTOR> > residual;

    /**
     * The operator applying the
     * inverse derivative to the residual.
     */
    SmartPointer<Operator<VECTOR>, Newton<VECTOR> > inverse_derivative;

    /**
     * The operator handling the output
     * in case the debug_vectors is true.
     * Call the initialize function first.
     */
    SmartPointer<OutputOperator<VECTOR>, Newton<VECTOR> > data_out;

    /**
     * This flag is set by the
     * function assemble(),
     * indicating that the matrix
     * must be assembled anew upon
     * start.
     */
    bool assemble_now;

    /**
     * A flag used to decide how
     * many stepsize iteration
     * should be made. Default is
     * the original value of 21.
     *
     * Enter zero here to turn of
     * stepsize control.
     *
     * @note Controlled by
     * <tt>Stepsize iterations</tt> in
     * parameter file
     */
    unsigned int n_stepsize_iterations;

    /**
     * Threshold for re-assembling matrix.
     *
     * If the quotient of two
     * consecutive residuals is
     * smaller than this threshold,
     * the system matrix is not
     * assembled in this step.
     *
     * @note This parameter should be
     * adjusted to the residual gain
     * of the inner solver.
     *
     * The default values is zero,
     * resulting in reassembling in
     * every Newton step.
     */
    double assemble_threshold;

  public:
    /**
     * Print residual, update and
     * updated solution after each
     * step into file
     * <tt>Newton_NNN</tt>?
     */
    bool debug_vectors;
    /**
     * Write debug output to
     * @p deallog; the higher the
     * number, the more output.
     */
    unsigned int debug;
  };
}

DEAL_II_NAMESPACE_CLOSE

#endif