This file is indexed.

/usr/share/netgen/libsrc/meshing/hprefinement.hpp is in netgen-headers 4.9.13.dfsg-8build2.

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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
#ifndef FILE_HPREFINEMENT
#define FILE_HPREFINEMENT

/**************************************************************************/
/* File:   hprefinement.hh                                                */
/* Author: Joachim Schoeberl                                              */
/* Date:   27. Oct. 2000                                                  */
/**************************************************************************/

/*
  HP Refinement
*/




enum HPREF_ELEMENT_TYPE {
  HP_NONE=0,

  HP_SEGM = 1,
  HP_SEGM_SINGCORNERL,
  HP_SEGM_SINGCORNERR,
  HP_SEGM_SINGCORNERS,

  HP_TRIG = 10,
  HP_TRIG_SINGCORNER,
  HP_TRIG_SINGCORNER12,
  HP_TRIG_SINGCORNER123,
  HP_TRIG_SINGCORNER123_2D,   // not rotational symmetric
  HP_TRIG_SINGEDGE = 20,
  HP_TRIG_SINGEDGECORNER1,   // E = 100, V = 100
  HP_TRIG_SINGEDGECORNER2,   // E = 100, V = 010
  HP_TRIG_SINGEDGECORNER12,  // E = 100, V = 110
  HP_TRIG_SINGEDGECORNER3,
  HP_TRIG_SINGEDGECORNER13,
  HP_TRIG_SINGEDGECORNER23,
  HP_TRIG_SINGEDGECORNER123,
  HP_TRIG_SINGEDGES = 30,
  HP_TRIG_SINGEDGES2,
  HP_TRIG_SINGEDGES3,
  HP_TRIG_SINGEDGES23,
  HP_TRIG_3SINGEDGES = 40,

  HP_QUAD = 50,
  HP_QUAD_SINGCORNER,
  HP_DUMMY_QUAD_SINGCORNER,
  HP_QUAD_SINGEDGE,
  HP_QUAD_0E_2VA,  // V = 1100
  HP_QUAD_0E_2VB,  // V = 1010
  HP_QUAD_0E_3V,
  HP_QUAD_0E_4V,

  // one edge: marked edge is always edge from vertex 1 to vertex 2 (E = 1000)
  HP_QUAD_1E_1VA,  // vertex on beginning of edge: V = 1000
  HP_QUAD_1E_1VB,  // vertex on end of edge: V = 0100
  HP_QUAD_1E_1VC,  // V = 0010
  HP_QUAD_1E_1VD,  // V = 0001

  HP_QUAD_1E_2VA,  // V = 1100
  HP_QUAD_1E_2VB,  // V = 1010
  HP_QUAD_1E_2VC,  // V = 1001
  HP_QUAD_1E_2VD,  // V = 0110
  HP_QUAD_1E_2VE,  // V = 0101
  HP_QUAD_1E_2VF,  // V = 0011

  HP_QUAD_1E_3VA,  // V = 1110
  HP_QUAD_1E_3VB,  // V = 1101
  HP_QUAD_1E_3VC,  // V = 1011
  HP_QUAD_1E_3VD,  // V = 0111

  HP_QUAD_1E_4V,   // V = 1111


  HP_QUAD_2E,      // E = 1001, V = 1000
  HP_QUAD_2E_1VA,  // E = 1001, V = 1100
  HP_QUAD_2E_1VB,  // E = 1001, V = 1010
  HP_QUAD_2E_1VC,  // E = 1001, V = 1001
  HP_QUAD_2E_2VA,  // E = 1001, V = 1110
  HP_QUAD_2E_2VB,  // E = 1001, V = 1101
  HP_QUAD_2E_2VC,  // E = 1001, V = 1011
  HP_QUAD_2E_3V,   // E = 1001, V = 1111

  HP_QUAD_2EB_0V,   // E = 1010, V = 0000
  HP_QUAD_2EB_1VA,  // E = 1010, V = 1000
  HP_QUAD_2EB_1VB,  // E = 1010, V = 0100
  HP_QUAD_2EB_2VA,  // E = 1010, V = 1100
  HP_QUAD_2EB_2VB,  // E = 1010, V = 1010
  HP_QUAD_2EB_2VC,  // E = 1010, V = 1001
  HP_QUAD_2EB_2VD,  // E = 1010, V = 0101
  HP_QUAD_2EB_3VA,  // E = 1010, V = 1110
  HP_QUAD_2EB_3VB,  // E = 1010, V = 1101

  HP_QUAD_2EB_4V,


  HP_QUAD_3E,      // E = 1101, V = 1100
  HP_QUAD_3E_3VA,  // E = 1101, V = 1110
  HP_QUAD_3E_3VB,  // E = 1101, V = 1101
  HP_QUAD_3E_4V,   // E = 1101, V = 1111

  HP_QUAD_4E,


  HP_TET = 100,     // no singular vertex/edge
  HP_TET_0E_1V,     // V1
  HP_TET_0E_2V,     // V1,2
  HP_TET_0E_3V,     // V1,2,3  
  HP_TET_0E_4V,     // V1,2,3,4
  HP_TET_1E_0V = 200,   // E1-2
  HP_TET_1E_1VA,    // V1
  HP_TET_1E_1VB,    // V3
  HP_TET_1E_2VA,    // V1,2
  HP_TET_1E_2VB,    // V1,3
  HP_TET_1E_2VC,    // V1,4
  HP_TET_1E_2VD,    // V3,4
  HP_TET_1E_3VA,    // V1,2,3
  HP_TET_1E_3VB,    // V1,3,4
  HP_TET_1E_4V,     // V1,2,3,4


  // 2 connected edges, additonally marked Vs
  HP_TET_2EA_0V = 220,    // E1-2, E1-3
  HP_TET_2EA_1VA,   // V2
  HP_TET_2EA_1VB,   // V3
  HP_TET_2EA_1VC,   // V4
  HP_TET_2EA_2VA,   // V2,3
  HP_TET_2EA_2VB,   // V2,4
  HP_TET_2EA_2VC,   // V3,4
  HP_TET_2EA_3V,    // V2,3,4

  // 2 opposite edges
  HP_TET_2EB_0V = 230,    // E1-2, E3-4
  HP_TET_2EB_1V,    // V1
  HP_TET_2EB_2VA,   // V1,2
  HP_TET_2EB_2VB,   // V1,3
  HP_TET_2EB_2VC,   // V1,4
  HP_TET_2EB_3V,    // V1,2,3
  HP_TET_2EB_4V,    // V1,2,3,4

  HP_TET_3EA_0V = 400,  // E1-2, E1-3, E1-4, 3 edges connected
  HP_TET_3EA_1V,        // V2
  HP_TET_3EA_2V,        // V2,3
  HP_TET_3EA_3V,        // V2,3,4

  HP_TET_3EB_0V = 420,  // E1-2, E1-4, E2-3  3 edges chain
  HP_TET_3EB_1V,        // 
  HP_TET_3EB_2V,        // 
  HP_TET_3EC_0V = 430,  // 3 edges chain, alter
  HP_TET_3EC_1V,        // 3 edges chain, alter
  HP_TET_3EC_2V,        // 3 edges chain, alter


  HP_TET_1F_0E_0V = 500,  // 1 singular face
  HP_TET_1F_0E_1VA,       // 1 sing vertex in face (V2)
  HP_TET_1F_0E_1VB,       // 1 sing vertex not in face (V1)
  HP_TET_1F_1EA_0V,       // 1 sing edge not in face
  HP_TET_1F_1EB_0V,       // 1 sing edge in face
  HP_TET_2F_0E_0V = 600,  // 2 singular faces

  HP_PRISM = 1000,
  HP_PRISM_SINGEDGE,
  HP_PRISM_SINGEDGE_V12,
  HP_PRISM_SINGEDGE_H1,
  HP_PRISM_SINGEDGE_H12,

  HP_PRISM_1FA_0E_0V,     // 1 singular trig face
  HP_PRISM_2FA_0E_0V,     // 2 singular trig faces
  HP_PRISM_1FB_0E_0V,     // 1 singular quad face  1-2-4-5

  HP_PRISM_1FB_1EA_0V,     // 1 singular quad face, edge is 1-2
  HP_PRISM_1FA_1E_0V, 
  HP_PRISM_2FA_1E_0V, 
  HP_PRISM_1FA_1FB_0E_0V, 
  HP_PRISM_2FA_1FB_0E_0V,
  HP_PRISM_1FA_1FB_1EA_0V, 
  HP_PRISM_1FA_1FB_1EB_0V, 
  HP_PRISM_2FA_1FB_1EA_0V,
  HP_PRISM_1FB_1EC_0V, 
  HP_PRISM_1FA_1FB_1EC_0V, 
  HP_PRISM_2FA_1FB_1EC_0V,
  HP_PRISM_1FB_2EA_0V, 
  HP_PRISM_1FA_1FB_2EA_0V, 
  HP_PRISM_2FA_1FB_2EA_0V,
  HP_PRISM_1FB_2EB_0V,
  HP_PRISM_1FA_1FB_2EB_0V,  
  HP_PRISM_1FA_1FB_2EC_0V, 
  HP_PRISM_2FA_1FB_2EB_0V, 
  HP_PRISM_1FB_3E_0V, 
  HP_PRISM_1FA_1FB_3E_0V, 
  HP_PRISM_2FA_1FB_3E_0V, 
  HP_PRISM_2FB_0E_0V, 
  HP_PRISM_1FA_2FB_0E_0V, 
  HP_PRISM_2FA_2FB_0E_0V,
  HP_PRISM_2FB_1EC_0V, 
  HP_PRISM_1FA_2FB_1EC_0V,
  HP_PRISM_1FA_2FB_1EB_0V,
  HP_PRISM_2FA_2FB_1EC_0V,
  HP_PRISM_2FB_3E_0V, 
  HP_PRISM_1FA_2FB_3E_0V, 
  HP_PRISM_2FA_2FB_3E_0V, 
  HP_PRISM_1FA_2E_0V, 
  HP_PRISM_2FA_2E_0V,
  HP_PRISM_3E_0V, 
  HP_PRISM_1FA_3E_0V, 
  HP_PRISM_2FA_3E_0V,  
  HP_PRISM_3FB_0V, 
  HP_PRISM_1FA_3FB_0V, 
  HP_PRISM_2FA_3FB_0V,  
  HP_PRISM_3E_4EH,
  
 

  /*  HP_PRISM_1FB_1EA_0V,     // 1 singular quad face, edge is 1-4
  HP_PRISM_1FB_1EB_0V,     // 1 singular quad face, edge is 2-5
  HP_PRISM_2F_0E_0V,      // 2 singular quad faces
  */

  HP_PYRAMID = 2000,
  HP_PYRAMID_0E_1V,
  HP_PYRAMID_EDGES,
  HP_PYRAMID_1FB_0E_1VA,  // 1 trig face, top vertex

  HP_HEX = 3000,
  HP_HEX_0E_1V,
  HP_HEX_1E_1V,
  HP_HEX_1E_0V,
  HP_HEX_3E_0V,
  HP_HEX_1F_0E_0V,
  HP_HEX_1FA_1FB_0E_0V
};



struct HPRef_Struct {
  HPREF_ELEMENT_TYPE geom;
  int (*splitedges)[3];
  int (*splitfaces)[4];
  int (*splitelements)[5];
  HPREF_ELEMENT_TYPE * neweltypes;
  int (*newels)[8];
};




class HPRefElement
{
private:
  void Reset(void);

public:
  HPRefElement (); 
  HPRefElement(Element & el);
  HPRefElement(Element2d & el);
  HPRefElement(Segment & el);	
  HPRefElement(HPRefElement & el);

  void SetType( HPREF_ELEMENT_TYPE t);
  // HPRefElement(HPRefElement & el, HPREF_ELEMENT_TYPE t); 
	       
  /* HPRefElement(HPRefElement & el, HPREF_ELEMENT_TYPE t)
  { 
    type = t; 
    HPRef_Struct * hprs = Get_HPRef_Struct(t);
    for (int i=0; i<np ; i++) 
      {
	pnums[i] = el[i];
	for(int l=0; l<np; l++) param[i][l] = el.param[i][l]; 
      }
    switch(hprs->geom)
      {
      case HP_SEGM: np=2; sing_edge_left=0; sing_edge_right=0; break; 
      case HP_QUAD: np=4; break; 
      case HP_TRIG: np=3; break; 
      case HP_HEX: np=8; break; 
      case HP_PRISM: np=6; break;
      case HP_TET: np=4; break; 
      case HP_PYRAMID: np=5; break; 
      }
    index = el.index; 
    levelx = el.levelx; 
    levely = el.levely; 
    levelz = el.levelz; 
    type = el.type; 
    coarse_elnr = el.coarse_elnr;
    singedge_left = el.singedge_left; 
    singedge_right = el.singedge_left; 
    } */ 
  
  HPREF_ELEMENT_TYPE type;
  PointIndex pnums[8];
  double param[8][3];
  int index;
  int levelx;
  int levely;
  int levelz;
  int np; 
  int coarse_elnr;
  int domin, domout; // he: needed for segment!! in 3d there should be surf1, surf2!!
  // int coarse_hpelnr; 
  PointIndex & operator[](int i) { return(pnums[i]);}
  PointIndex & PNumMod(int i) { return pnums[(i-1) % np]; };
  PointIndex & PNum(int i) {return pnums[(i-1)]; };
  int GetIndex () const { return index; }; 
  double singedge_left, singedge_right; 
  

  //  EdgePointGeomInfo epgeominfo[2];
  
};



extern void HPRefinement (Mesh & mesh, Refinement * ref, int levels, 
			  double fac1=0.125, bool setorders=true, bool ref_level = false);


#endif