This file is indexed.

/usr/include/gmsh/MetricBasis.h is in libgmsh-dev 2.8.5+dfsg-1.1+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
// Gmsh - Copyright (C) 1997-2013 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <gmsh@geuz.org>.

#ifndef _METRIC_BASIS_H_
#define _METRIC_BASIS_H_

#include "MElement.h"
#include "JacobianBasis.h"
#include "fullMatrix.h"
#include <fstream>
#include <cmath>

class MetricBasis {
  friend class MetricCoefficient;
  friend class GMSH_AnalyseCurvedMeshPlugin;
private:
  const JacobianBasis *_jacobian;
  const GradientBasis *_gradients;
  const bezierBasis *_bezier;
  static double _tol;
  static int _which;

  int __maxdepth, __numSubdivision, __TotSubdivision;
  std::vector<int> __numSub;
  MElement *__curElem;

  std::fstream file;

  class IneqData {
  public:
    int i, j, k;
    double val;

  public:
    IneqData(double val, int i, int j, int k = -1) : i(i), j(j), k(k), val(val) {}
  };

  class MetricData {
   public:
    fullMatrix<double> *_metcoeffs;
    fullVector<double> *_jaccoeffs;
    double _RminBez;
    int _depth, _num;

   public:
    MetricData(fullMatrix<double> *m, fullVector<double> *j, double r, int d, int num) :
      _metcoeffs(m), _jaccoeffs(j), _RminBez(r), _depth(d), _num(num) {}
    ~MetricData() {
      delete _metcoeffs;
      delete _jaccoeffs;
    }
  };

  std::map<int, std::vector<IneqData> > _ineqJ2, _ineqP3, _ineqA;

public:
  MetricBasis(int elementTag);

  static void setTol(double tol) {_tol = tol;}
  static double getTol() {return _tol;}
  static void setWhich(int which) {_which = which;}

  double getBoundRmin(MElement*, MetricData*&, fullMatrix<double>&);
  double getMinR(MElement*, MetricData*&, int) const;
  bool notStraight(MElement*, double &metric, int order) const;
  static double boundMinR(MElement *el);
  static double sampleR(MElement *el, int order);
  //double getBoundRmin(int, MElement**, double*);
  //static double boundRmin(int, MElement**, double*, bool sameType = false);

  void interpolate(const MElement*, const MetricData*, const double *uvw, double *minmaxQ, bool write = false) const;

  static int metricOrder(int tag);
  void printTotSubdiv(double n) const {
    Msg::Info("SUBDIV %d, %g", __TotSubdivision, __TotSubdivision/2776.);
  }

private:
  void _fillInequalities(int order);
  void _lightenInequalities(int&, int&, int&); //TODO change

  void _computeRmin(const fullMatrix<double>&, const fullVector<double>&,
                    double &RminLag, double &RminBez, int depth, bool debug = false) const;
  void _computeRmax(const fullMatrix<double>&, const fullVector<double>&,
                    double &RmaxLag) const;
  void _computeTermBeta(double &a, double &K, double &dRda,
                        double &term1, double &phip) const;
  void _getMetricData(MElement*, MetricData*&) const;

  double _subdivideForRmin(MetricData*, double RminLag, double tol, int which) const;

  double _minp(const fullMatrix<double>&) const;
  double _minp2(const fullMatrix<double>&) const;
  double _minq(const fullMatrix<double>&) const;
  double _maxp(const fullMatrix<double>&) const;
  double _maxq(const fullMatrix<double>&) const;
  void _minMaxA(const fullMatrix<double>&, double &min, double &max) const;
  void _minJ2P3(const fullMatrix<double>&, const fullVector<double>&, double &min) const;
  void _maxAstKpos(const fullMatrix<double>&, const fullVector<double>&,
                 double minK, double beta, double &maxa) const;
  void _maxAstKneg(const fullMatrix<double>&, const fullVector<double>&,
                 double minK, double beta, double &maxa) const;
  void _maxKstAfast(const fullMatrix<double>&, const fullVector<double>&,
                 double mina, double beta, double &maxK) const;
  void _maxKstAsharp(const fullMatrix<double>&, const fullVector<double>&,
                 double mina, double beta, double &maxK) const;
  void _minMaxJacobianSqr(const fullVector<double>&, double &min, double &max) const;

  double _Rsafe(double a, double K) const {
    const double x = .5 * (K - a*a*a + 3*a);
    const double phi = std::acos(x) / 3;
    return (a + 2*std::cos(phi + 2*M_PI/3)) / (a + 2*std::cos(phi));
  }
  bool _chknumber(double val) const {
#if defined(_MSC_VER)
    return _isnan(val) || !_finite(val);
#else
    return std::isnan(val) || std::isinf(val);
#endif
  }
  bool _chka(double a) const {return _chknumber(a) || a < 1;}
  bool _chkK(double K) const {return _chknumber(K) || K < 0;}
  int _chkaK(double a, double K) const {
    if (_chka(a)) return 1;
    if (_chkK(K)) return 2;
    if (std::abs(K - a*a*a + 3*a) > 2) {
      Msg::Warning("x = %g", .5 * (K - a*a*a + 3*a));
      return 3;
    }
    return 0;
  }
  bool _chkR(double R) const {return _chknumber(R) || R < 0 || R > 1;}
  int _chkaKR(double a, double K, double R) const {
    const int aK = _chkaK(a, K);
    if (aK) return aK;
    if (_chkR(R)) return 4;
    const double myR = _Rsafe(a, K);
    if (std::abs(myR-R) > 1e-10) return 5;
    return 0;
  }

private:
  class gterIneq {
   public:
    bool operator()(const IneqData &id1, const IneqData &id2) const {
      return id1.val > id2.val;
    }
  };
  struct lessMinB {
    bool operator()(const MetricData *md1, const MetricData *md2) const {
      return md1->_RminBez > md2->_RminBez;
    }
  };
};

#endif