This file is indexed.

/usr/include/dune/localfunctions/lagrange/pyramidp1/pyramidp1localbasis.hh is in libdune-localfunctions-dev 2.2.1-2.

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
// -*- tab-width: 4; indent-tabs-mode: nil -*-
#ifndef DUNE_PYRAMID_P1_LOCALBASIS_HH
#define DUNE_PYRAMID_P1_LOCALBASIS_HH

#include <dune/common/fmatrix.hh>

#include <dune/localfunctions/common/localbasis.hh>


namespace Dune
{
  /**@ingroup LocalBasisImplementation
	 \brief Linear Lagrange shape functions on the pyramid.

	 Defines the linear shape functions on pyramid.

	 \tparam D Type to represent the field in the domain.
	 \tparam R Type to represent the field in the range.

	 \nosubgrouping
  */
  template<class D, class R>
  class PyramidP1LocalBasis
  {
  public:
	//! \brief export type traits for function signature
		typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
								   Dune::FieldMatrix<R,1,3> > Traits;

    //! \brief number of shape functions
    unsigned int size () const
    {
      return 5;
    }

    //! \brief Evaluate all shape functions
    inline void evaluateFunction (const typename Traits::DomainType& in,      // position
                                  std::vector<typename Traits::RangeType>& out) const     // return value
    { 
      out.resize(5);
      
      if(in[0] > in[1])
          {
    	  	out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[1]);
    	  	out[1] = in[0]*(1-in[1])-in[2]*in[1];
    		out[2] = (1-in[0])*in[1]-in[2]*in[1];
    	  	out[3] = in[0]*in[1]+in[2]*in[1];   	  
          }
      else
          {
    	   	out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[0]);
    	   	out[1] = in[0]*(1-in[1])-in[2]*in[0];
    	   	out[2] = (1-in[0])*in[1]-in[2]*in[0];
    	   	out[3] = in[0]*in[1]+in[2]*in[0];
          }
      
      
      out[4] = in[2];


    }

    //! \brief Evaluate Jacobian of all shape functions
    inline void 
    evaluateJacobian (const typename Traits::DomainType& in,         // position
                      std::vector<typename Traits::JacobianType>& out) const      // return value
    {  
      out.resize(5);
      
      if(in[0] > in[1])
     	{
    	  out[0][0][0] = -1 + in[1];  out[0][0][1] = -1 + in[0] + in[2]; out[0][0][2] = -1 + in[1];  
    	  out[1][0][0] = 1  - in[1];  out[1][0][1] = -in[0] - in[2];     out[1][0][2] = -in[1];             	      
    	  out[2][0][0] = -in[1];  	  out[2][0][1] = 1 - in[0] - in[2];  out[2][0][2] = -in[1]; 
    	  out[3][0][0] = in[1];       out[3][0][1] = in[0]+in[2];        out[3][0][2] = in[1];     
     	}
      else
      	{
    	  out[0][0][0] = -1 + in[1] + in[2]; out[0][0][1] = -1 + in[0];  out[0][0][2] = -1 + in[0];  
    	  out[1][0][0] = 1 - in[1] - in[2];  out[1][0][1] = -in[0];      out[1][0][2] = -in[0];               
    	  out[2][0][0] = -in[1] - in[2];     out[2][0][1] = 1 - in[0];   out[2][0][2] = -in[0]; 
    	  out[3][0][0] = in[1] + in[2];      out[3][0][1] = in[0];       out[3][0][2] = in[0];   
    	  
      	}
      
      out[4][0][0] = 0;   out[4][0][1] = 0;       out[4][0][2] = 1;  
    }

    //! \brief Polynomial order of the shape functions
    unsigned int order () const
    {
      return 1;
    }
  };
}
#endif