/[escript]/trunk/finley/src/ReferenceElements.cpp
ViewVC logotype

Contents of /trunk/finley/src/ReferenceElements.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5148 - (show annotations)
Mon Sep 15 01:25:23 2014 UTC (4 years, 11 months ago) by caltinay
File size: 27162 byte(s)
Merging ripley diagonal storage + CUDA support into trunk.
Options file version has been incremented due to new options
'cuda' and 'nvccflags'.

1
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2014 by University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Open Software License version 3.0
9 * http://www.opensource.org/licenses/osl-3.0.php
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16
17
18 /****************************************************************************
19
20 Finley: Reference elements
21
22 *****************************************************************************/
23
24 #include "ReferenceElements.h"
25 #include "esysUtils/mem.h"
26 #include <cstring>
27 #include <algorithm> // std::max
28
29 namespace finley {
30
31 /// this list has been generated by generateReferenceElementList.py
32 const ReferenceElementInfo ReferenceElement_InfoList[] = {
33 { Point1, "Point1", 1, 1, 1, { 0, 1 }, Point1,
34 { 0 }, PointQuad, Point1Shape, Point1Shape,
35 { 0 },
36 1, { 0 },
37 1, { 0 },
38 { 0 },
39 { -1 } },
40 { Line2, "Line2", 2, 1, 1, { 0, 2 }, Line2,
41 { 0, 1 }, LineQuad, Line2Shape, Line2Shape,
42 { 0, 1 },
43 2, { 0, 1 },
44 2, { 0, 1 },
45 { 1, 0 },
46 { -1 } },
47 { Line3, "Line3", 3, 1, 1, { 0, 3 }, Line2,
48 { 0, 1 }, LineQuad, Line3Shape, Line3Shape,
49 { 0, 1, 2 },
50 3, { 0, 1, 2 },
51 3, { 0, 1, 2 },
52 { 1, 0, 2 },
53 { -1 } },
54 { Line4, "Line4", 4, 1, 1, { 0, 4 }, Line2,
55 { 0, 1 }, LineQuad, Line4Shape, Line4Shape,
56 { 0, 1, 2, 3 },
57 4, { 0, 1, 2, 3 },
58 4, { 0, 1, 2, 3 },
59 { 1, 0, 3, 2 },
60 { -1 } },
61 { Tri3, "Tri3", 3, 1, 1, { 0, 3 }, Tri3,
62 { 0, 1, 2 }, TriQuad, Tri3Shape, Tri3Shape,
63 { 0, 1, 2 },
64 3, { 0, 1, 2 },
65 3, { 0, 1, 2 },
66 { 1, 2, 0 },
67 { 0, 2, 1 } },
68 { Tri6, "Tri6", 6, 1, 1, { 0, 6 }, Tri3,
69 { 0, 1, 2 }, TriQuad, Tri6Shape, Tri6Shape,
70 { 0, 1, 2, 3, 4, 5 },
71 6, { 0, 1, 2, 3, 4, 5 },
72 6, { 0, 1, 2, 3, 4, 5 },
73 { 1, 2, 0, 4, 5, 3 },
74 { 0, 2, 1, 5, 4, 3 } },
75 { Tri9, "Tri9", 9, 1, 1, { 0, 9 }, Tri3,
76 { 0, 1, 2 }, TriQuad, Tri9Shape, Tri9Shape,
77 { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
78 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
79 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
80 { 1, 2, 0, 5, 6, 7, 8, 3, 4 },
81 { 0, 2, 1, 8, 7, 6, 5, 4, 3 } },
82 { Tri10, "Tri10", 10, 1, 1, { 0, 10 }, Tri3,
83 { 0, 1, 2 }, TriQuad, Tri10Shape, Tri10Shape,
84 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
85 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
86 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
87 { 1, 2, 0, 5, 6, 7, 8, 3, 4, 9 },
88 { 0, 2, 1, 8, 7, 6, 5, 4, 3, 9 } },
89 { Rec4, "Rec4", 4, 1, 1, { 0, 4 }, Rec4,
90 { 0, 1, 2, 3 }, RecQuad, Rec4Shape, Rec4Shape,
91 { 0, 1, 2, 3 },
92 4, { 0, 1, 2, 3 },
93 4, { 0, 1, 2, 3 },
94 { 1, 2, 3, 0 },
95 { 0, 3, 2, 1 } },
96 { Rec8, "Rec8", 8, 1, 1, { 0, 8 }, Rec4,
97 { 0, 1, 2, 3 }, RecQuad, Rec8Shape, Rec8Shape,
98 { 0, 1, 2, 3, 4, 5, 6, 7 },
99 8, { 0, 1, 2, 3, 4, 5, 6, 7 },
100 8, { 0, 1, 2, 3, 4, 5, 6, 7 },
101 { 1, 2, 3, 0, 5, 6, 7, 4 },
102 { 0, 3, 2, 1, 7, 6, 5, 4 } },
103 { Rec9, "Rec9", 9, 1, 1, { 0, 9 }, Rec4,
104 { 0, 1, 2, 3 }, RecQuad, Rec9Shape, Rec9Shape,
105 { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
106 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
107 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
108 { 1, 2, 3, 0, 5, 6, 7, 4, 8 },
109 { 0, 3, 2, 1, 7, 6, 5, 4, 8 } },
110 { Rec12, "Rec12", 12, 1, 1, { 0, 12 }, Rec4,
111 { 0, 1, 2, 3 }, RecQuad, Rec12Shape, Rec12Shape,
112 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
113 12, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
114 12, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
115 { 1, 2, 3, 0, 6, 7, 8, 9, 10, 11, 4, 5 },
116 { 0, 3, 2, 1, 11, 10, 9, 8, 7, 6, 5, 4 } },
117 { Rec16, "Rec16", 16, 1, 1, { 0, 16 }, Rec4,
118 { 0, 1, 2, 3 }, RecQuad, Rec16Shape, Rec16Shape,
119 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
120 16, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
121 16, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
122 { 1, 2, 3, 0, 6, 7, 8, 9, 10, 11, 4, 5, 13, 14, 15, 12 },
123 { 0, 3, 2, 1, 11, 10, 9, 8, 7, 6, 5, 4, 12, 15, 14, 13 } },
124 { Tet4, "Tet4", 4, 1, 1, { 0, 4 }, Tet4,
125 { 0, 1, 2, 3 }, TetQuad, Tet4Shape, Tet4Shape,
126 { 0, 1, 2, 3 },
127 4, { 0, 1, 2, 3 },
128 4, { 0, 1, 2, 3 },
129 { -1 },
130 { -1 } },
131 { Tet10, "Tet10", 10, 1, 1, { 0, 10 }, Tet4,
132 { 0, 1, 2, 3 }, TetQuad, Tet10Shape, Tet10Shape,
133 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
134 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
135 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
136 { -1 },
137 { -1 } },
138 { Tet16, "Tet16", 16, 1, 1, { 0, 16 }, Tet4,
139 { 0, 1, 2, 3 }, TetQuad, Tet16Shape, Tet16Shape,
140 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
141 16, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
142 16, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
143 { -1 },
144 { -1 } },
145 { Hex8, "Hex8", 8, 1, 1, { 0, 8 }, Hex8,
146 { 0, 1, 2, 3, 4, 5, 6, 7 }, HexQuad, Hex8Shape, Hex8Shape,
147 { 0, 1, 2, 3, 4, 5, 6, 7 },
148 8, { 0, 1, 2, 3, 4, 5, 6, 7 },
149 8, { 0, 1, 2, 3, 4, 5, 6, 7 },
150 { -1 },
151 { -1 } },
152 { Hex20, "Hex20", 20, 1, 1, { 0, 20 }, Hex8,
153 { 0, 1, 2, 3, 4, 5, 6, 7 }, HexQuad, Hex20Shape, Hex20Shape,
154 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
155 20, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
156 20, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
157 { -1 },
158 { -1 } },
159 { Hex27, "Hex27", 27, 1, 1, { 0, 27 }, Hex8,
160 { 0, 1, 2, 3, 4, 5, 6, 7 }, HexQuad, Hex27Shape, Hex27Shape,
161 { 0, 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 },
162 27, { 0, 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 },
163 27, { 0, 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 },
164 { -1 },
165 { -1 } },
166 { Hex32, "Hex32", 32, 1, 1, { 0, 32 }, Hex8,
167 { 0, 1, 2, 3, 4, 5, 6, 7 }, HexQuad, Hex32Shape, Hex32Shape,
168 { 0, 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 },
169 32, { 0, 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 },
170 32, { 0, 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 },
171 { -1 },
172 { -1 } },
173 { Line2Face, "Line2Face", 2, 1, 1, { 0, 2 }, Line2Face,
174 { 0, 1 }, PointQuad, Line2Shape, Line2Shape,
175 { 0, 1 },
176 1, { 0 },
177 1, { 0 },
178 { 0, 1, 2 },
179 { -1 } },
180 { Line3Face, "Line3Face", 3, 1, 1, { 0, 3 }, Line2Face,
181 { 0, 1 }, PointQuad, Line3Shape, Line3Shape,
182 { 0, 1, 2 },
183 1, { 0 },
184 1, { 0 },
185 { 0, 1, 2 },
186 { -1 } },
187 { Line4Face, "Line4Face", 4, 1, 1, { 0, 4 }, Line2Face,
188 { 0, 1 }, PointQuad, Line4Shape, Line4Shape,
189 { 0, 1, 2, 3 },
190 1, { 0 },
191 1, { 0 },
192 { 0, 1, 2 },
193 { -1 } },
194 { Tri3Face, "Tri3Face", 3, 1, 1, { 0, 3 }, Tri3Face,
195 { 0, 1, 2 }, LineQuad, Tri3Shape, Tri3Shape,
196 { 0, 1, 2 },
197 2, { 0, 1 },
198 2, { 0, 1 },
199 { 1, 0, 2 },
200 { -1 } },
201 { Tri6Face, "Tri6Face", 6, 1, 1, { 0, 6 }, Tri3Face,
202 { 0, 1, 2 }, LineQuad, Tri6Shape, Tri6Shape,
203 { 0, 1, 2, 3, 4, 5 },
204 3, { 0, 1, 3 },
205 3, { 0, 1, 3 },
206 { 1, 0, 2, 3, 5, 4 },
207 { -1 } },
208 { Tri9Face, "Tri9Face", 9, 1, 1, { 0, 9 }, Tri3Face,
209 { 0, 1, 2 }, LineQuad, Tri9Shape, Tri9Shape,
210 { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
211 4, { 0, 1, 3, 4 },
212 4, { 0, 1, 3, 4 },
213 { 1, 0, 2, 4, 3, 7, 8, 6, 5 },
214 { -1 } },
215 { Tri10Face, "Tri10Face", 10, 1, 1, { 0, 10 }, Tri3Face,
216 { 0, 1, 2 }, LineQuad, Tri10Shape, Tri10Shape,
217 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
218 4, { 0, 1, 3, 4 },
219 4, { 0, 1, 3, 4 },
220 { 1, 0, 2, 4, 3, 7, 8, 6, 5, 9 },
221 { -1 } },
222 { Rec4Face, "Rec4Face", 4, 1, 1, { 0, 4 }, Rec4Face,
223 { 0, 1, 2, 3 }, LineQuad, Rec4Shape, Rec4Shape,
224 { 0, 1, 2, 3 },
225 2, { 0, 1 },
226 2, { 0, 1 },
227 { 1, 0, 3, 2 },
228 { -1 } },
229 { Rec8Face, "Rec8Face", 8, 1, 1, { 0, 8 }, Rec4Face,
230 { 0, 1, 2, 3 }, LineQuad, Rec8Shape, Rec8Shape,
231 { 0, 1, 2, 3, 4, 5, 6, 7 },
232 3, { 0, 1, 4 },
233 3, { 0, 1, 4 },
234 { 1, 0, 3, 2, 4, 7, 6, 5 },
235 { -1 } },
236 { Rec9Face, "Rec9Face", 9, 1, 1, { 0, 9 }, Rec4Face,
237 { 0, 1, 2, 3 }, LineQuad, Rec9Shape, Rec9Shape,
238 { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
239 3, { 0, 1, 4 },
240 3, { 0, 1, 4 },
241 { 1, 0, 3, 2, 4, 7, 6, 5, 8 },
242 { -1 } },
243 { Rec12Face, "Rec12Face", 12, 1, 1, { 0, 12 }, Rec4Face,
244 { 0, 1, 2, 3 }, LineQuad, Rec12Shape, Rec12Shape,
245 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
246 4, { 0, 1, 4, 5 },
247 4, { 0, 1, 4, 5 },
248 { 1, 0, 3, 2, 5, 4, 11, 10, 9, 8, 7, 6 },
249 { -1 } },
250 { Rec16Face, "Rec16Face", 16, 1, 1, { 0, 16 }, Rec4Face,
251 { 0, 1, 2, 3 }, LineQuad, Rec16Shape, Rec16Shape,
252 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
253 4, { 0, 1, 4, 5 },
254 4, { 0, 1, 4, 5 },
255 { 1, 0, 3, 2, 5, 4, 11, 10, 9, 8, 7, 6, 13, 12, 15, 14 },
256 { -1 } },
257 { Tet4Face, "Tet4Face", 4, 1, 1, { 0, 4 }, Tet4Face,
258 { 0, 1, 2, 3 }, TriQuad, Tet4Shape, Tet4Shape,
259 { 0, 1, 2, 3 },
260 3, { 0, 1, 2 },
261 4, { 0, 1, 2, 3 },
262 { 1, 2, 0, 3 },
263 { 0, 2, 1, 3 } },
264 { Tet10Face, "Tet10Face", 10, 1, 1, { 0, 10 }, Tet4Face,
265 { 0, 1, 2, 3 }, TriQuad, Tet10Shape, Tet10Shape,
266 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
267 6, { 0, 1, 2, 4, 5, 6 },
268 6, { 0, 1, 2, 4, 5, 6 },
269 { 1, 2, 0, 3, 5, 6, 4, 8, 9, 7 },
270 { 0, 2, 1, 3, 6, 7, 9, 8 } },
271 { Tet16Face, "Tet16Face", 16, 1, 1, { 0, 16 }, Tet4Face,
272 { 0, 1, 2, 3 }, TriQuad, Tet16Shape, Tet16Shape,
273 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
274 9, { 0, 1, 2, 4, 5, 6, 7, 8, 9 },
275 9, { 0, 1, 2, 4, 5, 6, 7, 8, 9 },
276 { 1, 2, 0, 3, 6, 7, 8, 9, 4, 5, 11, 12, 10, 14, 15, 13 },
277 { 0, 2, 1, 3, 9, 8, 7, 6, 5, 4, 9, 8, 7, 6, 10, 12, 11, 13, 15, 14 } },
278 { Hex8Face, "Hex8Face", 8, 1, 1, { 0, 8 }, Hex8Face,
279 { 0, 1, 2, 3, 4, 5, 6, 7 }, RecQuad, Hex8Shape, Hex8Shape,
280 { 0, 1, 2, 3, 4, 5, 6, 7 },
281 4, { 0, 1, 2, 3 },
282 4, { 0, 1, 2, 3 },
283 { 1, 2, 3, 0, 5, 6, 7, 4 },
284 { 0, 3, 2, 1, 4, 7, 6, 5 } },
285 { Hex20Face, "Hex20Face", 20, 1, 1, { 0, 20 }, Hex8Face,
286 { 0, 1, 2, 3, 4, 5, 6, 7 }, RecQuad, Hex20Shape, Hex20Shape,
287 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
288 8, { 0, 1, 2, 3, 8, 9, 10, 11 },
289 8, { 0, 1, 2, 3, 8, 9, 10, 11 },
290 { 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12, 17, 18, 19, 16 },
291 { 0, 3, 2, 1, 4, 7, 6, 5, 11, 10, 9, 8, 12, 15, 14, 13, 19, 18, 17, 16 } },
292 { Hex27Face, "Hex27Face", 27, 1, 1, { 0, 27 }, Hex8Face,
293 { 0, 1, 2, 3, 4, 5, 6, 7 }, RecQuad, Hex27Shape, Hex27Shape,
294 { 0, 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 },
295 9, { 0, 1, 2, 3, 8, 9, 10, 11, 20 },
296 9, { 0, 1, 2, 3, 8, 9, 10, 11, 20 },
297 { 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12, 17, 18, 19, 16, 20, 22, 23, 24, 22, 25, 26 },
298 { 0, 3, 2, 1, 4, 7, 6, 5, 11, 10, 9, 8, 12, 15, 14, 13, 19, 18, 17, 16, 20, 24, 23, 22, 21, 25, 26 } },
299 { Hex32Face, "Hex32Face", 32, 1, 1, { 0, 32 }, Hex8Face,
300 { 0, 1, 2, 3, 4, 5, 6, 7 }, RecQuad, Hex32Shape, Hex32Shape,
301 { 0, 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 },
302 12, { 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 },
303 12, { 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 },
304 { 1, 2, 3, 0, 5, 6, 7, 4, 10, 11, 12, 13, 14, 15, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20, 26, 27, 28, 29, 30, 31, 34, 25 },
305 { 0, 3, 2, 1, 4, 7, 6, 5, 15, 14, 13, 12, 11, 10, 9, 8, 16, 19, 18, 17, 20, 23, 22, 21, 31, 30, 29, 28, 27, 26, 25, 24 } },
306 { Point1_Contact, "Point1_Contact", 2, 1, 2, { 0, 1, 2 }, Point1_Contact,
307 { 0, 1 }, PointQuad, Point1Shape, Point1Shape,
308 { 0, 1 },
309 1, { 0 },
310 -1, { -1 },
311 { -1 },
312 { -1 } },
313 { Line2_Contact, "Line2_Contact", 4, 1, 2, { 0, 2, 4 }, Line2_Contact,
314 { 0, 1, 2, 3 }, LineQuad, Line2Shape, Line2Shape,
315 { 0, 1, 2, 3 },
316 2, { 0, 1 },
317 -1, { -1 },
318 { -1 },
319 { -1 } },
320 { Line3_Contact, "Line3_Contact", 6, 1, 2, { 0, 3, 6 }, Line2_Contact,
321 { 0, 1, 3, 4 }, LineQuad, Line3Shape, Line3Shape,
322 { 0, 1, 2, 3, 4, 5 },
323 3, { 0, 1, 2 },
324 -1, { -1 },
325 { -1 },
326 { -1 } },
327 { Line4_Contact, "Line4_Contact", 8, 1, 2, { 0, 4, 8 }, Line2_Contact,
328 { 0, 1, 4, 5 }, LineQuad, Line4Shape, Line4Shape,
329 { 0, 1, 2, 3, 4, 5, 6, 7 },
330 4, { 0, 1, 2, 3 },
331 -1, { -1 },
332 { -1 },
333 { -1 } },
334 { Tri3_Contact, "Tri3_Contact", 6, 1, 2, { 0, 3, 6 }, Tri3_Contact,
335 { 0, 1, 2, 3, 4, 5 }, TriQuad, Tri3Shape, Tri3Shape,
336 { 0, 1, 2, 3, 4, 5 },
337 3, { 0, 1, 2 },
338 -1, { -1 },
339 { -1 },
340 { -1 } },
341 { Tri6_Contact, "Tri6_Contact", 12, 1, 2, { 0, 6, 12 }, Tri3_Contact,
342 { 0, 1, 2, 6, 7, 8 }, TriQuad, Tri6Shape, Tri6Shape,
343 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
344 6, { 0, 1, 2, 3, 4, 5 },
345 -1, { -1 },
346 { -1 },
347 { -1 } },
348 { Tri9_Contact, "Tri9_Contact", 18, 1, 2, { 0, 9, 18 }, Tri3_Contact,
349 { 0, 1, 2, 9, 10, 11 }, TriQuad, Tri9Shape, Tri9Shape,
350 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 },
351 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
352 -1, { -1 },
353 { -1 },
354 { -1 } },
355 { Tri10_Contact, "Tri10_Contact", 20, 1, 2, { 0, 10, 20 }, Tri3_Contact,
356 { 0, 1, 2, 10, 11, 12 }, TriQuad, Tri10Shape, Tri10Shape,
357 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
358 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
359 -1, { -1 },
360 { -1 },
361 { -1 } },
362 { Rec4_Contact, "Rec4_Contact", 8, 1, 2, { 0, 4, 8 }, Rec4_Contact,
363 { 0, 1, 2, 3, 4, 5, 6, 7 }, RecQuad, Rec4Shape, Rec4Shape,
364 { 0, 1, 2, 3, 4, 5, 6, 7 },
365 4, { 0, 1, 2, 3 },
366 -1, { -1 },
367 { -1 },
368 { -1 } },
369 { Rec8_Contact, "Rec8_Contact", 16, 1, 2, { 0, 8, 16 }, Rec4_Contact,
370 { 0, 1, 2, 3, 8, 9, 10, 11 }, RecQuad, Rec8Shape, Rec8Shape,
371 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
372 8, { 0, 1, 2, 3, 4, 5, 6, 7 },
373 -1, { -1 },
374 { -1 },
375 { -1 } },
376 { Rec9_Contact, "Rec9_Contact", 18, 1, 2, { 0, 9, 18 }, Rec4_Contact,
377 { 0, 1, 2, 3, 9, 10, 11, 12 }, RecQuad, Rec9Shape, Rec9Shape,
378 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 },
379 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
380 -1, { -1 },
381 { -1 },
382 { -1 } },
383 { Rec12_Contact, "Rec12_Contact", 24, 1, 2, { 0, 12, 24 }, Rec4_Contact,
384 { 0, 1, 2, 3, 12, 13, 14, 15 }, RecQuad, Rec12Shape, Rec12Shape,
385 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 },
386 12, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
387 -1, { -1 },
388 { -1 },
389 { -1 } },
390 { Rec16_Contact, "Rec16_Contact", 32, 1, 2, { 0, 16, 32 }, Rec4_Contact,
391 { 0, 1, 2, 3, 16, 17, 18, 19 }, RecQuad, Rec16Shape, Rec16Shape,
392 { 0, 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 },
393 16, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
394 -1, { -1 },
395 { -1 },
396 { -1 } },
397 { Line2Face_Contact, "Line2Face_Contact", 4, 1, 2, { 0, 2, 4 }, Line2Face_Contact,
398 { 0, 1, 2, 3 }, PointQuad, Line2Shape, Line2Shape,
399 { 0, 1, 2, 3 },
400 1, { 0 },
401 -1, { -1 },
402 { -1 },
403 { -1 } },
404 { Line3Face_Contact, "Line3Face_Contact", 6, 1, 2, { 0, 3, 6 }, Line2Face_Contact,
405 { 0, 1, 3, 4 }, PointQuad, Line3Shape, Line3Shape,
406 { 0, 1, 2, 3, 4, 5 },
407 1, { 0 },
408 -1, { -1 },
409 { -1 },
410 { -1 } },
411 { Line4Face_Contact, "Line4Face_Contact", 8, 1, 2, { 0, 4, 8 }, Line2Face_Contact,
412 { 0, 1, 4, 5 }, PointQuad, Line4Shape, Line4Shape,
413 { 0, 1, 2, 3, 4, 5, 6, 7 },
414 1, { 0 },
415 -1, { -1 },
416 { -1 },
417 { -1 } },
418 { Tri3Face_Contact, "Tri3Face_Contact", 6, 1, 2, { 0, 3, 6 }, Tri3Face_Contact,
419 { 0, 1, 2, 3, 4, 5 }, LineQuad, Tri3Shape, Tri3Shape,
420 { 0, 1, 2, 3, 4, 5 },
421 2, { 0, 1 },
422 -1, { -1 },
423 { -1 },
424 { -1 } },
425 { Tri6Face_Contact, "Tri6Face_Contact", 12, 1, 2, { 0, 6, 12 }, Tri3Face_Contact,
426 { 0, 1, 2, 6, 7, 8 }, LineQuad, Tri6Shape, Tri6Shape,
427 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
428 3, { 0, 1, 3 },
429 -1, { -1 },
430 { -1 },
431 { -1 } },
432 { Tri9Face_Contact, "Tri9Face_Contact", 18, 1, 2, { 0, 9, 18 }, Tri3Face_Contact,
433 { 0, 1, 2, 9, 10, 11 }, LineQuad, Tri9Shape, Tri9Shape,
434 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 },
435 4, { 0, 1, 3, 4 },
436 -1, { -1 },
437 { -1 },
438 { -1 } },
439 { Tri10Face_Contact, "Tri10Face_Contact", 20, 1, 2, { 0, 10, 20 }, Tri3Face_Contact,
440 { 0, 1, 2, 10, 11, 12 }, LineQuad, Tri10Shape, Tri10Shape,
441 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
442 4, { 0, 1, 3, 4 },
443 -1, { -1 },
444 { -1 },
445 { -1 } },
446 { Rec4Face_Contact, "Rec4Face_Contact", 8, 1, 2, { 0, 4, 8 }, Rec4Face_Contact,
447 { 0, 1, 2, 3, 4, 5, 6, 7 }, LineQuad, Rec4Shape, Rec4Shape,
448 { 0, 1, 2, 3, 4, 5, 6, 7 },
449 2, { 0, 1 },
450 -1, { -1 },
451 { -1 },
452 { -1 } },
453 { Rec8Face_Contact, "Rec8Face_Contact", 16, 1, 2, { 0, 8, 16 }, Rec4Face_Contact,
454 { 0, 1, 2, 3, 8, 9, 10, 11 }, LineQuad, Rec8Shape, Rec8Shape,
455 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
456 3, { 0, 1, 4 },
457 -1, { -1 },
458 { -1 },
459 { -1 } },
460 { Rec9Face_Contact, "Rec9Face_Contact", 18, 1, 2, { 0, 9, 18 }, Rec4Face_Contact,
461 { 0, 1, 2, 3, 9, 10, 11, 12 }, LineQuad, Rec9Shape, Rec9Shape,
462 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 },
463 3, { 0, 1, 4 },
464 -1, { -1 },
465 { -1 },
466 { -1 } },
467 { Rec12Face_Contact, "Rec12Face_Contact", 24, 1, 2, { 0, 12, 24 }, Rec4Face_Contact,
468 { 0, 1, 2, 3, 12, 13, 14, 15 }, LineQuad, Rec12Shape, Rec12Shape,
469 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 },
470 4, { 0, 1, 4, 5 },
471 -1, { -1 },
472 { -1 },
473 { -1 } },
474 { Rec16Face_Contact, "Rec16Face_Contact", 32, 1, 2, { 0, 16, 32 }, Rec4Face_Contact,
475 { 0, 1, 2, 3, 16, 17, 18, 19 }, LineQuad, Rec16Shape, Rec16Shape,
476 { 0, 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 },
477 4, { 0, 1, 4, 5 },
478 -1, { -1 },
479 { -1 },
480 { -1 } },
481 { Tet4Face_Contact, "Tet4Face_Contact", 8, 1, 2, { 0, 4, 8 }, Tet4Face_Contact,
482 { 0, 1, 2, 3, 4, 5, 6, 7 }, TriQuad, Tet4Shape, Tet4Shape,
483 { 0, 1, 2, 3, 4, 5, 6, 7 },
484 3, { 0, 1, 2 },
485 -1, { -1 },
486 { -1 },
487 { -1 } },
488 { Tet10Face_Contact, "Tet10Face_Contact", 20, 1, 2, { 0, 10, 20 }, Tet4Face_Contact,
489 { 0, 1, 2, 3, 10, 11, 12, 13 }, TriQuad, Tet10Shape, Tet10Shape,
490 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
491 6, { 0, 1, 2, 4, 5, 6 },
492 -1, { -1 },
493 { -1 },
494 { -1 } },
495 { Tet16Face_Contact, "Tet16Face_Contact", 32, 1, 2, { 0, 16, 32 }, Tet4Face_Contact,
496 { 0, 1, 2, 3, 16, 17, 18, 19 }, TriQuad, Tet16Shape, Tet16Shape,
497 { 0, 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 },
498 9, { 0, 1, 2, 4, 5, 6, 7, 8, 9 },
499 -1, { -1 },
500 { -1 },
501 { -1 } },
502 { Hex8Face_Contact, "Hex8Face_Contact", 16, 1, 2, { 0, 8, 16 }, Hex8Face_Contact,
503 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, RecQuad, Hex8Shape, Hex8Shape,
504 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
505 4, { 0, 1, 2, 3 },
506 -1, { -1 },
507 { -1 },
508 { -1 } },
509 { Hex20Face_Contact, "Hex20Face_Contact", 40, 1, 2, { 0, 20, 40 }, Hex8Face_Contact,
510 { 0, 1, 2, 3, 4, 5, 6, 7, 20, 21, 22, 23, 24, 25, 26, 27 }, RecQuad, Hex20Shape, Hex20Shape,
511 { 0, 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 },
512 8, { 0, 1, 2, 3, 8, 9, 10, 11 },
513 -1, { -1 },
514 { -1 },
515 { -1 } },
516 { Hex27Face_Contact, "Hex27Face_Contact", 54, 1, 2, { 0, 27, 54 }, Hex8Face_Contact,
517 { 0, 1, 2, 3, 4, 5, 6, 7, 27, 28, 29, 30, 31, 32, 33, 34 }, RecQuad, Hex27Shape, Hex27Shape,
518 { 0, 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 },
519 9, { 0, 1, 2, 3, 8, 9, 10, 11, 20 },
520 -1, { -1 },
521 { -1 },
522 { -1 } },
523 { Hex32Face_Contact, "Hex32Face_Contact", 64, 1, 2, { 0, 32, 64 }, Hex8Face_Contact,
524 { 0, 1, 2, 3, 4, 5, 6, 7, 32, 33, 34, 35, 36, 37, 38, 39 }, RecQuad, Hex32Shape, Hex32Shape,
525 { 0, 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 },
526 12, { 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 },
527 -1, { -1 },
528 { -1 },
529 { -1 } },
530 { Line3Macro, "Line3Macro", 3, 2, 1, { 0, 3 }, Line2,
531 { 0, 1 }, LineQuad, Line3Shape, Line2Shape,
532 { 0, 2, 2, 1 },
533 3, { 0, 1, 2 },
534 3, { 0, 1, 2 },
535 { 1, 0, 2 },
536 { -1 } },
537 { Tri6Macro, "Tri6Macro", 6, 4, 1, { 0, 6 }, Tri3,
538 { 0, 1, 2 }, TriQuad, Tri6Shape, Tri3Shape,
539 { 0, 3, 5, 5, 4, 2, 3, 1, 4, 4, 5, 3},
540 6, { 0, 1, 2, 3, 4, 5 },
541 6, { 0, 1, 2, 3, 4, 5 },
542 { 1, 2, 0, 4, 5, 3 },
543 { 0, 2, 1, 5, 4, 3 } },
544 { Rec9Macro, "Rec9Macro", 9, 4, 1, { 0, 9 }, Rec4,
545 { 0, 1, 2, 3 }, RecQuad, Rec9Shape, Rec4Shape,
546 { 0, 4, 8, 7, 7, 8, 6, 3, 4, 1, 5, 8, 8, 5, 2, 6 },
547 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
548 9, { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
549 { 1, 2, 3, 0, 5, 6, 7, 4, 8 },
550 { 0, 3, 2, 1, 7, 6, 5, 4, 8 } },
551 { Tet10Macro, "Tet10Macro", 10, 8, 1, { 0, 10 }, Tet4,
552 { 0, 1, 2, 3 }, TetQuad, Tet10Shape, Tet4Shape,
553 { 0, 4, 6, 7, 4, 1, 5, 8, 6, 5, 2, 9, 7, 8, 9, 3, 4, 5, 6, 8, 5, 9, 8, 6, 9, 7, 6, 8, 7, 4, 6, 8 },
554 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
555 10, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
556 { -1 },
557 { -1 } },
558 { Hex27Macro, "Hex27Macro", 27, 8, 1, { 0, 27 }, Hex8,
559 { 0, 1, 2, 3, 4, 5, 6, 7 }, HexQuad, Hex27Shape, Hex8Shape,
560 { 0, 8, 20, 11, 12, 21, 26, 24, 8, 1, 9, 20, 21, 13, 22, 26, 11, 20, 10, 3, 24, 26, 23, 15, 20, 9, 2, 10, 26, 22, 14, 23, 12, 21, 26, 24, 4, 16, 25, 19, 21, 13, 22, 26, 16, 5, 17, 25, 24, 26, 23, 15, 19, 25, 18, 7, 26, 22, 14, 23, 25, 17, 6, 18 },
561 27, { 0, 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 },
562 27, { 0, 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 },
563 { -1 },
564 { -1 } },
565 { NoRef, "noElement", 0, 0, 0, { 0 }, NoRef,
566 { 0 }, NoQuad, NoShape, NoShape,
567 { 0 },
568 -1, { 0 },
569 -1, { 0 },
570 { 0 },
571 { 0 } }
572 };
573
574
575 /// creates a ReferenceElement of type id and a given integration order
576 ReferenceElement::ReferenceElement(ElementTypeId id, int order) :
577 integrationOrder(-1),
578 DBasisFunctionDv(NULL),
579 DBasisFunctionDvShared(true)
580
581 {
582 Type = getInfo(id);
583 if (!Type) {
584 setError(VALUE_ERROR, "ReferenceElement: unable to identify element type.");
585 return;
586 }
587 LinearType = getInfo(Type->LinearTypeId);
588 if (!LinearType) {
589 setError(VALUE_ERROR, "ReferenceElement: unable to identify linear element type.");
590 return;
591 }
592
593 const QuadInfo* quadscheme=QuadInfo_getInfo(Type->Quadrature);
594 const ShapeFunctionInfo* parametrization=ShapeFunction::getInfo(Type->Parametrization);
595 const ShapeFunctionInfo* basisfunction=ShapeFunction::getInfo(Type->BasisFunctions);
596 const ShapeFunctionInfo* linearbasisfunction=ShapeFunction::getInfo(ReferenceElement_InfoList[Type->LinearTypeId].BasisFunctions);
597 const int nsub = Type->numSubElements;
598
599 // set up the basic integration scheme.
600 // Note that quadscheme->numDim is not necessarily the dimension of the
601 // element
602 if (order < 0)
603 order=std::max(2*basisfunction->numOrder, 0);
604
605 integrationOrder=order;
606 numLocalDim=quadscheme->numDim;
607 numNodes=Type->numNodes;
608 numLinearNodes=LinearType->numNodes;
609
610 const int numQuadNodes=quadscheme->getNumQuadNodes(order);
611 std::vector<double> quadNodes(numQuadNodes*quadscheme->numDim*nsub);
612 std::vector<double> quadWeights(numQuadNodes*nsub);
613
614 quadscheme->getQuadNodes(numQuadNodes, quadNodes, quadWeights);
615
616 // Set the basis functions on the quadrature points.
617 // Note: ShapeFunction constructor will introduce 0 if the dimensions of
618 // the quadrature scheme and the dimensions of the element don't match.
619 // Before we can set the shape function for the parametrization the
620 // quadrature scheme needs to be replicated:
621 if (nsub > 1) {
622 DBasisFunctionDv=new double[numQuadNodes*nsub*(basisfunction->numShapes) * (basisfunction->numDim)];
623 DBasisFunctionDvShared=false;
624 BasisFunctions.reset(new ShapeFunction(basisfunction->TypeId, quadscheme->numDim, numQuadNodes, quadNodes, quadWeights));
625 std::vector<double> quadNodes2(numQuadNodes*quadscheme->numDim*nsub);
626 std::vector<double> quadWeights2(numQuadNodes*nsub);
627 int numQuadNodes2=quadscheme->getMacro(nsub,
628 BasisFunctions->numQuadNodes,
629 &BasisFunctions->QuadNodes[0],
630 &BasisFunctions->QuadWeights[0],
631 BasisFunctions->Type->numShapes,
632 &BasisFunctions->dSdv[0],
633 numQuadNodes*nsub, &quadNodes2[0], &quadWeights2[0],
634 DBasisFunctionDv);
635 if (noError()) {
636 Parametrization.reset(new ShapeFunction(parametrization->TypeId, quadscheme->numDim, numQuadNodes2, quadNodes2, quadWeights2));
637 LinearBasisFunctions.reset(new ShapeFunction(linearbasisfunction->TypeId, quadscheme->numDim, numQuadNodes2, quadNodes2, quadWeights2));
638 }
639 } else {
640 Parametrization.reset(new ShapeFunction(parametrization->TypeId, quadscheme->numDim, numQuadNodes*nsub, quadNodes, quadWeights));
641 BasisFunctions.reset(new ShapeFunction(basisfunction->TypeId, quadscheme->numDim, numQuadNodes, quadNodes, quadWeights));
642 LinearBasisFunctions.reset(new ShapeFunction(linearbasisfunction->TypeId, quadscheme->numDim, numQuadNodes, quadNodes, quadWeights));
643 if (BasisFunctions->dSdv.size() > 0)
644 DBasisFunctionDv=const_cast<double*>(&BasisFunctions->dSdv[0]);
645 DBasisFunctionDvShared=true;
646 }
647 }
648
649 ReferenceElement::~ReferenceElement()
650 {
651 if (!DBasisFunctionDvShared)
652 delete[] DBasisFunctionDv;
653 }
654
655 ElementTypeId ReferenceElement::getTypeId(const char* element_type)
656 {
657 int ptr=0;
658 ElementTypeId out=NoRef;
659 while (ReferenceElement_InfoList[ptr].TypeId!=NoRef && out==NoRef) {
660 if (strcmp(element_type, ReferenceElement_InfoList[ptr].Name)==0)
661 out=ReferenceElement_InfoList[ptr].TypeId;
662 ptr++;
663 }
664 return out;
665 }
666
667 const ReferenceElementInfo* ReferenceElement::getInfo(ElementTypeId id)
668 {
669 int ptr=0;
670 const ReferenceElementInfo* out=NULL;
671 while (ReferenceElement_InfoList[ptr].TypeId!=NoRef && out==NULL) {
672 if (ReferenceElement_InfoList[ptr].TypeId==id)
673 out=&ReferenceElement_InfoList[ptr];
674 ptr++;
675 }
676 if (out==NULL) {
677 setError(VALUE_ERROR, "ReferenceElement::getInfo: cannot find requested reference element.");
678 }
679 return out;
680 }
681
682 } // namespace finley
683

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision
svn:mergeinfo /branches/diaplayground/finley/src/ReferenceElements.cpp:4940-5147 /branches/lapack2681/finley/src/ReferenceElements.cpp:2682-2741 /branches/pasowrap/finley/src/ReferenceElements.cpp:3661-3674 /branches/py3_attempt2/finley/src/ReferenceElements.cpp:3871-3891 /branches/restext/finley/src/ReferenceElements.cpp:2610-2624 /branches/ripleygmg_from_3668/finley/src/ReferenceElements.cpp:3669-3791 /branches/stage3.0/finley/src/ReferenceElements.cpp:2569-2590 /branches/symbolic_from_3470/finley/src/ReferenceElements.cpp:3471-3974 /release/3.0/finley/src/ReferenceElements.cpp:2591-2601 /trunk/finley/src/ReferenceElements.cpp:4257-4344

  ViewVC Help
Powered by ViewVC 1.1.26