24 static int nsubeldata[19] = {1,1,1,1,1,3,3,3,3,3,3,3,3,9,7,7,7,7,27};
37 {{1,10},{1,4},{4,10}},
38 {{2,11},{2,4},{4,11}},
39 {{3,12},{3,4},{4,12}},
45 {{0,2},{0,6},{0,7},{1,7},{2,8},{0,13},{1,13},{2,13},{3,13}},
46 {{0,10},{1,9},{4,5},{0,14},{1,14},{4,14},{6,11}},
47 {{1,11},{2,10},{4,6},{7,10},{1,15},{2,15},{4,15}},
48 {{2,12},{3,11},{4,7},{2,16},{3,16},{4,16},{8,13}},
49 {{0,12},{3,9},{4,8},{0,17},{3,17},{4,17},{9,12}},
50 {{0,18},{1,18},{2,18},{3,18},{4,18},{5,18},{6,14},{7,14},{8,14},
51 {9,14},{0,11},{1,12},{2,9},{3,10},{0,15},{0,16},{1,16},{1,17},
52 {2,14},{2,17},{3,14},{3,15},{4,13},{6,12},{7,13},{8,11},{9,10}}
63 {0.,-1.,0.},{1.,0.,0.},{0.,1.,0.},
64 {-1.,0.,0.},{-.5,-.5,.5},{.5,-.5,.5},
65 {.5,.5,.5},{-.5,.5,.5},{0.,0.,0.}
75 {{1,6,1},{2,6,2},{3,9,3},{4,6,0},{6,6,5},{7,9,7},{10,6,4},{11,6,6},{12,9,8},{15,6,10},{16,9,11},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
76 {{0,0,1},{2,7,0},{3,7,3},{4,7,1},{7,7,7},{8,0,6},{9,6,8},{11,7,4},{12,7,8},{16,7,11},{17,6,12},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
77 {{0,8,1},{1,1,2},{3,8,2},{4,8,3},{5,1,7},{8,8,5},{9,8,8},{10,7,6},{12,8,9},{14,7,13},{17,8,12},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
78 {{0,0,3},{1,9,0},{2,2,3},{4,9,2},{5,0,7},{6,2,8},{9,9,9},{10,9,6},{11,8,6},{14,9,13},{15,8,10},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
79 {{0,0,4},{1,6,3},{2,5,3},{3,3,4},{5,6,7},{6,7,5},{7,8,7},{8,9,5},{13,5,13},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
80 {{0,4,1},{1,9,1},{2,8,0},{3,7,2},{4,0,2},{5,4,5},{6,4,8},{7,4,7},{8,4,6},{9,6,9},{10,9,4},{11,8,4},{12,7,9},{13,4,13},{14,6,13},{15,9,10},{16,8,11},{17,7,12}},
81 {{0,5,1},{1,1,0},{2,1,3},{3,1,4},{4,0,10},{5,1,8},{6,5,10},{7,5,5},{8,1,9},{9,1,12},{10,0,15},{12,1,17},{13,5,14},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
82 {{0,2,1},{1,5,0},{2,2,4},{3,2,0},{4,1,11},{5,5,8},{6,2,10},{7,2,5},{8,5,9},{9,2,9},{11,1,16},{12,5,17},{13,2,14},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
83 {{0,4,3},{1,3,1},{2,3,2},{3,4,2},{4,3,10},{5,3,6},{6,3,11},{7,5,7},{8,5,12},{9,2,12},{10,3,15},{11,5,16},{12,2,17},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
84 {{0,5,4},{1,4,0},{2,5,2},{3,3,0},{4,0,11},{5,5,6},{6,5,11},{7,3,5},{8,0,12},{9,3,9},{10,5,15},{11,0,16},{13,3,14},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}}
93 {0,5,13,8,9},{5,1,6,13,10},
94 {13,6,2,7,11},{8,13,7,3,12},
95 {9,10,11,12,4},{10,9,12,11,13},
96 {9,5,13,10,-1},{6,10,11,13,-1},
97 {12,13,7,11,-1},{13,9,12,8,-1}
102 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{-1,-1,0.}},
103 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
104 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
105 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
106 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
107 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
108 {{0.,.5,0.},{0.,0.,0.},{0.,0.,0.},{0.,-.5,0.}},
109 {{-.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
110 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
111 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
112 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
113 {{-0.25,-0.25,0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,-0.25,0.25}},
114 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
115 {{.5,0.,0.},{0.,.5,0.},{0.,0.,0.},{-.5,-.5,0.}},
116 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.}},
117 {{0.,1,0.},{-0.5,0.5,0.5},{0.,0.,0.},{0.,-1,0.}},
118 {{1,0.,0.},{0.5,-0.5,0.5},{0.,0.,0.},{-1,0.,0.}},
119 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.}},
120 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{-.5,-.5,0.}}},
122 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
123 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{1,-1,0.}},
124 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
125 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
126 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
127 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
128 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
129 {{-.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
130 {{0.,-.5,0.},{0.,0.,0.},{0.,0.,0.},{0.,-.5,0.}},
131 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
132 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
133 {{-.25,.25,0.},{0.,0.,0.},{0.,0.,0.},{.25,.25,0.}},
134 {{0.25,-0.25,0.25},{0.,0.,0.},{0.,0.,0.},{0.25,-0.25,0.25}},
135 {{.5,0.,0.},{0.,.5,0.},{0.,0.,0.},{.5,-.5,0.}},
136 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
137 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.}},
138 {{1,0.,0.},{0.5,-0.5,0.5},{0.,0.,0.},{0.,0.,0.}},
139 {{0.,1,0.},{0.5,0.5,0.5},{0.,0.,0.},{0.,-1,0.}},
140 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{.5,-.5,0.}}},
142 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
143 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
144 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{1,1,0.}},
145 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
146 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
147 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
148 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
149 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
150 {{0.,-.5,0.},{0.,0.,0.},{0.,0.,0.},{0.,.5,0.}},
151 {{0.25,0.25,0.25},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.25}},
152 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
153 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
154 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
155 {{.5,0.,0.},{0.,.5,0.},{0.,0.,0.},{.5,.5,0.}},
156 {{1,0.,0.},{0.5,0.5,0.5},{0.,0.,0.},{0.,0.,0.}},
157 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
158 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
159 {{0.,1,0.},{0.5,0.5,0.5},{0.,0.,0.},{0.,0.,0.}},
160 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{.5,.5,0.}}},
162 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
163 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
164 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
165 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{-1,1,0.}},
166 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
167 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
168 {{0.,.5,0.},{0.,0.,0.},{0.,0.,0.},{0.,.5,0.}},
169 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
170 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
171 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
172 {{-0.25,0.25,0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,0.25,0.25}},
173 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
174 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
175 {{.5,0.,0.},{0.,.5,0.},{0.,0.,0.},{-.5,.5,0.}},
176 {{1,0.,0.},{0.5,0.5,0.5},{0.,0.,0.},{-1,0.,0.}},
177 {{0.,1,0.},{-0.5,0.5,0.5},{0.,0.,0.},{0.,0.,0.}},
178 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.}},
179 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
180 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{-.5,.5,0.}}},
182 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
183 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
184 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
185 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
186 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,1}},
187 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
188 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
189 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
190 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
191 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
192 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
193 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
194 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
195 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.5}},
196 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
197 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
198 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
199 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
200 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{0.,0.,.5}}},
202 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
203 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
204 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
205 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
206 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
207 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
208 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
209 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
210 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
211 {{-0.25,0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{0.25,-0.25,0.25}},
212 {{0.25,0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,-0.25,0.25}},
213 {{0.25,-0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,0.25,0.25}},
214 {{-0.25,-0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.25}},
215 {{-0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.5}},
216 {{-1,0.,0.},{-0.5,0.5,-0.5},{0.,0.,0.},{0.5,-0.5,0.5}},
217 {{0.,1,0.},{0.5,0.5,-0.5},{0.,0.,0.},{-0.5,-0.5,0.5}},
218 {{-1,0.,0.},{-0.5,-0.5,-0.5},{0.,0.,0.},{0.5,0.5,0.5}},
219 {{0.,1,0.},{-0.5,0.5,-0.5},{0.,0.,0.},{0.5,-0.5,0.5}},
220 {{-.5,0.,0.},{0.,.5,0.},{0.,0.,-.5},{0.,0.,.5}}},
222 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
223 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
224 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
225 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
226 {{0.25,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
227 {{0.,.5,0.},{0.,0.,0.},{0.,0.,0.},{0.,-.5,0.}},
228 {{-0.25,-0.25,0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,-0.25,0.25}},
229 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
230 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
231 {{0.25,-0.25,0.25},{0.,0.,0.},{0.,0.,0.},{0.25,-0.25,0.25}},
232 {{0.5,-0.5,-0.5},{0.5,0.5,-0.5},{0.,0.,0.},{-0.5,-0.5,0.5}},
233 {{0.5,-0.5,0.},{0.5,0.,0.},{0.,0.,0.},{0.,0.5,0.}},
234 {{0.,1,0.},{0.5,0.5,0.5},{0.,0.,0.},{0.,-1,0.}},
235 {{0.5,0.5,-0.5},{1,0.,0.},{0.,0.,0.},{-0.5,-0.5,0.5}},
236 {{.5,-.5,-.5},{.5,.5,-.5},{1.,.0,.0},{-.5,-.5,.5}},
237 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
238 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
239 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
240 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
242 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
243 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
244 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
245 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
246 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
247 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
248 {{0.,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
249 {{-.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
250 {{-0.25,0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{0.25,-0.25,0.25}},
251 {{-0.25,-0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.25}},
252 {{-0.5,0.5,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
253 {{-0.5,-0.5,0.5},{-1,0.,0.},{0.,0.,0.},{1,0.,0.}},
254 {{0.,1,0.},{-0.5,0.5,-0.5},{0.,0.,0.},{0.5,-0.5,0.5}},
255 {{-0.5,0.5,0.5},{-1,0.,0.},{0.,0.,0.},{1,0.,0.}},
256 {{-.5,-.5,.5},{-.5,.5,.5},{-1.,0.,0.},{1.,0.,0.}},
257 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
258 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
259 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
260 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
262 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
263 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
264 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
265 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
266 {{0.25,-0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,0.25,0.25}},
267 {{0.,.5,0.},{0.,0.,0.},{0.,0.,0.},{0.,.5,0.}},
268 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
269 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
270 {{0.25,0.25,0.25},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.25}},
271 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
272 {{0.5,-0.5,-0.5},{0.5,0.5,-0.5},{0.,0.,0.},{-0.5,0.5,0.5}},
273 {{0.5,-0.5,-0.5},{1,0.,0.},{0.,0.,0.},{-0.5,0.5,0.5}},
274 {{0.,1,0.},{0.5,0.5,0.5},{0.,0.,0.},{0.,0.,0.}},
275 {{0.5,-0.5,0.},{0.5,0.,0.},{0.,0.,0.},{0.,0.5,0.}},
276 {{.5,-.5,-.5},{.5,.5,-.5},{1.,0.,0.},{-.5,.5,.5}},
277 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
278 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
279 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
280 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
282 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
283 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
284 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
285 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
286 {{-0.25,-0.25,0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,-0.25,0.25}},
287 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
288 {{0.25,-0.25,-0.25},{0.,0.,0.},{0.,0.,0.},{-0.25,0.25,0.25}},
289 {{-.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
290 {{0.25,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
291 {{0.,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
292 {{-0.5,-0.5,0.5},{-0.5,0.5,0.5},{0.,0.,0.},{0.,0.,0.}},
293 {{-0.5,-0.5,0.5},{-1,0.,0.},{0.,0.,0.},{0.,0.,0.}},
294 {{0.5,0.,0.},{0.5,-0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
295 {{-0.5,0.5,0.5},{-1,0.,0.},{0.,0.,0.},{0.,0.,0.}},
296 {{-.5,-.5,.5},{-.5,.5,.5},{-1.,0.,0.},{0.,0.,0.}},
297 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
298 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
299 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
300 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}}
308 for(i=0;i<NSubEl;i++) SubElVec[i] = geo->
SubElement(i);
315 for(sub=TPZShapePiram::NCornerNodes;sub<14;sub++) {
316 NewMidSideNode(geo,sub,index);
333 for(sub=0;sub<NSubEl;sub++) {
335 SubElVec[sub]->SetFather(geo);
336 SubElVec[sub]->SetFatherIndex(geo->
Index());
338 for(i=0;i<NSubEl;i++) {
340 int elside = InNeigh[i][j][0];
341 if(elside == -1)
break;
348 void TPZRefPyramid::NewMidSideNode(
TPZGeoEl *gel,
int side,int64_t &index) {
350 MidSideNodeIndex(gel,side,index);
354 while(gelside.
Element() != gel) {
356 if(index!=-1)
return;
368 par[0] = MidCoord[side][0];
369 par[1] = MidCoord[side][1];
370 par[2] = MidCoord[side][2];
377 void TPZRefPyramid::MidSideNodeIndex(
const TPZGeoEl *gel,
int side,int64_t &index) {
380 PZError <<
"TPZRefPyramid::MidSideNodeIndex. Bad parameter side = " << side << endl;
385 index = (gel)->NodeIndex(side);
395 PZError <<
"TPZRefPyramid : MidSideNodeIndex called for wrong side\n";
397 index=(gel->
SubElement(MidSideNodes[side][0]))->NodeIndex(MidSideNodes[side][1]);
405 PZError <<
"TPZRefPyramid::GetSubelements2 called with error arguments\n";
408 int nsub = NSideSubElements(side);
409 for(
int i=0;i<
nsub;i++)
411 subeldata[side][i][1]));
414 int TPZRefPyramid::NSideSubElements(
int side) {
416 PZError <<
"TPZRefPyramid::NSideSubelements2 called with error arguments\n";
419 return nsubeldata[side];
424 PZError <<
"TPZRefPyramid::GetTransform side out of range or father null\n";
434 for(i=0; i<largedim; i++) {
435 for(j=0; j<smalldim; j++) {
436 trans.
Mult()(i,j) = buildt[whichsubel][side][j][i];
438 trans.
Sum() (i,0) = buildt[whichsubel][side][3][i];
444 {0,5,13,8,9,5,13,13,8,9,14,18,17,13,14,18,18,17,18},
445 {5,1,6,13,10,5,6,13,13,14,10,15,18,13,14,15,18,18,18},
446 {13,6,2,7,11,13,6,7,13,18,15,11,16,13,18,15,16,18,18},
447 {8,13,7,3,12,13,13,7,8,17,18,16,12,13,18,18,16,17,18},
448 {9,10,11,12,4,14,15,16,17,9,10,11,12,18,14,15,16,17,18},
449 {10,9,12,11,13,14,17,16,15,18,18,18,18,18,18,18,18,18,18},
450 {9,5,13,10,14,13,18,14,14,18,18,14,18,18,18,-1,-1,-1,-1},
451 {6,10,11,13,15,15,15,13,18,18,15,18,18,18,18,-1,-1,-1,-1},
452 {12,13,7,11,18,13,16,16,18,16,18,18,18,16,18,-1,-1,-1,-1},
453 {13,9,12,8,18,17,18,13,17,17,18,18,17,18,18,-1,-1,-1,-1},
456 int TPZRefPyramid::FatherSide(
int side,
int whichsubel){
460 PZError <<
"TPZRefPyramid::Father2 called error" << endl;
463 return fatherside[whichsubel][side];
466 int TPZRefPyramid::ClassId()
const{
467 return Hash(
"TPZRefPyramid");
Contains TPZShapeTetra class which implements the shape functions of a tetrahedral element...
int AllocateNewElement()
Makes more room for new elements.
static int CornerSons[10][5]
int MaterialId() const
Returns the material index of the element.
virtual void SetNeighbour(int side, const TPZGeoElSide &neighbour)=0
Fill in the data structure for the neighbouring information.
clarg::argInt nsub("-nsub", "number of substructs", 4)
static int SideDimension(int side)
Returns the dimension of the side.
groups all classes dedicated to the computation of shape functions
static int MidSideNodes[9][2]
Utility class which represents an element with its side. The Geometric approximation classes Geometry...
Defines enum MElementType and contains the implementation of MElementType_NNodes(...) functions.
This class implements a simple vector storage scheme for a templated class T. Utility.
TPZGeoElSide Neighbour() const
TPZGeoMesh * Mesh() const
Returns the mesh to which the element belongs.
virtual int64_t NodeIndex(int i) const =0
Returns the index of the ith node the index is the location of the node in the nodevector of the mesh...
static REAL MidCoord[9][3]
Contains the TPZRefPyramid class which implements the uniform refinement of a geometric hexahedral el...
virtual TPZGeoEl * SubElement(int is) const =0
Returns a pointer to the subelement is.
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object reallocating the necessary storage, copying the existing objects to the new...
Contains declaration of TPZMesh class which defines a geometrical mesh and contains a corresponding l...
void Push(const T object)
Pushes a copy of the object on the stack.
Defines the behaviour of all geometric elements. GeometryTPZGeoEl is the common denominator for all g...
int64_t Index() const
Returns the index of the element within the element vector of the mesh.
Contains the TPZGeoTetrahedra class which implements the geometry of a tetrahedral element...
static int subeldata[19][27][2]
static int SideDimension(int side)
Returns the dimension of the side.
TPZAdmChunkVector< TPZGeoNode > & NodeVec()
virtual TPZGeoEl * CreateGeoElement(MElementType type, TPZVec< int64_t > &nodeindexes, int matid, int64_t &index)=0
Creates a geometric element according to the type of the father element.
static int InNeigh[10][NumInNeigh][3]
Groups all classes which model the h refinement These classes are used as template arguments of...
virtual TPZGeoElSide Neighbour(int side)=0
Returns a pointer to the neighbour and the neighbourside along side of the current element...
int32_t Hash(std::string str)
virtual void SetSubElement(int i, TPZGeoEl *gel)=0
Sets the subelement of index i.
virtual int HasSubElement() const =0
Return 1 if the element has subelements.
TPZGeoEl * Element() const
Contains the TPZRefTetrahedra class which implements the uniform refinement of a geometric tetrahedra...
virtual void X(TPZVec< REAL > &qsi, TPZVec< REAL > &result) const =0
Return the coordinate in real space of the point coordinate in the master element space...
This class implements a stack object. Utility.
static int nsubeldata[19]
Contains TPZShapePiram class which implements the shape functions of a pyramid element.
Contains the TPZGeoPyramid class which implements the geometry of pyramid element.
virtual void SetSubElementConnectivities()
Initializes the external connectivities of the subelements.
static REAL buildt[10][19][4][3]
#define PZError
Defines the output device to error messages and the DebugStop() function.
static int fatherside[10][19]
virtual void MidSideNodeIndex(int side, int64_t &index) const =0
Returns the midside node index along a side of the element.