FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
hecmw_mesh_edge_info.c
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright (c) 2019 FrontISTR Commons
3 * This software is released under the MIT License, see LICENSE.txt
4 *****************************************************************************/
5
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <assert.h>
10#include <errno.h>
11
12#include "hecmw_util.h"
13#include "hecmw_common.h"
14
15#include "hecmw_part_struct.h"
18
19static int edge_info_rod1(struct hecmwST_local_mesh *local_mesh, const int is,
20 const int ie) {
21 int node[2], node_index;
22 long long int edge[1];
23 int i, j;
24
25 for (i = is; i < ie; i++) {
26 node_index = local_mesh->elem_node_index[i];
27 for (j = 0; j < 2; j++) {
28 node[j] = local_mesh->elem_node_item[node_index + j];
29 }
30
31 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
32 if (edge[0] < 0) goto error;
33 }
34
35 return 0;
36
37error:
38 return -1;
39}
40
41static int edge_info_rod2(struct hecmwST_local_mesh *local_mesh, const int is,
42 const int ie) {
43 int node[3], node_index;
44 long long int edge[2];
45 int i, j;
46
47 for (i = is; i < ie; i++) {
48 node_index = local_mesh->elem_node_index[i];
49 for (j = 0; j < 3; j++) {
50 node[j] = local_mesh->elem_node_item[node_index + j];
51 }
52
53 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
54 if (edge[0] < 0) goto error;
55 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
56 if (edge[1] < 0) goto error;
57 }
58
59 return 0;
60
61error:
62 return -1;
63}
64
65static int edge_info_tri1(struct hecmwST_local_mesh *local_mesh, const int is,
66 const int ie) {
67 int node[3], node_index;
68 long long int edge[3];
69 int i, j;
70
71 for (i = is; i < ie; i++) {
72 node_index = local_mesh->elem_node_index[i];
73 for (j = 0; j < 3; j++) {
74 node[j] = local_mesh->elem_node_item[node_index + j];
75 }
76
77 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
78 if (edge[0] < 0) goto error;
79 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
80 if (edge[1] < 0) goto error;
81 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
82 if (edge[2] < 0) goto error;
83 }
84
85 return 0;
86
87error:
88 return -1;
89}
90
91static int edge_info_tri2(struct hecmwST_local_mesh *local_mesh, const int is,
92 const int ie) {
93 int node[6], node_index;
94 long long int edge[6];
95 int i, j;
96
97 for (i = is; i < ie; i++) {
98 node_index = local_mesh->elem_node_index[i];
99 for (j = 0; j < 6; j++) {
100 node[j] = local_mesh->elem_node_item[node_index + j];
101 }
102
103 edge[0] = HECMW_mesh_hsort_edge(node[0], node[5]);
104 if (edge[0] < 0) goto error;
105 edge[1] = HECMW_mesh_hsort_edge(node[5], node[1]);
106 if (edge[1] < 0) goto error;
107 edge[2] = HECMW_mesh_hsort_edge(node[1], node[3]);
108 if (edge[2] < 0) goto error;
109 edge[3] = HECMW_mesh_hsort_edge(node[3], node[2]);
110 if (edge[3] < 0) goto error;
111 edge[4] = HECMW_mesh_hsort_edge(node[2], node[4]);
112 if (edge[4] < 0) goto error;
113 edge[5] = HECMW_mesh_hsort_edge(node[4], node[0]);
114 if (edge[5] < 0) goto error;
115 }
116
117 return 0;
118
119error:
120 return -1;
121}
122
123static int edge_info_qua1(struct hecmwST_local_mesh *local_mesh, const int is,
124 const int ie) {
125 int node[4], node_index;
126 long long int edge[4];
127 int i, j;
128
129 for (i = is; i < ie; i++) {
130 node_index = local_mesh->elem_node_index[i];
131 for (j = 0; j < 4; j++) {
132 node[j] = local_mesh->elem_node_item[node_index + j];
133 }
134
135 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
136 if (edge[0] < 0) goto error;
137 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
138 if (edge[1] < 0) goto error;
139 edge[2] = HECMW_mesh_hsort_edge(node[2], node[3]);
140 if (edge[2] < 0) goto error;
141 edge[3] = HECMW_mesh_hsort_edge(node[3], node[0]);
142 if (edge[3] < 0) goto error;
143 }
144
145 return 0;
146
147error:
148 return -1;
149}
150
151static int edge_info_qua2(struct hecmwST_local_mesh *local_mesh, const int is,
152 const int ie) {
153 int node[8], node_index;
154 long long int edge[8];
155 int i, j;
156
157 for (i = is; i < ie; i++) {
158 node_index = local_mesh->elem_node_index[i];
159 for (j = 0; j < 8; j++) {
160 node[j] = local_mesh->elem_node_item[node_index + j];
161 }
162
163 edge[0] = HECMW_mesh_hsort_edge(node[0], node[4]);
164 if (edge[0] < 0) goto error;
165 edge[1] = HECMW_mesh_hsort_edge(node[4], node[1]);
166 if (edge[1] < 0) goto error;
167 edge[2] = HECMW_mesh_hsort_edge(node[1], node[5]);
168 if (edge[2] < 0) goto error;
169 edge[3] = HECMW_mesh_hsort_edge(node[5], node[2]);
170 if (edge[3] < 0) goto error;
171 edge[4] = HECMW_mesh_hsort_edge(node[2], node[6]);
172 if (edge[4] < 0) goto error;
173 edge[5] = HECMW_mesh_hsort_edge(node[6], node[3]);
174 if (edge[5] < 0) goto error;
175 edge[6] = HECMW_mesh_hsort_edge(node[3], node[7]);
176 if (edge[6] < 0) goto error;
177 edge[7] = HECMW_mesh_hsort_edge(node[7], node[0]);
178 if (edge[7] < 0) goto error;
179 }
180
181 return 0;
182
183error:
184 return -1;
185}
186
187static int edge_info_tet1(struct hecmwST_local_mesh *local_mesh, const int is,
188 const int ie) {
189 int node[4], node_index;
190 long long int edge[6];
191 int i, j;
192
193 for (i = is; i < ie; i++) {
194 node_index = local_mesh->elem_node_index[i];
195 for (j = 0; j < 4; j++) {
196 node[j] = local_mesh->elem_node_item[node_index + j];
197 }
198
199 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
200 if (edge[0] < 0) goto error;
201 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
202 if (edge[1] < 0) goto error;
203 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
204 if (edge[2] < 0) goto error;
205 edge[3] = HECMW_mesh_hsort_edge(node[0], node[3]);
206 if (edge[3] < 0) goto error;
207 edge[4] = HECMW_mesh_hsort_edge(node[1], node[3]);
208 if (edge[4] < 0) goto error;
209 edge[5] = HECMW_mesh_hsort_edge(node[2], node[3]);
210 if (edge[5] < 0) goto error;
211 }
212
213 return 0;
214
215error:
216 return -1;
217}
218
219static int edge_info_tet2(struct hecmwST_local_mesh *local_mesh, const int is,
220 const int ie) {
221 int node[10], node_index;
222 long long int edge[12];
223 int i, j;
224
225 for (i = is; i < ie; i++) {
226 node_index = local_mesh->elem_node_index[i];
227 for (j = 0; j < 10; j++) {
228 node[j] = local_mesh->elem_node_item[node_index + j];
229 }
230
231 edge[0] = HECMW_mesh_hsort_edge(node[0], node[4]);
232 if (edge[0] < 0) goto error;
233 edge[1] = HECMW_mesh_hsort_edge(node[4], node[1]);
234 if (edge[1] < 0) goto error;
235 edge[2] = HECMW_mesh_hsort_edge(node[1], node[5]);
236 if (edge[2] < 0) goto error;
237 edge[3] = HECMW_mesh_hsort_edge(node[5], node[2]);
238 if (edge[3] < 0) goto error;
239 edge[4] = HECMW_mesh_hsort_edge(node[2], node[6]);
240 if (edge[4] < 0) goto error;
241 edge[5] = HECMW_mesh_hsort_edge(node[6], node[0]);
242 if (edge[5] < 0) goto error;
243 edge[6] = HECMW_mesh_hsort_edge(node[0], node[7]);
244 if (edge[6] < 0) goto error;
245 edge[7] = HECMW_mesh_hsort_edge(node[7], node[3]);
246 if (edge[7] < 0) goto error;
247 edge[8] = HECMW_mesh_hsort_edge(node[1], node[8]);
248 if (edge[8] < 0) goto error;
249 edge[9] = HECMW_mesh_hsort_edge(node[8], node[3]);
250 if (edge[9] < 0) goto error;
251 edge[10] = HECMW_mesh_hsort_edge(node[2], node[9]);
252 if (edge[10] < 0) goto error;
253 edge[11] = HECMW_mesh_hsort_edge(node[9], node[3]);
254 if (edge[11] < 0) goto error;
255 }
256
257 return 0;
258
259error:
260 return -1;
261}
262
263static int edge_info_pyr1(struct hecmwST_local_mesh *local_mesh, const int is,
264 const int ie) {
265 int node[5], node_index;
266 long long int edge[8];
267 int i, j;
268
269 for (i = is; i < ie; i++) {
270 node_index = local_mesh->elem_node_index[i];
271 for (j = 0; j < 5; j++) {
272 node[j] = local_mesh->elem_node_item[node_index + j];
273 }
274
275 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
276 if (edge[0] < 0) goto error;
277 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
278 if (edge[1] < 0) goto error;
279 edge[2] = HECMW_mesh_hsort_edge(node[2], node[3]);
280 if (edge[2] < 0) goto error;
281 edge[3] = HECMW_mesh_hsort_edge(node[3], node[0]);
282 if (edge[3] < 0) goto error;
283 edge[4] = HECMW_mesh_hsort_edge(node[0], node[4]);
284 if (edge[4] < 0) goto error;
285 edge[5] = HECMW_mesh_hsort_edge(node[1], node[4]);
286 if (edge[5] < 0) goto error;
287 edge[6] = HECMW_mesh_hsort_edge(node[2], node[4]);
288 if (edge[6] < 0) goto error;
289 edge[7] = HECMW_mesh_hsort_edge(node[3], node[4]);
290 if (edge[7] < 0) goto error;
291 }
292
293 return 0;
294
295error:
296 return -1;
297}
298
299static int edge_info_pyr2(struct hecmwST_local_mesh *local_mesh, const int is,
300 const int ie) {
301 int node[13], node_index;
302 long long int edge[16];
303 int i, j;
304
305 for (i = is; i < ie; i++) {
306 node_index = local_mesh->elem_node_index[i];
307 for (j = 0; j < 13; j++) {
308 node[j] = local_mesh->elem_node_item[node_index + j];
309 }
310
311 edge[0] = HECMW_mesh_hsort_edge(node[0], node[5]);
312 if (edge[0] < 0) goto error;
313 edge[1] = HECMW_mesh_hsort_edge(node[5], node[1]);
314 if (edge[1] < 0) goto error;
315 edge[2] = HECMW_mesh_hsort_edge(node[1], node[6]);
316 if (edge[2] < 0) goto error;
317 edge[3] = HECMW_mesh_hsort_edge(node[6], node[2]);
318 if (edge[3] < 0) goto error;
319 edge[4] = HECMW_mesh_hsort_edge(node[2], node[7]);
320 if (edge[4] < 0) goto error;
321 edge[5] = HECMW_mesh_hsort_edge(node[7], node[3]);
322 if (edge[5] < 0) goto error;
323 edge[6] = HECMW_mesh_hsort_edge(node[3], node[8]);
324 if (edge[6] < 0) goto error;
325 edge[7] = HECMW_mesh_hsort_edge(node[8], node[0]);
326 if (edge[7] < 0) goto error;
327 edge[8] = HECMW_mesh_hsort_edge(node[0], node[9]);
328 if (edge[8] < 0) goto error;
329 edge[9] = HECMW_mesh_hsort_edge(node[9], node[4]);
330 if (edge[9] < 0) goto error;
331 edge[10] = HECMW_mesh_hsort_edge(node[1], node[10]);
332 if (edge[10] < 0) goto error;
333 edge[11] = HECMW_mesh_hsort_edge(node[10], node[4]);
334 if (edge[11] < 0) goto error;
335 edge[12] = HECMW_mesh_hsort_edge(node[2], node[11]);
336 if (edge[12] < 0) goto error;
337 edge[13] = HECMW_mesh_hsort_edge(node[11], node[4]);
338 if (edge[13] < 0) goto error;
339 edge[14] = HECMW_mesh_hsort_edge(node[3], node[12]);
340 if (edge[14] < 0) goto error;
341 edge[15] = HECMW_mesh_hsort_edge(node[12], node[4]);
342 if (edge[15] < 0) goto error;
343 }
344
345 return 0;
346
347error:
348 return -1;
349}
350
351static int edge_info_pri1(struct hecmwST_local_mesh *local_mesh, const int is,
352 const int ie) {
353 int node[6], node_index;
354 long long int edge[9];
355 int i, j;
356
357 for (i = is; i < ie; i++) {
358 node_index = local_mesh->elem_node_index[i];
359 for (j = 0; j < 6; j++) {
360 node[j] = local_mesh->elem_node_item[node_index + j];
361 }
362
363 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
364 if (edge[0] < 0) goto error;
365 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
366 if (edge[1] < 0) goto error;
367 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
368 if (edge[2] < 0) goto error;
369 edge[3] = HECMW_mesh_hsort_edge(node[3], node[4]);
370 if (edge[3] < 0) goto error;
371 edge[4] = HECMW_mesh_hsort_edge(node[4], node[5]);
372 if (edge[4] < 0) goto error;
373 edge[5] = HECMW_mesh_hsort_edge(node[5], node[3]);
374 if (edge[5] < 0) goto error;
375 edge[6] = HECMW_mesh_hsort_edge(node[0], node[3]);
376 if (edge[6] < 0) goto error;
377 edge[7] = HECMW_mesh_hsort_edge(node[1], node[4]);
378 if (edge[7] < 0) goto error;
379 edge[8] = HECMW_mesh_hsort_edge(node[2], node[5]);
380 if (edge[8] < 0) goto error;
381 }
382
383 return 0;
384
385error:
386 return -1;
387}
388
389static int edge_info_pri2(struct hecmwST_local_mesh *local_mesh, const int is,
390 const int ie) {
391 int node[15], node_index;
392 long long int edge[18];
393 int i, j;
394
395 for (i = is; i < ie; i++) {
396 node_index = local_mesh->elem_node_index[i];
397 for (j = 0; j < 15; j++) {
398 node[j] = local_mesh->elem_node_item[node_index + j];
399 }
400
401 edge[0] = HECMW_mesh_hsort_edge(node[0], node[8]);
402 if (edge[0] < 0) goto error;
403 edge[1] = HECMW_mesh_hsort_edge(node[8], node[1]);
404 if (edge[1] < 0) goto error;
405 edge[2] = HECMW_mesh_hsort_edge(node[1], node[6]);
406 if (edge[2] < 0) goto error;
407 edge[3] = HECMW_mesh_hsort_edge(node[6], node[2]);
408 if (edge[3] < 0) goto error;
409 edge[4] = HECMW_mesh_hsort_edge(node[2], node[7]);
410 if (edge[4] < 0) goto error;
411 edge[5] = HECMW_mesh_hsort_edge(node[7], node[0]);
412 if (edge[5] < 0) goto error;
413 edge[6] = HECMW_mesh_hsort_edge(node[3], node[11]);
414 if (edge[6] < 0) goto error;
415 edge[7] = HECMW_mesh_hsort_edge(node[11], node[4]);
416 if (edge[7] < 0) goto error;
417 edge[8] = HECMW_mesh_hsort_edge(node[4], node[9]);
418 if (edge[8] < 0) goto error;
419 edge[9] = HECMW_mesh_hsort_edge(node[9], node[5]);
420 if (edge[9] < 0) goto error;
421 edge[10] = HECMW_mesh_hsort_edge(node[5], node[10]);
422 if (edge[10] < 0) goto error;
423 edge[11] = HECMW_mesh_hsort_edge(node[10], node[3]);
424 if (edge[11] < 0) goto error;
425 edge[12] = HECMW_mesh_hsort_edge(node[0], node[12]);
426 if (edge[12] < 0) goto error;
427 edge[13] = HECMW_mesh_hsort_edge(node[12], node[3]);
428 if (edge[13] < 0) goto error;
429 edge[14] = HECMW_mesh_hsort_edge(node[1], node[13]);
430 if (edge[14] < 0) goto error;
431 edge[15] = HECMW_mesh_hsort_edge(node[13], node[4]);
432 if (edge[15] < 0) goto error;
433 edge[16] = HECMW_mesh_hsort_edge(node[2], node[14]);
434 if (edge[16] < 0) goto error;
435 edge[17] = HECMW_mesh_hsort_edge(node[14], node[5]);
436 if (edge[17] < 0) goto error;
437 }
438
439 return 0;
440
441error:
442 return -1;
443}
444
445static int edge_info_hex1(struct hecmwST_local_mesh *local_mesh, const int is,
446 const int ie) {
447 int node[8], node_index;
448 long long int edge[12];
449 int i, j;
450
451 for (i = is; i < ie; i++) {
452 node_index = local_mesh->elem_node_index[i];
453 for (j = 0; j < 8; j++) {
454 node[j] = local_mesh->elem_node_item[node_index + j];
455 }
456
457 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
458 if (edge[0] < 0) goto error;
459 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
460 if (edge[1] < 0) goto error;
461 edge[2] = HECMW_mesh_hsort_edge(node[2], node[3]);
462 if (edge[2] < 0) goto error;
463 edge[3] = HECMW_mesh_hsort_edge(node[3], node[0]);
464 if (edge[3] < 0) goto error;
465 edge[4] = HECMW_mesh_hsort_edge(node[4], node[5]);
466 if (edge[4] < 0) goto error;
467 edge[5] = HECMW_mesh_hsort_edge(node[5], node[6]);
468 if (edge[5] < 0) goto error;
469 edge[6] = HECMW_mesh_hsort_edge(node[6], node[7]);
470 if (edge[6] < 0) goto error;
471 edge[7] = HECMW_mesh_hsort_edge(node[7], node[4]);
472 if (edge[7] < 0) goto error;
473 edge[8] = HECMW_mesh_hsort_edge(node[0], node[4]);
474 if (edge[8] < 0) goto error;
475 edge[9] = HECMW_mesh_hsort_edge(node[1], node[5]);
476 if (edge[9] < 0) goto error;
477 edge[10] = HECMW_mesh_hsort_edge(node[2], node[6]);
478 if (edge[10] < 0) goto error;
479 edge[11] = HECMW_mesh_hsort_edge(node[3], node[7]);
480 if (edge[11] < 0) goto error;
481 }
482
483 return 0;
484
485error:
486 return -1;
487}
488
489static int edge_info_hex2(struct hecmwST_local_mesh *local_mesh, const int is,
490 const int ie) {
491 int node[20], node_index;
492 long long int edge[24];
493 int i, j;
494
495 for (i = is; i < ie; i++) {
496 node_index = local_mesh->elem_node_index[i];
497 for (j = 0; j < 20; j++) {
498 node[j] = local_mesh->elem_node_item[node_index + j];
499 }
500
501 edge[0] = HECMW_mesh_hsort_edge(node[0], node[8]);
502 if (edge[0] < 0) goto error;
503 edge[1] = HECMW_mesh_hsort_edge(node[8], node[1]);
504 if (edge[1] < 0) goto error;
505 edge[2] = HECMW_mesh_hsort_edge(node[1], node[9]);
506 if (edge[2] < 0) goto error;
507 edge[3] = HECMW_mesh_hsort_edge(node[9], node[2]);
508 if (edge[3] < 0) goto error;
509 edge[4] = HECMW_mesh_hsort_edge(node[2], node[10]);
510 if (edge[4] < 0) goto error;
511 edge[5] = HECMW_mesh_hsort_edge(node[10], node[3]);
512 if (edge[5] < 0) goto error;
513 edge[6] = HECMW_mesh_hsort_edge(node[3], node[11]);
514 if (edge[6] < 0) goto error;
515 edge[7] = HECMW_mesh_hsort_edge(node[11], node[0]);
516 if (edge[7] < 0) goto error;
517 edge[8] = HECMW_mesh_hsort_edge(node[4], node[12]);
518 if (edge[8] < 0) goto error;
519 edge[9] = HECMW_mesh_hsort_edge(node[12], node[5]);
520 if (edge[9] < 0) goto error;
521 edge[10] = HECMW_mesh_hsort_edge(node[5], node[13]);
522 if (edge[10] < 0) goto error;
523 edge[11] = HECMW_mesh_hsort_edge(node[13], node[6]);
524 if (edge[11] < 0) goto error;
525 edge[12] = HECMW_mesh_hsort_edge(node[6], node[14]);
526 if (edge[12] < 0) goto error;
527 edge[13] = HECMW_mesh_hsort_edge(node[14], node[7]);
528 if (edge[13] < 0) goto error;
529 edge[14] = HECMW_mesh_hsort_edge(node[7], node[15]);
530 if (edge[14] < 0) goto error;
531 edge[15] = HECMW_mesh_hsort_edge(node[15], node[4]);
532 if (edge[15] < 0) goto error;
533 edge[16] = HECMW_mesh_hsort_edge(node[0], node[16]);
534 if (edge[16] < 0) goto error;
535 edge[17] = HECMW_mesh_hsort_edge(node[16], node[4]);
536 if (edge[17] < 0) goto error;
537 edge[18] = HECMW_mesh_hsort_edge(node[1], node[17]);
538 if (edge[18] < 0) goto error;
539 edge[19] = HECMW_mesh_hsort_edge(node[17], node[5]);
540 if (edge[19] < 0) goto error;
541 edge[20] = HECMW_mesh_hsort_edge(node[2], node[18]);
542 if (edge[20] < 0) goto error;
543 edge[21] = HECMW_mesh_hsort_edge(node[18], node[6]);
544 if (edge[21] < 0) goto error;
545 edge[22] = HECMW_mesh_hsort_edge(node[3], node[19]);
546 if (edge[22] < 0) goto error;
547 edge[23] = HECMW_mesh_hsort_edge(node[19], node[7]);
548 if (edge[23] < 0) goto error;
549 }
550
551 return 0;
552
553error:
554 return -1;
555}
556
557static int edge_info_mst1(struct hecmwST_local_mesh *local_mesh, const int is,
558 const int ie) {
559 int node[4], node_index;
560 long long int edge[6];
561 int i, j;
562
563 for (i = is; i < ie; i++) {
564 node_index = local_mesh->elem_node_index[i];
565 for (j = 0; j < 4; j++) {
566 node[j] = local_mesh->elem_node_item[node_index + j];
567 }
568
569 edge[0] = HECMW_mesh_hsort_edge(node[1], node[2]);
570 if (edge[0] < 0) goto error;
571 edge[1] = HECMW_mesh_hsort_edge(node[2], node[3]);
572 if (edge[1] < 0) goto error;
573 edge[2] = HECMW_mesh_hsort_edge(node[3], node[1]);
574 if (edge[2] < 0) goto error;
575 edge[3] = HECMW_mesh_hsort_edge(node[0], node[1]);
576 if (edge[3] < 0) goto error;
577 edge[4] = HECMW_mesh_hsort_edge(node[0], node[2]);
578 if (edge[4] < 0) goto error;
579 edge[5] = HECMW_mesh_hsort_edge(node[0], node[3]);
580 if (edge[5] < 0) goto error;
581 }
582
583 return 0;
584
585error:
586 return -1;
587}
588
589static int edge_info_mst2(struct hecmwST_local_mesh *local_mesh, const int is,
590 const int ie) {
591 int node[7], node_index;
592 long long int edge[9];
593 int i, j;
594
595 for (i = is; i < ie; i++) {
596 node_index = local_mesh->elem_node_index[i];
597 for (j = 0; j < 7; j++) {
598 node[j] = local_mesh->elem_node_item[node_index + j];
599 }
600
601 edge[0] = HECMW_mesh_hsort_edge(node[1], node[6]);
602 if (edge[0] < 0) goto error;
603 edge[1] = HECMW_mesh_hsort_edge(node[6], node[2]);
604 if (edge[1] < 0) goto error;
605 edge[2] = HECMW_mesh_hsort_edge(node[2], node[4]);
606 if (edge[2] < 0) goto error;
607 edge[3] = HECMW_mesh_hsort_edge(node[4], node[3]);
608 if (edge[3] < 0) goto error;
609 edge[4] = HECMW_mesh_hsort_edge(node[3], node[5]);
610 if (edge[4] < 0) goto error;
611 edge[5] = HECMW_mesh_hsort_edge(node[5], node[1]);
612 if (edge[5] < 0) goto error;
613 edge[6] = HECMW_mesh_hsort_edge(node[0], node[1]);
614 if (edge[6] < 0) goto error;
615 edge[7] = HECMW_mesh_hsort_edge(node[0], node[2]);
616 if (edge[7] < 0) goto error;
617 edge[8] = HECMW_mesh_hsort_edge(node[0], node[3]);
618 if (edge[8] < 0) goto error;
619 }
620
621 return 0;
622
623error:
624 return -1;
625}
626
627static int edge_info_msq1(struct hecmwST_local_mesh *local_mesh, const int is,
628 const int ie) {
629 int node[5], node_index;
630 long long int edge[8];
631 int i, j;
632
633 for (i = is; i < ie; i++) {
634 node_index = local_mesh->elem_node_index[i];
635 for (j = 0; j < 5; j++) {
636 node[j] = local_mesh->elem_node_item[node_index + j];
637 }
638
639 edge[0] = HECMW_mesh_hsort_edge(node[1], node[2]);
640 if (edge[0] < 0) goto error;
641 edge[1] = HECMW_mesh_hsort_edge(node[2], node[3]);
642 if (edge[1] < 0) goto error;
643 edge[2] = HECMW_mesh_hsort_edge(node[3], node[4]);
644 if (edge[2] < 0) goto error;
645 edge[3] = HECMW_mesh_hsort_edge(node[4], node[1]);
646 if (edge[3] < 0) goto error;
647 edge[4] = HECMW_mesh_hsort_edge(node[0], node[1]);
648 if (edge[4] < 0) goto error;
649 edge[5] = HECMW_mesh_hsort_edge(node[0], node[2]);
650 if (edge[5] < 0) goto error;
651 edge[6] = HECMW_mesh_hsort_edge(node[0], node[3]);
652 if (edge[6] < 0) goto error;
653 edge[7] = HECMW_mesh_hsort_edge(node[0], node[4]);
654 if (edge[7] < 0) goto error;
655 }
656
657 return 0;
658
659error:
660 return -1;
661}
662
663static int edge_info_msq2(struct hecmwST_local_mesh *local_mesh, const int is,
664 const int ie) {
665 int node[9], node_index;
666 long long int edge[12];
667 int i, j;
668
669 for (i = is; i < ie; i++) {
670 node_index = local_mesh->elem_node_index[i];
671 for (j = 0; j < 9; j++) {
672 node[j] = local_mesh->elem_node_item[node_index + j];
673 }
674
675 edge[0] = HECMW_mesh_hsort_edge(node[1], node[5]);
676 if (edge[0] < 0) goto error;
677 edge[1] = HECMW_mesh_hsort_edge(node[5], node[2]);
678 if (edge[1] < 0) goto error;
679 edge[2] = HECMW_mesh_hsort_edge(node[2], node[6]);
680 if (edge[2] < 0) goto error;
681 edge[3] = HECMW_mesh_hsort_edge(node[6], node[3]);
682 if (edge[3] < 0) goto error;
683 edge[4] = HECMW_mesh_hsort_edge(node[3], node[7]);
684 if (edge[4] < 0) goto error;
685 edge[5] = HECMW_mesh_hsort_edge(node[7], node[4]);
686 if (edge[5] < 0) goto error;
687 edge[6] = HECMW_mesh_hsort_edge(node[4], node[8]);
688 if (edge[6] < 0) goto error;
689 edge[7] = HECMW_mesh_hsort_edge(node[8], node[1]);
690 if (edge[7] < 0) goto error;
691 edge[8] = HECMW_mesh_hsort_edge(node[0], node[1]);
692 if (edge[8] < 0) goto error;
693 edge[9] = HECMW_mesh_hsort_edge(node[0], node[2]);
694 if (edge[9] < 0) goto error;
695 edge[10] = HECMW_mesh_hsort_edge(node[0], node[3]);
696 if (edge[10] < 0) goto error;
697 edge[11] = HECMW_mesh_hsort_edge(node[0], node[4]);
698 if (edge[11] < 0) goto error;
699 }
700
701 return 0;
702
703error:
704 return -1;
705}
706
707static int edge_info_jtb1(struct hecmwST_local_mesh *local_mesh, const int is,
708 const int ie) {
709 int node[2], node_index;
710 long long int edge[1];
711 int i, j;
712
713 for (i = is; i < ie; i++) {
714 node_index = local_mesh->elem_node_index[i];
715 for (j = 0; j < 2; j++) {
716 node[j] = local_mesh->elem_node_item[node_index + j];
717 }
718
719 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
720 if (edge[0] < 0) goto error;
721 }
722
723 return 0;
724
725error:
726 return -1;
727}
728
729static int edge_info_jtt1(struct hecmwST_local_mesh *local_mesh, const int is,
730 const int ie) {
731 int node[6], node_index;
732 long long int edge[9];
733 int i, j;
734
735 for (i = is; i < ie; i++) {
736 node_index = local_mesh->elem_node_index[i];
737 for (j = 0; j < 6; j++) {
738 node[j] = local_mesh->elem_node_item[node_index + j];
739 }
740
741 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
742 if (edge[0] < 0) goto error;
743 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
744 if (edge[1] < 0) goto error;
745 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
746 if (edge[2] < 0) goto error;
747 edge[3] = HECMW_mesh_hsort_edge(node[3], node[4]);
748 if (edge[3] < 0) goto error;
749 edge[4] = HECMW_mesh_hsort_edge(node[4], node[5]);
750 if (edge[4] < 0) goto error;
751 edge[5] = HECMW_mesh_hsort_edge(node[5], node[3]);
752 if (edge[5] < 0) goto error;
753 edge[6] = HECMW_mesh_hsort_edge(node[0], node[3]);
754 if (edge[6] < 0) goto error;
755 edge[7] = HECMW_mesh_hsort_edge(node[1], node[4]);
756 if (edge[7] < 0) goto error;
757 edge[8] = HECMW_mesh_hsort_edge(node[2], node[5]);
758 if (edge[8] < 0) goto error;
759 }
760
761 return 0;
762
763error:
764 return -1;
765}
766
767static int edge_info_jtt2(struct hecmwST_local_mesh *local_mesh, const int is,
768 const int ie) {
769 int node[12], node_index;
770 long long int edge[15];
771 int i, j;
772
773 for (i = is; i < ie; i++) {
774 node_index = local_mesh->elem_node_index[i];
775 for (j = 0; j < 12; j++) {
776 node[j] = local_mesh->elem_node_item[node_index + j];
777 }
778
779 edge[0] = HECMW_mesh_hsort_edge(node[0], node[8]);
780 if (edge[0] < 0) goto error;
781 edge[1] = HECMW_mesh_hsort_edge(node[8], node[1]);
782 if (edge[1] < 0) goto error;
783 edge[2] = HECMW_mesh_hsort_edge(node[1], node[6]);
784 if (edge[2] < 0) goto error;
785 edge[3] = HECMW_mesh_hsort_edge(node[6], node[2]);
786 if (edge[3] < 0) goto error;
787 edge[4] = HECMW_mesh_hsort_edge(node[2], node[7]);
788 if (edge[4] < 0) goto error;
789 edge[5] = HECMW_mesh_hsort_edge(node[7], node[0]);
790 if (edge[5] < 0) goto error;
791 edge[6] = HECMW_mesh_hsort_edge(node[3], node[11]);
792 if (edge[6] < 0) goto error;
793 edge[7] = HECMW_mesh_hsort_edge(node[11], node[4]);
794 if (edge[7] < 0) goto error;
795 edge[8] = HECMW_mesh_hsort_edge(node[4], node[9]);
796 if (edge[8] < 0) goto error;
797 edge[9] = HECMW_mesh_hsort_edge(node[9], node[5]);
798 if (edge[9] < 0) goto error;
799 edge[10] = HECMW_mesh_hsort_edge(node[5], node[10]);
800 if (edge[10] < 0) goto error;
801 edge[11] = HECMW_mesh_hsort_edge(node[10], node[3]);
802 if (edge[11] < 0) goto error;
803 edge[12] = HECMW_mesh_hsort_edge(node[0], node[3]);
804 if (edge[12] < 0) goto error;
805 edge[13] = HECMW_mesh_hsort_edge(node[1], node[4]);
806 if (edge[13] < 0) goto error;
807 edge[14] = HECMW_mesh_hsort_edge(node[2], node[5]);
808 if (edge[14] < 0) goto error;
809 }
810
811 return 0;
812
813error:
814 return -1;
815}
816
817static int edge_info_jtq1(struct hecmwST_local_mesh *local_mesh, const int is,
818 const int ie) {
819 int node[8], node_index;
820 long long int edge[12];
821 int i, j;
822
823 for (i = is; i < ie; i++) {
824 node_index = local_mesh->elem_node_index[i];
825 for (j = 0; j < 8; j++) {
826 node[j] = local_mesh->elem_node_item[node_index + j];
827 }
828
829 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
830 if (edge[0] < 0) goto error;
831 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
832 if (edge[1] < 0) goto error;
833 edge[2] = HECMW_mesh_hsort_edge(node[2], node[3]);
834 if (edge[2] < 0) goto error;
835 edge[3] = HECMW_mesh_hsort_edge(node[3], node[0]);
836 if (edge[3] < 0) goto error;
837 edge[4] = HECMW_mesh_hsort_edge(node[4], node[5]);
838 if (edge[4] < 0) goto error;
839 edge[5] = HECMW_mesh_hsort_edge(node[5], node[6]);
840 if (edge[5] < 0) goto error;
841 edge[6] = HECMW_mesh_hsort_edge(node[6], node[7]);
842 if (edge[6] < 0) goto error;
843 edge[7] = HECMW_mesh_hsort_edge(node[7], node[4]);
844 if (edge[7] < 0) goto error;
845 edge[8] = HECMW_mesh_hsort_edge(node[0], node[4]);
846 if (edge[8] < 0) goto error;
847 edge[9] = HECMW_mesh_hsort_edge(node[1], node[5]);
848 if (edge[9] < 0) goto error;
849 edge[10] = HECMW_mesh_hsort_edge(node[2], node[6]);
850 if (edge[10] < 0) goto error;
851 edge[11] = HECMW_mesh_hsort_edge(node[3], node[7]);
852 if (edge[11] < 0) goto error;
853 }
854
855 return 0;
856
857error:
858 return -1;
859}
860
861static int edge_info_jtq2(struct hecmwST_local_mesh *local_mesh, const int is,
862 const int ie) {
863 int node[16], node_index;
864 long long int edge[20];
865 int i, j;
866
867 for (i = is; i < ie; i++) {
868 node_index = local_mesh->elem_node_index[i];
869 for (j = 0; j < 16; j++) {
870 node[j] = local_mesh->elem_node_item[node_index + j];
871 }
872
873 edge[0] = HECMW_mesh_hsort_edge(node[0], node[8]);
874 if (edge[0] < 0) goto error;
875 edge[1] = HECMW_mesh_hsort_edge(node[8], node[1]);
876 if (edge[1] < 0) goto error;
877 edge[2] = HECMW_mesh_hsort_edge(node[1], node[9]);
878 if (edge[2] < 0) goto error;
879 edge[3] = HECMW_mesh_hsort_edge(node[9], node[2]);
880 if (edge[3] < 0) goto error;
881 edge[4] = HECMW_mesh_hsort_edge(node[2], node[10]);
882 if (edge[4] < 0) goto error;
883 edge[5] = HECMW_mesh_hsort_edge(node[10], node[3]);
884 if (edge[5] < 0) goto error;
885 edge[6] = HECMW_mesh_hsort_edge(node[3], node[11]);
886 if (edge[6] < 0) goto error;
887 edge[7] = HECMW_mesh_hsort_edge(node[11], node[0]);
888 if (edge[7] < 0) goto error;
889 edge[8] = HECMW_mesh_hsort_edge(node[4], node[12]);
890 if (edge[8] < 0) goto error;
891 edge[9] = HECMW_mesh_hsort_edge(node[12], node[5]);
892 if (edge[9] < 0) goto error;
893 edge[10] = HECMW_mesh_hsort_edge(node[5], node[13]);
894 if (edge[10] < 0) goto error;
895 edge[11] = HECMW_mesh_hsort_edge(node[13], node[6]);
896 if (edge[11] < 0) goto error;
897 edge[12] = HECMW_mesh_hsort_edge(node[6], node[14]);
898 if (edge[12] < 0) goto error;
899 edge[13] = HECMW_mesh_hsort_edge(node[14], node[7]);
900 if (edge[13] < 0) goto error;
901 edge[14] = HECMW_mesh_hsort_edge(node[7], node[15]);
902 if (edge[14] < 0) goto error;
903 edge[15] = HECMW_mesh_hsort_edge(node[15], node[4]);
904 if (edge[15] < 0) goto error;
905 edge[16] = HECMW_mesh_hsort_edge(node[0], node[4]);
906 if (edge[16] < 0) goto error;
907 edge[17] = HECMW_mesh_hsort_edge(node[1], node[5]);
908 if (edge[17] < 0) goto error;
909 edge[18] = HECMW_mesh_hsort_edge(node[2], node[6]);
910 if (edge[18] < 0) goto error;
911 edge[19] = HECMW_mesh_hsort_edge(node[3], node[7]);
912 if (edge[19] < 0) goto error;
913 }
914
915 return 0;
916
917error:
918 return -1;
919}
920
921static int edge_info_bem1(struct hecmwST_local_mesh *local_mesh, const int is,
922 const int ie) {
923 int node[2], node_index;
924 long long int edge[1];
925 int i, j;
926
927 for (i = is; i < ie; i++) {
928 node_index = local_mesh->elem_node_index[i];
929 for (j = 0; j < 2; j++) {
930 node[j] = local_mesh->elem_node_item[node_index + j];
931 }
932
933 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
934 if (edge[0] < 0) goto error;
935 }
936
937 return 0;
938
939error:
940 return -1;
941}
942
943static int edge_info_bem2(struct hecmwST_local_mesh *local_mesh, const int is,
944 const int ie) {
945 int node[3], node_index;
946 long long int edge[2];
947 int i, j;
948
949 for (i = is; i < ie; i++) {
950 node_index = local_mesh->elem_node_index[i];
951 for (j = 0; j < 3; j++) {
952 node[j] = local_mesh->elem_node_item[node_index + j];
953 }
954
955 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
956 if (edge[0] < 0) goto error;
957 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
958 if (edge[1] < 0) goto error;
959 }
960
961 return 0;
962
963error:
964 return -1;
965}
966
967static int edge_info_bem3(struct hecmwST_local_mesh *local_mesh, const int is,
968 const int ie) {
969 int node[4], node_index;
970 long long int edge[6];
971 int i, j;
972
973 for (i = is; i < ie; i++) {
974 node_index = local_mesh->elem_node_index[i];
975 for (j = 0; j < 4; j++) {
976 node[j] = local_mesh->elem_node_item[node_index + j];
977 }
978
979 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
980 if (edge[0] < 0) goto error;
981 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
982 if (edge[1] < 0) goto error;
983 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
984 if (edge[2] < 0) goto error;
985 edge[3] = HECMW_mesh_hsort_edge(node[0], node[3]);
986 if (edge[3] < 0) goto error;
987 edge[4] = HECMW_mesh_hsort_edge(node[1], node[3]);
988 if (edge[4] < 0) goto error;
989 edge[5] = HECMW_mesh_hsort_edge(node[2], node[3]);
990 if (edge[5] < 0) goto error;
991 }
992
993 return 0;
994
995error:
996 return -1;
997}
998
999static int edge_info_sht1(struct hecmwST_local_mesh *local_mesh, const int is,
1000 const int ie) {
1001 int node[3], node_index;
1002 long long int edge[3];
1003 int i, j;
1004
1005 for (i = is; i < ie; i++) {
1006 node_index = local_mesh->elem_node_index[i];
1007 for (j = 0; j < 3; j++) {
1008 node[j] = local_mesh->elem_node_item[node_index + j];
1009 }
1010
1011 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
1012 if (edge[0] < 0) goto error;
1013 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
1014 if (edge[1] < 0) goto error;
1015 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
1016 if (edge[2] < 0) goto error;
1017 }
1018
1019 return 0;
1020
1021error:
1022 return -1;
1023}
1024
1025static int edge_info_sht2(struct hecmwST_local_mesh *local_mesh, const int is,
1026 const int ie) {
1027 int node[6], node_index;
1028 long long int edge[6];
1029 int i, j;
1030
1031 for (i = is; i < ie; i++) {
1032 node_index = local_mesh->elem_node_index[i];
1033 for (j = 0; j < 6; j++) {
1034 node[j] = local_mesh->elem_node_item[node_index + j];
1035 }
1036
1037 edge[0] = HECMW_mesh_hsort_edge(node[0], node[5]);
1038 if (edge[0] < 0) goto error;
1039 edge[1] = HECMW_mesh_hsort_edge(node[5], node[1]);
1040 if (edge[1] < 0) goto error;
1041 edge[2] = HECMW_mesh_hsort_edge(node[1], node[3]);
1042 if (edge[2] < 0) goto error;
1043 edge[3] = HECMW_mesh_hsort_edge(node[3], node[2]);
1044 if (edge[3] < 0) goto error;
1045 edge[4] = HECMW_mesh_hsort_edge(node[2], node[4]);
1046 if (edge[4] < 0) goto error;
1047 edge[5] = HECMW_mesh_hsort_edge(node[4], node[0]);
1048 if (edge[5] < 0) goto error;
1049 }
1050
1051 return 0;
1052
1053error:
1054 return -1;
1055}
1056
1057static int edge_info_shq1(struct hecmwST_local_mesh *local_mesh, const int is,
1058 const int ie) {
1059 int node[4], node_index;
1060 long long int edge[4];
1061 int i, j;
1062
1063 for (i = is; i < ie; i++) {
1064 node_index = local_mesh->elem_node_index[i];
1065 for (j = 0; j < 4; j++) {
1066 node[j] = local_mesh->elem_node_item[node_index + j];
1067 }
1068
1069 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
1070 if (edge[0] < 0) goto error;
1071 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
1072 if (edge[1] < 0) goto error;
1073 edge[2] = HECMW_mesh_hsort_edge(node[2], node[3]);
1074 if (edge[2] < 0) goto error;
1075 edge[3] = HECMW_mesh_hsort_edge(node[3], node[0]);
1076 if (edge[3] < 0) goto error;
1077 }
1078
1079 return 0;
1080
1081error:
1082 return -1;
1083}
1084
1085static int edge_info_shq2(struct hecmwST_local_mesh *local_mesh, const int is,
1086 const int ie) {
1087 int node[8], node_index;
1088 long long int edge[8];
1089 int i, j;
1090
1091 for (i = is; i < ie; i++) {
1092 node_index = local_mesh->elem_node_index[i];
1093 for (j = 0; j < 8; j++) {
1094 node[j] = local_mesh->elem_node_item[node_index + j];
1095 }
1096
1097 edge[0] = HECMW_mesh_hsort_edge(node[0], node[4]);
1098 if (edge[0] < 0) goto error;
1099 edge[1] = HECMW_mesh_hsort_edge(node[4], node[1]);
1100 if (edge[1] < 0) goto error;
1101 edge[2] = HECMW_mesh_hsort_edge(node[1], node[5]);
1102 if (edge[2] < 0) goto error;
1103 edge[3] = HECMW_mesh_hsort_edge(node[5], node[2]);
1104 if (edge[3] < 0) goto error;
1105 edge[4] = HECMW_mesh_hsort_edge(node[2], node[6]);
1106 if (edge[4] < 0) goto error;
1107 edge[5] = HECMW_mesh_hsort_edge(node[6], node[3]);
1108 if (edge[5] < 0) goto error;
1109 edge[6] = HECMW_mesh_hsort_edge(node[3], node[7]);
1110 if (edge[6] < 0) goto error;
1111 edge[7] = HECMW_mesh_hsort_edge(node[7], node[0]);
1112 if (edge[7] < 0) goto error;
1113 }
1114
1115 return 0;
1116
1117error:
1118 return -1;
1119}
1120
1121static int edge_info_sht6(struct hecmwST_local_mesh *local_mesh, const int is,
1122 const int ie) {
1123 int node[6], node_index;
1124 long long int edge[9];
1125 int i, j;
1126
1127 for (i = is; i < ie; i++) {
1128 node_index = local_mesh->elem_node_index[i];
1129 for (j = 0; j < 6; j++) {
1130 node[j] = local_mesh->elem_node_item[node_index + j];
1131 }
1132
1133 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
1134 if (edge[0] < 0) goto error;
1135 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
1136 if (edge[1] < 0) goto error;
1137 edge[2] = HECMW_mesh_hsort_edge(node[2], node[0]);
1138 if (edge[2] < 0) goto error;
1139 edge[3] = HECMW_mesh_hsort_edge(node[3], node[4]);
1140 if (edge[3] < 0) goto error;
1141 edge[4] = HECMW_mesh_hsort_edge(node[4], node[5]);
1142 if (edge[4] < 0) goto error;
1143 edge[5] = HECMW_mesh_hsort_edge(node[5], node[3]);
1144 if (edge[5] < 0) goto error;
1145 edge[6] = HECMW_mesh_hsort_edge(node[0], node[3]);
1146 if (edge[6] < 0) goto error;
1147 edge[7] = HECMW_mesh_hsort_edge(node[1], node[4]);
1148 if (edge[7] < 0) goto error;
1149 edge[8] = HECMW_mesh_hsort_edge(node[2], node[5]);
1150 if (edge[8] < 0) goto error;
1151 }
1152
1153 return 0;
1154
1155error:
1156 return -1;
1157}
1158
1159static int edge_info_shq8(struct hecmwST_local_mesh *local_mesh, const int is,
1160 const int ie) {
1161 int node[8], node_index;
1162 long long int edge[12];
1163 int i, j;
1164
1165 for (i = is; i < ie; i++) {
1166 node_index = local_mesh->elem_node_index[i];
1167 for (j = 0; j < 8; j++) {
1168 node[j] = local_mesh->elem_node_item[node_index + j];
1169 }
1170
1171 edge[0] = HECMW_mesh_hsort_edge(node[0], node[1]);
1172 if (edge[0] < 0) goto error;
1173 edge[1] = HECMW_mesh_hsort_edge(node[1], node[2]);
1174 if (edge[1] < 0) goto error;
1175 edge[2] = HECMW_mesh_hsort_edge(node[2], node[3]);
1176 if (edge[2] < 0) goto error;
1177 edge[3] = HECMW_mesh_hsort_edge(node[3], node[0]);
1178 if (edge[3] < 0) goto error;
1179 edge[4] = HECMW_mesh_hsort_edge(node[4], node[5]);
1180 if (edge[4] < 0) goto error;
1181 edge[5] = HECMW_mesh_hsort_edge(node[5], node[6]);
1182 if (edge[5] < 0) goto error;
1183 edge[6] = HECMW_mesh_hsort_edge(node[6], node[7]);
1184 if (edge[6] < 0) goto error;
1185 edge[7] = HECMW_mesh_hsort_edge(node[7], node[4]);
1186 if (edge[7] < 0) goto error;
1187 edge[8] = HECMW_mesh_hsort_edge(node[0], node[4]);
1188 if (edge[8] < 0) goto error;
1189 edge[9] = HECMW_mesh_hsort_edge(node[1], node[5]);
1190 if (edge[9] < 0) goto error;
1191 edge[10] = HECMW_mesh_hsort_edge(node[2], node[6]);
1192 if (edge[10] < 0) goto error;
1193 edge[11] = HECMW_mesh_hsort_edge(node[3], node[7]);
1194 if (edge[11] < 0) goto error;
1195 }
1196
1197 return 0;
1198
1199error:
1200 return -1;
1201}
1202
1203extern int HECMW_mesh_edge_info(struct hecmwST_local_mesh *local_mesh,
1204 struct hecmw_part_edge_data *edge_data) {
1205 int rtc;
1206 int i, is, ie;
1207
1208 if (local_mesh == NULL) {
1209 HECMW_set_error(HECMW_PART_E_NULL_POINTER, "\'local_mesh\' is NULL");
1210 goto error;
1211 }
1212 if (edge_data == NULL) {
1213 HECMW_set_error(HECMW_PART_E_NULL_POINTER, "\'edge_data\' is NULL");
1214 goto error;
1215 }
1216
1217 rtc = HECMW_mesh_hsort_edge_init(local_mesh->n_node, local_mesh->n_elem);
1218 if (rtc != 0) goto error;
1219
1220 for (i = 0; i < local_mesh->n_elem_type; i++) {
1221 is = local_mesh->elem_type_index[i];
1222 ie = local_mesh->elem_type_index[i + 1];
1223
1224 switch (local_mesh->elem_type_item[i]) {
1225 case HECMW_ETYPE_ROD1: /* line ( 1st order ) */
1226 case HECMW_ETYPE_ROD31:
1227 if (edge_info_rod1(local_mesh, is, ie)) goto error;
1228 break;
1229 case HECMW_ETYPE_ROD2: /* line ( 2nd order ) */
1230 if (edge_info_rod2(local_mesh, is, ie)) goto error;
1231 break;
1232
1233 case HECMW_ETYPE_TRI1: /* triangle ( 1st order ) */
1234 if (edge_info_tri1(local_mesh, is, ie)) goto error;
1235 break;
1236 case HECMW_ETYPE_TRI2: /* triangle ( 2nd order ) */
1237 if (edge_info_tri2(local_mesh, is, ie)) goto error;
1238 break;
1239 case HECMW_ETYPE_QUA1: /* quadrangle ( 1st order ) */
1240 if (edge_info_qua1(local_mesh, is, ie)) goto error;
1241 break;
1242 case HECMW_ETYPE_QUA2: /* quadrangle ( 2nd order ) */
1243 if (edge_info_qua2(local_mesh, is, ie)) goto error;
1244 break;
1245
1246 case HECMW_ETYPE_TET1: /* tetrahedron ( 1st order ) */
1247 if (edge_info_tet1(local_mesh, is, ie)) goto error;
1248 break;
1249 case HECMW_ETYPE_TET1_4: /* tetrahedron ( 1st order ) */
1250 if (edge_info_tet1(local_mesh, is, ie)) goto error;
1251 break;
1252 case HECMW_ETYPE_TET2: /* tetrahedron ( 2nd order ) */
1253 if (edge_info_tet2(local_mesh, is, ie)) goto error;
1254 break;
1255 case HECMW_ETYPE_PYR1: /* pyramid ( 1st order ) */
1256 if (edge_info_pyr1(local_mesh, is, ie)) goto error;
1257 break;
1258 case HECMW_ETYPE_PYR2: /* pyramid ( 2nd order ) */
1259 if (edge_info_pyr2(local_mesh, is, ie)) goto error;
1260 break;
1261 case HECMW_ETYPE_PRI1: /* prism ( 1st order ) */
1262 if (edge_info_pri1(local_mesh, is, ie)) goto error;
1263 break;
1264 case HECMW_ETYPE_PRI2: /* prism ( 2nd order ) */
1265 if (edge_info_pri2(local_mesh, is, ie)) goto error;
1266 break;
1267 case HECMW_ETYPE_HEX1: /* hexahedron ( 1st order ) */
1268 if (edge_info_hex1(local_mesh, is, ie)) goto error;
1269 break;
1270 case HECMW_ETYPE_HEX1_4: /* hexahedron ( 1st order ) */
1271 if (edge_info_hex1(local_mesh, is, ie)) goto error;
1272 break;
1273 case HECMW_ETYPE_HEX2: /* hexahedron ( 2nd order ) */
1274 if (edge_info_hex2(local_mesh, is, ie)) goto error;
1275 break;
1276
1277 case HECMW_ETYPE_MST1: /* triangluar master-slave type ( 1st order ) */
1278 if (edge_info_mst1(local_mesh, is, ie)) goto error;
1279 break;
1280 case HECMW_ETYPE_MST2: /* triangluar master-slave type ( 2nd order ) */
1281 if (edge_info_mst2(local_mesh, is, ie)) goto error;
1282 break;
1283 case HECMW_ETYPE_MSQ1: /* quadrilateral master-slave type ( 1st order ) */
1284 if (edge_info_msq1(local_mesh, is, ie)) goto error;
1285 break;
1286 case HECMW_ETYPE_MSQ2: /* quadrilateral master-slave type ( 2nd order ) */
1287 if (edge_info_msq2(local_mesh, is, ie)) goto error;
1288 break;
1289 case HECMW_ETYPE_JTT1: /* triangular interface ( 1st order ) */
1290 if (edge_info_jtt1(local_mesh, is, ie)) goto error;
1291 break;
1292 case HECMW_ETYPE_JTT2: /* triangluar interface ( 2nd order ) */
1293 if (edge_info_jtt2(local_mesh, is, ie)) goto error;
1294 break;
1295 case HECMW_ETYPE_JTQ1: /* quadrilateral interface ( 1st order ) */
1296 if (edge_info_jtq1(local_mesh, is, ie)) goto error;
1297 break;
1298 case HECMW_ETYPE_JTQ2: /* quadrilateral interface ( 2nd order ) */
1299 if (edge_info_jtq2(local_mesh, is, ie)) goto error;
1300 break;
1301
1302 case HECMW_ETYPE_BEM1: /* beam ( 1st order ) */
1303 if (edge_info_bem1(local_mesh, is, ie)) goto error;
1304 break;
1305 case HECMW_ETYPE_BEM2: /* beam ( 2nd order ) */
1306 if (edge_info_bem2(local_mesh, is, ie)) goto error;
1307 break;
1308 case HECMW_ETYPE_BEM3: /* beam ( Mixed beam 341) */
1309 if (edge_info_bem3(local_mesh, is, ie)) goto error;
1310 break;
1311
1312 case HECMW_ETYPE_SHT1: /* triangluar shell ( 1st order ) */
1313 if (edge_info_sht1(local_mesh, is, ie)) goto error;
1314 break;
1315 case HECMW_ETYPE_SHT2: /* triangular shell ( 2nd order ) */
1316 if (edge_info_sht2(local_mesh, is, ie)) goto error;
1317 break;
1318 case HECMW_ETYPE_SHQ1: /* quadrilateral shell ( 1st order ) */
1319 if (edge_info_shq1(local_mesh, is, ie)) goto error;
1320 break;
1321 case HECMW_ETYPE_SHQ2: /* quadrilateral shell ( 2nd order ) */
1322 if (edge_info_shq2(local_mesh, is, ie)) goto error;
1323 break;
1324 case HECMW_ETYPE_SHT6: /* triangluar shell ( Mixed solid ) */
1325 if (edge_info_sht6(local_mesh, is, ie)) goto error;
1326 break;
1327 case HECMW_ETYPE_SHQ8: /* quadrilateral shell ( Mixed solid ) */
1328 if (edge_info_shq8(local_mesh, is, ie)) goto error;
1329 break;
1330
1331 case HECMW_ETYPE_PTT1: /* triangular patch ( 1st order ) */
1332 case HECMW_ETYPE_PTT2: /* triangular patch ( 2nd order ) */
1333 case HECMW_ETYPE_PTQ1: /* quadrilateral patch ( 1st order ) */
1334 case HECMW_ETYPE_PTQ2: /* quadrilateral patch ( 2nd order ) */
1335 break; /* no need to add any edge */
1336
1337 case HECMW_ETYPE_LN11:
1338 case HECMW_ETYPE_LN12:
1339 case HECMW_ETYPE_LN13:
1340 case HECMW_ETYPE_LN14:
1341 case HECMW_ETYPE_LN15:
1342 case HECMW_ETYPE_LN16:
1343 case HECMW_ETYPE_LN21:
1344 case HECMW_ETYPE_LN22:
1345 case HECMW_ETYPE_LN23:
1346 case HECMW_ETYPE_LN24:
1347 case HECMW_ETYPE_LN25:
1348 case HECMW_ETYPE_LN26:
1349 case HECMW_ETYPE_LN31:
1350 case HECMW_ETYPE_LN32:
1351 case HECMW_ETYPE_LN33:
1352 case HECMW_ETYPE_LN34:
1353 case HECMW_ETYPE_LN35:
1354 case HECMW_ETYPE_LN36:
1355 case HECMW_ETYPE_LN41:
1356 case HECMW_ETYPE_LN42:
1357 case HECMW_ETYPE_LN43:
1358 case HECMW_ETYPE_LN44:
1359 case HECMW_ETYPE_LN45:
1360 case HECMW_ETYPE_LN46:
1361 case HECMW_ETYPE_LN51:
1362 case HECMW_ETYPE_LN52:
1363 case HECMW_ETYPE_LN53:
1364 case HECMW_ETYPE_LN54:
1365 case HECMW_ETYPE_LN55:
1366 case HECMW_ETYPE_LN56:
1367 case HECMW_ETYPE_LN61:
1368 case HECMW_ETYPE_LN62:
1369 case HECMW_ETYPE_LN63:
1370 case HECMW_ETYPE_LN64:
1371 case HECMW_ETYPE_LN65:
1372 case HECMW_ETYPE_LN66:
1373 if (edge_info_rod1(local_mesh, is, ie)) goto error;
1374 break;
1375
1376 default:
1378 local_mesh->elem_type_item[i]);
1379 goto error;
1380 }
1381 }
1382
1383 edge_data->n_edge = HECMW_mesh_hsort_edge_get_n();
1384 if (edge_data->n_edge < 0) goto error;
1385
1387 if (edge_data->edge_node_item == NULL) goto error;
1388
1390
1391 return 0;
1392
1393error:
1395
1396 return -1;
1397}
#define HECMW_ETYPE_PRI1
#define HECMW_ETYPE_PRI2
#define HECMW_ETYPE_LN24
#define HECMW_ETYPE_MST1
#define HECMW_ETYPE_TET1_4
#define HECMW_ETYPE_BEM3
#define HECMW_ETYPE_LN54
#define HECMW_ETYPE_LN51
#define HECMW_ETYPE_LN15
#define HECMW_ETYPE_PYR1
#define HECMW_ETYPE_LN66
#define HECMW_ETYPE_LN65
#define HECMW_ETYPE_LN11
#define HECMW_ETYPE_LN43
#define HECMW_ETYPE_QUA2
#define HECMW_ETYPE_LN42
#define HECMW_ETYPE_LN32
#define HECMW_ETYPE_LN55
#define HECMW_ETYPE_MSQ2
#define HECMW_ETYPE_LN61
#define HECMW_ETYPE_JTQ2
#define HECMW_ETYPE_LN22
#define HECMW_ETYPE_SHQ1
#define HECMW_ETYPE_SHT1
#define HECMW_ETYPE_TET2
#define HECMW_ETYPE_PTQ1
#define HECMW_ETYPE_JTT2
#define HECMW_ETYPE_PTT1
#define HECMW_ETYPE_LN26
#define HECMW_ETYPE_LN33
#define HECMW_ETYPE_LN53
#define HECMW_ETYPE_LN64
#define HECMW_ETYPE_LN13
#define HECMW_ETYPE_LN46
#define HECMW_ETYPE_SHT2
#define HECMW_ETYPE_LN34
#define HECMW_ETYPE_TRI1
#define HECMW_ETYPE_SHT6
#define HECMW_ETYPE_LN41
#define HECMW_ETYPE_ROD2
#define HECMW_ETYPE_ROD31
#define HECMW_ETYPE_HEX1
#define HECMW_ETYPE_JTT1
#define HECMW_ETYPE_ROD1
#define HECMW_ETYPE_LN62
#define HECMW_ETYPE_LN45
#define HECMW_ETYPE_JTQ1
#define HECMW_ETYPE_BEM1
#define HECMW_ETYPE_QUA1
#define HECMW_ETYPE_BEM2
#define HECMW_ETYPE_SHQ8
#define HECMW_ETYPE_LN35
#define HECMW_ETYPE_LN63
#define HECMW_ETYPE_LN25
#define HECMW_ETYPE_PYR2
#define HECMW_ETYPE_LN36
#define HECMW_ETYPE_TET1
#define HECMW_ETYPE_LN52
#define HECMW_ETYPE_LN16
#define HECMW_ETYPE_HEX1_4
#define HECMW_ETYPE_LN12
#define HECMW_ETYPE_MSQ1
#define HECMW_ETYPE_LN23
#define HECMW_ETYPE_HEX2
#define HECMW_ETYPE_TRI2
#define HECMW_ETYPE_PTT2
#define HECMW_ETYPE_LN31
#define HECMW_ETYPE_LN21
#define HECMW_ETYPE_PTQ2
#define HECMW_ETYPE_LN56
#define HECMW_ETYPE_LN44
#define HECMW_ETYPE_MST2
#define HECMW_ETYPE_SHQ2
#define HECMW_ETYPE_LN14
int HECMW_set_error(int errorno, const char *fmt,...)
Definition: hecmw_error.c:37
#define NULL
int HECMW_mesh_edge_info(struct hecmwST_local_mesh *local_mesh, struct hecmw_part_edge_data *edge_data)
long long int HECMW_mesh_hsort_edge(int node1, int node2)
long long int HECMW_mesh_hsort_edge_get_n(void)
int * HECMW_mesh_hsort_edge_get_v(void)
void HECMW_mesh_hsort_edge_final(void)
int HECMW_mesh_hsort_edge_init(int n_node, int n_elem)
#define HECMW_PART_E_INVALID_ETYPE
#define HECMW_PART_E_NULL_POINTER