FrontISTR  5.7.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], 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 
37 error:
38  return -1;
39 }
40 
41 static 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 
61 error:
62  return -1;
63 }
64 
65 static 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 
87 error:
88  return -1;
89 }
90 
91 static 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 
119 error:
120  return -1;
121 }
122 
123 static 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 
147 error:
148  return -1;
149 }
150 
151 static 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 
183 error:
184  return -1;
185 }
186 
187 static 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 
215 error:
216  return -1;
217 }
218 
219 static 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 
259 error:
260  return -1;
261 }
262 
263 static 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 
295 error:
296  return -1;
297 }
298 
299 static 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 
347 error:
348  return -1;
349 }
350 
351 static 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 
385 error:
386  return -1;
387 }
388 
389 static 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 
441 error:
442  return -1;
443 }
444 
445 static 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 
485 error:
486  return -1;
487 }
488 
489 static 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 
553 error:
554  return -1;
555 }
556 
557 static 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 
585 error:
586  return -1;
587 }
588 
589 static 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 
623 error:
624  return -1;
625 }
626 
627 static 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 
659 error:
660  return -1;
661 }
662 
663 static 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 
703 error:
704  return -1;
705 }
706 
707 static 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 
725 error:
726  return -1;
727 }
728 
729 static 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 
763 error:
764  return -1;
765 }
766 
767 static 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 
813 error:
814  return -1;
815 }
816 
817 static 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 
857 error:
858  return -1;
859 }
860 
861 static 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 
917 error:
918  return -1;
919 }
920 
921 static 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 
939 error:
940  return -1;
941 }
942 
943 static 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 
963 error:
964  return -1;
965 }
966 
967 static 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 
995 error:
996  return -1;
997 }
998 
999 static 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 
1021 error:
1022  return -1;
1023 }
1024 
1025 static 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 
1053 error:
1054  return -1;
1055 }
1056 
1057 static 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 
1081 error:
1082  return -1;
1083 }
1084 
1085 static 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 
1117 error:
1118  return -1;
1119 }
1120 
1121 static 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 
1155 error:
1156  return -1;
1157 }
1158 
1159 static 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 
1199 error:
1200  return -1;
1201 }
1202 
1203 extern 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  case HECMW_ETYPE_SPGDPT1:
1228  if (edge_info_rod1(local_mesh, is, ie)) goto error;
1229  break;
1230  case HECMW_ETYPE_ROD2: /* line ( 2nd order ) */
1231  if (edge_info_rod2(local_mesh, is, ie)) goto error;
1232  break;
1233 
1234  case HECMW_ETYPE_TRI1: /* triangle ( 1st order ) */
1235  if (edge_info_tri1(local_mesh, is, ie)) goto error;
1236  break;
1237  case HECMW_ETYPE_TRI2: /* triangle ( 2nd order ) */
1238  if (edge_info_tri2(local_mesh, is, ie)) goto error;
1239  break;
1240  case HECMW_ETYPE_QUA1: /* quadrangle ( 1st order ) */
1241  if (edge_info_qua1(local_mesh, is, ie)) goto error;
1242  break;
1243  case HECMW_ETYPE_QUA2: /* quadrangle ( 2nd order ) */
1244  if (edge_info_qua2(local_mesh, is, ie)) goto error;
1245  break;
1246 
1247  case HECMW_ETYPE_TET1: /* tetrahedron ( 1st order ) */
1248  if (edge_info_tet1(local_mesh, is, ie)) goto error;
1249  break;
1250  case HECMW_ETYPE_TET1_4: /* tetrahedron ( 1st order ) */
1251  if (edge_info_tet1(local_mesh, is, ie)) goto error;
1252  break;
1253  case HECMW_ETYPE_TET2: /* tetrahedron ( 2nd order ) */
1254  if (edge_info_tet2(local_mesh, is, ie)) goto error;
1255  break;
1256  case HECMW_ETYPE_PYR1: /* pyramid ( 1st order ) */
1257  if (edge_info_pyr1(local_mesh, is, ie)) goto error;
1258  break;
1259  case HECMW_ETYPE_PYR2: /* pyramid ( 2nd order ) */
1260  if (edge_info_pyr2(local_mesh, is, ie)) goto error;
1261  break;
1262  case HECMW_ETYPE_PRI1: /* prism ( 1st order ) */
1263  if (edge_info_pri1(local_mesh, is, ie)) goto error;
1264  break;
1265  case HECMW_ETYPE_PRI2: /* prism ( 2nd order ) */
1266  if (edge_info_pri2(local_mesh, is, ie)) goto error;
1267  break;
1268  case HECMW_ETYPE_HEX1: /* hexahedron ( 1st order ) */
1269  if (edge_info_hex1(local_mesh, is, ie)) goto error;
1270  break;
1271  case HECMW_ETYPE_HEX1_4: /* hexahedron ( 1st order ) */
1272  if (edge_info_hex1(local_mesh, is, ie)) goto error;
1273  break;
1274  case HECMW_ETYPE_HEX2: /* hexahedron ( 2nd order ) */
1275  if (edge_info_hex2(local_mesh, is, ie)) goto error;
1276  break;
1277 
1278  case HECMW_ETYPE_MST1: /* triangluar master-slave type ( 1st order ) */
1279  if (edge_info_mst1(local_mesh, is, ie)) goto error;
1280  break;
1281  case HECMW_ETYPE_MST2: /* triangluar master-slave type ( 2nd order ) */
1282  if (edge_info_mst2(local_mesh, is, ie)) goto error;
1283  break;
1284  case HECMW_ETYPE_MSQ1: /* quadrilateral master-slave type ( 1st order ) */
1285  if (edge_info_msq1(local_mesh, is, ie)) goto error;
1286  break;
1287  case HECMW_ETYPE_MSQ2: /* quadrilateral master-slave type ( 2nd order ) */
1288  if (edge_info_msq2(local_mesh, is, ie)) goto error;
1289  break;
1290  case HECMW_ETYPE_JTT1: /* triangular interface ( 1st order ) */
1291  if (edge_info_jtt1(local_mesh, is, ie)) goto error;
1292  break;
1293  case HECMW_ETYPE_JTT2: /* triangluar interface ( 2nd order ) */
1294  if (edge_info_jtt2(local_mesh, is, ie)) goto error;
1295  break;
1296  case HECMW_ETYPE_JTQ1: /* quadrilateral interface ( 1st order ) */
1297  if (edge_info_jtq1(local_mesh, is, ie)) goto error;
1298  break;
1299  case HECMW_ETYPE_JTQ2: /* quadrilateral interface ( 2nd order ) */
1300  if (edge_info_jtq2(local_mesh, is, ie)) goto error;
1301  break;
1302 
1303  case HECMW_ETYPE_BEM1: /* beam ( 1st order ) */
1304  if (edge_info_bem1(local_mesh, is, ie)) goto error;
1305  break;
1306  case HECMW_ETYPE_BEM2: /* beam ( 2nd order ) */
1307  if (edge_info_bem2(local_mesh, is, ie)) goto error;
1308  break;
1309  case HECMW_ETYPE_BEM3: /* beam ( Mixed beam 341) */
1310  if (edge_info_bem3(local_mesh, is, ie)) goto error;
1311  break;
1312 
1313  case HECMW_ETYPE_SHT1: /* triangluar shell ( 1st order ) */
1314  if (edge_info_sht1(local_mesh, is, ie)) goto error;
1315  break;
1316  case HECMW_ETYPE_SHT2: /* triangular shell ( 2nd order ) */
1317  if (edge_info_sht2(local_mesh, is, ie)) goto error;
1318  break;
1319  case HECMW_ETYPE_SHQ1: /* quadrilateral shell ( 1st order ) */
1320  if (edge_info_shq1(local_mesh, is, ie)) goto error;
1321  break;
1322  case HECMW_ETYPE_SHQ2: /* quadrilateral shell ( 2nd order ) */
1323  if (edge_info_shq2(local_mesh, is, ie)) goto error;
1324  break;
1325  case HECMW_ETYPE_SHT6: /* triangluar shell ( Mixed solid ) */
1326  if (edge_info_sht6(local_mesh, is, ie)) goto error;
1327  break;
1328  case HECMW_ETYPE_SHQ8: /* quadrilateral shell ( Mixed solid ) */
1329  if (edge_info_shq8(local_mesh, is, ie)) goto error;
1330  break;
1331 
1332  case HECMW_ETYPE_PTT1: /* triangular patch ( 1st order ) */
1333  case HECMW_ETYPE_PTT2: /* triangular patch ( 2nd order ) */
1334  case HECMW_ETYPE_PTQ1: /* quadrilateral patch ( 1st order ) */
1335  case HECMW_ETYPE_PTQ2: /* quadrilateral patch ( 2nd order ) */
1336  break; /* no need to add any edge */
1337 
1338  case HECMW_ETYPE_LN11:
1339  case HECMW_ETYPE_LN12:
1340  case HECMW_ETYPE_LN13:
1341  case HECMW_ETYPE_LN14:
1342  case HECMW_ETYPE_LN15:
1343  case HECMW_ETYPE_LN16:
1344  case HECMW_ETYPE_LN21:
1345  case HECMW_ETYPE_LN22:
1346  case HECMW_ETYPE_LN23:
1347  case HECMW_ETYPE_LN24:
1348  case HECMW_ETYPE_LN25:
1349  case HECMW_ETYPE_LN26:
1350  case HECMW_ETYPE_LN31:
1351  case HECMW_ETYPE_LN32:
1352  case HECMW_ETYPE_LN33:
1353  case HECMW_ETYPE_LN34:
1354  case HECMW_ETYPE_LN35:
1355  case HECMW_ETYPE_LN36:
1356  case HECMW_ETYPE_LN41:
1357  case HECMW_ETYPE_LN42:
1358  case HECMW_ETYPE_LN43:
1359  case HECMW_ETYPE_LN44:
1360  case HECMW_ETYPE_LN45:
1361  case HECMW_ETYPE_LN46:
1362  case HECMW_ETYPE_LN51:
1363  case HECMW_ETYPE_LN52:
1364  case HECMW_ETYPE_LN53:
1365  case HECMW_ETYPE_LN54:
1366  case HECMW_ETYPE_LN55:
1367  case HECMW_ETYPE_LN56:
1368  case HECMW_ETYPE_LN61:
1369  case HECMW_ETYPE_LN62:
1370  case HECMW_ETYPE_LN63:
1371  case HECMW_ETYPE_LN64:
1372  case HECMW_ETYPE_LN65:
1373  case HECMW_ETYPE_LN66:
1374  if (edge_info_rod1(local_mesh, is, ie)) goto error;
1375  break;
1376 
1377  default:
1379  local_mesh->elem_type_item[i]);
1380  goto error;
1381  }
1382  }
1383 
1384  edge_data->n_edge = HECMW_mesh_hsort_edge_get_n();
1385  if (edge_data->n_edge < 0) goto error;
1386 
1388  if (edge_data->edge_node_item == NULL) goto error;
1389 
1391 
1392  return 0;
1393 
1394 error:
1396 
1397  return -1;
1398 }
HECMW_ETYPE_LN14
#define HECMW_ETYPE_LN14
Definition: hecmw_common_define.h:59
HECMW_ETYPE_JTQ1
#define HECMW_ETYPE_JTQ1
Definition: hecmw_common_define.h:44
HECMW_ETYPE_MST1
#define HECMW_ETYPE_MST1
Definition: hecmw_common_define.h:36
HECMW_ETYPE_LN33
#define HECMW_ETYPE_LN33
Definition: hecmw_common_define.h:70
HECMW_ETYPE_SHQ2
#define HECMW_ETYPE_SHQ2
Definition: hecmw_common_define.h:52
HECMW_mesh_hsort_edge_get_n
long long int HECMW_mesh_hsort_edge_get_n(void)
Definition: hecmw_mesh_hash_sort.c:404
HECMW_ETYPE_LN22
#define HECMW_ETYPE_LN22
Definition: hecmw_common_define.h:63
hecmwST_local_mesh::elem_node_item
int * elem_node_item
Definition: hecmw_struct.h:196
HECMW_ETYPE_LN51
#define HECMW_ETYPE_LN51
Definition: hecmw_common_define.h:80
HECMW_ETYPE_BEM1
#define HECMW_ETYPE_BEM1
Definition: hecmw_common_define.h:46
HECMW_ETYPE_ROD2
#define HECMW_ETYPE_ROD2
Definition: hecmw_common_define.h:18
HECMW_ETYPE_PTT2
#define HECMW_ETYPE_PTT2
Definition: hecmw_common_define.h:93
HECMW_ETYPE_MSQ2
#define HECMW_ETYPE_MSQ2
Definition: hecmw_common_define.h:39
hecmwST_local_mesh::elem_type_item
int * elem_type_item
Definition: hecmw_struct.h:194
hecmwST_local_mesh
Definition: hecmw_struct.h:139
HECMW_ETYPE_PRI2
#define HECMW_ETYPE_PRI2
Definition: hecmw_common_define.h:30
HECMW_ETYPE_SHQ1
#define HECMW_ETYPE_SHQ1
Definition: hecmw_common_define.h:51
HECMW_ETYPE_TRI2
#define HECMW_ETYPE_TRI2
Definition: hecmw_common_define.h:20
HECMW_ETYPE_SHT6
#define HECMW_ETYPE_SHT6
Definition: hecmw_common_define.h:54
hecmwST_local_mesh::n_elem
int n_elem
Definition: hecmw_struct.h:184
HECMW_ETYPE_SHT2
#define HECMW_ETYPE_SHT2
Definition: hecmw_common_define.h:50
HECMW_ETYPE_LN35
#define HECMW_ETYPE_LN35
Definition: hecmw_common_define.h:72
HECMW_ETYPE_PRI1
#define HECMW_ETYPE_PRI1
Definition: hecmw_common_define.h:29
HECMW_ETYPE_BEM3
#define HECMW_ETYPE_BEM3
Definition: hecmw_common_define.h:48
HECMW_PART_E_INVALID_ETYPE
#define HECMW_PART_E_INVALID_ETYPE
Definition: hecmw_part_define.h:121
HECMW_PART_E_NULL_POINTER
#define HECMW_PART_E_NULL_POINTER
Definition: hecmw_part_define.h:57
HECMW_mesh_hsort_edge_init
int HECMW_mesh_hsort_edge_init(int n_node, int n_elem)
Definition: hecmw_mesh_hash_sort.c:94
HECMW_mesh_hsort_edge
long long int HECMW_mesh_hsort_edge(int node1, int node2)
Definition: hecmw_mesh_hash_sort.c:655
HECMW_ETYPE_LN62
#define HECMW_ETYPE_LN62
Definition: hecmw_common_define.h:87
hecmwST_local_mesh::n_node
int n_node
Definition: hecmw_struct.h:161
hecmw_common.h
HECMW_ETYPE_LN66
#define HECMW_ETYPE_LN66
Definition: hecmw_common_define.h:91
HECMW_ETYPE_LN25
#define HECMW_ETYPE_LN25
Definition: hecmw_common_define.h:66
HECMW_ETYPE_PYR2
#define HECMW_ETYPE_PYR2
Definition: hecmw_common_define.h:35
HECMW_ETYPE_QUA1
#define HECMW_ETYPE_QUA1
Definition: hecmw_common_define.h:22
HECMW_ETYPE_LN55
#define HECMW_ETYPE_LN55
Definition: hecmw_common_define.h:84
HECMW_ETYPE_JTT2
#define HECMW_ETYPE_JTT2
Definition: hecmw_common_define.h:43
HECMW_ETYPE_LN16
#define HECMW_ETYPE_LN16
Definition: hecmw_common_define.h:61
HECMW_ETYPE_LN56
#define HECMW_ETYPE_LN56
Definition: hecmw_common_define.h:85
HECMW_ETYPE_ROD1
#define HECMW_ETYPE_ROD1
Definition: hecmw_common_define.h:17
hecmwST_local_mesh::elem_node_index
int * elem_node_index
Definition: hecmw_struct.h:195
HECMW_ETYPE_LN13
#define HECMW_ETYPE_LN13
Definition: hecmw_common_define.h:58
HECMW_ETYPE_JTQ2
#define HECMW_ETYPE_JTQ2
Definition: hecmw_common_define.h:45
hecmwST_local_mesh::n_elem_type
int n_elem_type
Definition: hecmw_struct.h:192
hecmw_part_struct.h
HECMW_mesh_edge_info
int HECMW_mesh_edge_info(struct hecmwST_local_mesh *local_mesh, struct hecmw_part_edge_data *edge_data)
Definition: hecmw_mesh_edge_info.c:1203
HECMW_ETYPE_BEM2
#define HECMW_ETYPE_BEM2
Definition: hecmw_common_define.h:47
HECMW_mesh_hsort_edge_get_v
int * HECMW_mesh_hsort_edge_get_v(void)
Definition: hecmw_mesh_hash_sort.c:412
HECMW_ETYPE_PYR1
#define HECMW_ETYPE_PYR1
Definition: hecmw_common_define.h:34
HECMW_ETYPE_HEX1_4
#define HECMW_ETYPE_HEX1_4
Definition: hecmw_common_define.h:32
HECMW_ETYPE_LN64
#define HECMW_ETYPE_LN64
Definition: hecmw_common_define.h:89
HECMW_ETYPE_SPGDPT1
#define HECMW_ETYPE_SPGDPT1
Definition: hecmw_common_define.h:41
hecmw_part_edge_data::edge_node_item
int * edge_node_item
Definition: hecmw_part_struct.h:17
HECMW_ETYPE_LN63
#define HECMW_ETYPE_LN63
Definition: hecmw_common_define.h:88
HECMW_ETYPE_MSQ1
#define HECMW_ETYPE_MSQ1
Definition: hecmw_common_define.h:38
HECMW_ETYPE_LN15
#define HECMW_ETYPE_LN15
Definition: hecmw_common_define.h:60
hecmwST_local_mesh::elem_type_index
int * elem_type_index
Definition: hecmw_struct.h:193
HECMW_ETYPE_LN46
#define HECMW_ETYPE_LN46
Definition: hecmw_common_define.h:79
HECMW_ETYPE_SHT1
#define HECMW_ETYPE_SHT1
Definition: hecmw_common_define.h:49
HECMW_ETYPE_LN11
#define HECMW_ETYPE_LN11
Definition: hecmw_common_define.h:56
HECMW_ETYPE_LN65
#define HECMW_ETYPE_LN65
Definition: hecmw_common_define.h:90
HECMW_ETYPE_TET1_4
#define HECMW_ETYPE_TET1_4
Definition: hecmw_common_define.h:26
HECMW_ETYPE_LN45
#define HECMW_ETYPE_LN45
Definition: hecmw_common_define.h:78
HECMW_ETYPE_LN24
#define HECMW_ETYPE_LN24
Definition: hecmw_common_define.h:65
HECMW_ETYPE_LN36
#define HECMW_ETYPE_LN36
Definition: hecmw_common_define.h:73
HECMW_ETYPE_HEX1
#define HECMW_ETYPE_HEX1
Definition: hecmw_common_define.h:31
HECMW_ETYPE_PTQ1
#define HECMW_ETYPE_PTQ1
Definition: hecmw_common_define.h:94
HECMW_ETYPE_ROD31
#define HECMW_ETYPE_ROD31
Definition: hecmw_common_define.h:24
HECMW_ETYPE_LN44
#define HECMW_ETYPE_LN44
Definition: hecmw_common_define.h:77
HECMW_ETYPE_TRI1
#define HECMW_ETYPE_TRI1
Definition: hecmw_common_define.h:19
HECMW_ETYPE_SHQ8
#define HECMW_ETYPE_SHQ8
Definition: hecmw_common_define.h:55
HECMW_ETYPE_LN52
#define HECMW_ETYPE_LN52
Definition: hecmw_common_define.h:81
HECMW_ETYPE_LN12
#define HECMW_ETYPE_LN12
Definition: hecmw_common_define.h:57
HECMW_ETYPE_MST2
#define HECMW_ETYPE_MST2
Definition: hecmw_common_define.h:37
HECMW_ETYPE_TET2
#define HECMW_ETYPE_TET2
Definition: hecmw_common_define.h:27
hecmw_part_edge_data
Definition: hecmw_part_struct.h:11
HECMW_ETYPE_LN42
#define HECMW_ETYPE_LN42
Definition: hecmw_common_define.h:75
HECMW_ETYPE_LN23
#define HECMW_ETYPE_LN23
Definition: hecmw_common_define.h:64
HECMW_ETYPE_LN31
#define HECMW_ETYPE_LN31
Definition: hecmw_common_define.h:68
HECMW_ETYPE_QUA2
#define HECMW_ETYPE_QUA2
Definition: hecmw_common_define.h:23
HECMW_set_error
int HECMW_set_error(int errorno, const char *fmt,...)
Definition: hecmw_error.c:37
HECMW_ETYPE_LN53
#define HECMW_ETYPE_LN53
Definition: hecmw_common_define.h:82
HECMW_mesh_hsort_edge_final
void HECMW_mesh_hsort_edge_final(void)
Definition: hecmw_mesh_hash_sort.c:488
hecmw_mesh_hash_sort.h
NULL
#define NULL
Definition: hecmw_io_nastran.c:30
hecmw_part_edge_data::n_edge
long long int n_edge
Definition: hecmw_part_struct.h:15
hecmw_mesh_edge_info.h
HECMW_ETYPE_LN41
#define HECMW_ETYPE_LN41
Definition: hecmw_common_define.h:74
HECMW_ETYPE_PTT1
#define HECMW_ETYPE_PTT1
Definition: hecmw_common_define.h:92
HECMW_ETYPE_HEX2
#define HECMW_ETYPE_HEX2
Definition: hecmw_common_define.h:33
HECMW_ETYPE_LN26
#define HECMW_ETYPE_LN26
Definition: hecmw_common_define.h:67
hecmw_util.h
HECMW_ETYPE_LN43
#define HECMW_ETYPE_LN43
Definition: hecmw_common_define.h:76
HECMW_ETYPE_TET1
#define HECMW_ETYPE_TET1
Definition: hecmw_common_define.h:25
HECMW_ETYPE_LN32
#define HECMW_ETYPE_LN32
Definition: hecmw_common_define.h:69
HECMW_ETYPE_LN21
#define HECMW_ETYPE_LN21
Definition: hecmw_common_define.h:62
HECMW_ETYPE_PTQ2
#define HECMW_ETYPE_PTQ2
Definition: hecmw_common_define.h:95
HECMW_ETYPE_LN34
#define HECMW_ETYPE_LN34
Definition: hecmw_common_define.h:71
HECMW_ETYPE_LN54
#define HECMW_ETYPE_LN54
Definition: hecmw_common_define.h:83
HECMW_ETYPE_JTT1
#define HECMW_ETYPE_JTT1
Definition: hecmw_common_define.h:42
HECMW_ETYPE_LN61
#define HECMW_ETYPE_LN61
Definition: hecmw_common_define.h:86