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