FrontISTR  6.0.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 static int edge_info_nn(struct hecmwST_local_mesh *local_mesh, const int is,
1225  const int ie) {
1226 #ifdef HECMW_ARCH_FX64
1227  int node[27];
1228  long long node_index0, node_index1;
1229  long long int edge[351];
1230  int i, j, k, l, count;
1231  int nn;
1232 
1233  node_index0 = local_mesh->elem_node_index[is];
1234  for (i = is; i < ie; i++) {
1235  node_index1 = local_mesh->elem_node_index[i+1];
1236  nn = node_index1 - node_index0;
1237  for (j = 0; j < nn; j++) {
1238  node[j] = local_mesh->elem_node_item[node_index0 + j];
1239  }
1240 
1241  count = 0;
1242  for (k = 0; k < nn; k++) {
1243  for (l = k+1; l < nn; l++) {
1244  edge[count] = HECMW_mesh_hsort_edge(node[k], node[l]);
1245  if (edge[count] < 0) goto error;
1246  count++;
1247  }
1248  }
1249  node_index0 = node_index1;
1250  }
1251 
1252  return 0;
1253 
1254 error:
1255  return -1;
1256 #else
1257  return 0;
1258 #endif
1259 }
1260 
1261 extern int HECMW_mesh_edge_info(struct hecmwST_local_mesh *local_mesh,
1262 #ifdef HECMW_ARCH_FX64
1263  struct hecmw_part_edge_data *edge_data,
1264  const int edge_create_type) {
1265 #else
1266  struct hecmw_part_edge_data *edge_data) {
1267 #endif
1268  int rtc;
1269  int i, is, ie;
1270 
1271  if (local_mesh == NULL) {
1272  HECMW_set_error(HECMW_PART_E_NULL_POINTER, "\'local_mesh\' is NULL");
1273  goto error;
1274  }
1275  if (edge_data == NULL) {
1276  HECMW_set_error(HECMW_PART_E_NULL_POINTER, "\'edge_data\' is NULL");
1277  goto error;
1278  }
1279 
1280  rtc = HECMW_mesh_hsort_edge_init(local_mesh->n_node, local_mesh->n_elem);
1281  if (rtc != 0) goto error;
1282 
1283 #ifdef HECMW_ARCH_FX64
1284  if ( edge_create_type == 0 ) { //element edge based creation
1285 #endif
1286  for (i = 0; i < local_mesh->n_elem_type; i++) {
1287  is = local_mesh->elem_type_index[i];
1288  ie = local_mesh->elem_type_index[i + 1];
1289 
1290  switch (local_mesh->elem_type_item[i]) {
1291  case HECMW_ETYPE_ROD1: /* line ( 1st order ) */
1292  case HECMW_ETYPE_ROD31:
1293  case HECMW_ETYPE_SPGDPT1:
1294  if (edge_info_rod1(local_mesh, is, ie)) goto error;
1295  break;
1296  case HECMW_ETYPE_ROD2: /* line ( 2nd order ) */
1297  if (edge_info_rod2(local_mesh, is, ie)) goto error;
1298  break;
1299 
1300  case HECMW_ETYPE_TRI1: /* triangle ( 1st order ) */
1301  if (edge_info_tri1(local_mesh, is, ie)) goto error;
1302  break;
1303  case HECMW_ETYPE_TRI2: /* triangle ( 2nd order ) */
1304  if (edge_info_tri2(local_mesh, is, ie)) goto error;
1305  break;
1306  case HECMW_ETYPE_QUA1: /* quadrangle ( 1st order ) */
1307  if (edge_info_qua1(local_mesh, is, ie)) goto error;
1308  break;
1309  case HECMW_ETYPE_QUA2: /* quadrangle ( 2nd order ) */
1310  if (edge_info_qua2(local_mesh, is, ie)) goto error;
1311  break;
1312 
1313  case HECMW_ETYPE_TET1: /* tetrahedron ( 1st order ) */
1314  if (edge_info_tet1(local_mesh, is, ie)) goto error;
1315  break;
1316  case HECMW_ETYPE_TET1_4: /* tetrahedron ( 1st order ) */
1317  if (edge_info_tet1(local_mesh, is, ie)) goto error;
1318  break;
1319  case HECMW_ETYPE_TET2: /* tetrahedron ( 2nd order ) */
1320  if (edge_info_tet2(local_mesh, is, ie)) goto error;
1321  break;
1322  case HECMW_ETYPE_PYR1: /* pyramid ( 1st order ) */
1323  if (edge_info_pyr1(local_mesh, is, ie)) goto error;
1324  break;
1325  case HECMW_ETYPE_PYR2: /* pyramid ( 2nd order ) */
1326  if (edge_info_pyr2(local_mesh, is, ie)) goto error;
1327  break;
1328  case HECMW_ETYPE_PRI1: /* prism ( 1st order ) */
1329  if (edge_info_pri1(local_mesh, is, ie)) goto error;
1330  break;
1331  case HECMW_ETYPE_PRI2: /* prism ( 2nd order ) */
1332  if (edge_info_pri2(local_mesh, is, ie)) goto error;
1333  break;
1334  case HECMW_ETYPE_HEX1: /* hexahedron ( 1st order ) */
1335  if (edge_info_hex1(local_mesh, is, ie)) goto error;
1336  break;
1337  case HECMW_ETYPE_HEX1_4: /* hexahedron ( 1st order ) */
1338  if (edge_info_hex1(local_mesh, is, ie)) goto error;
1339  break;
1340  case HECMW_ETYPE_HEX2: /* hexahedron ( 2nd order ) */
1341  if (edge_info_hex2(local_mesh, is, ie)) goto error;
1342  break;
1343 
1344  case HECMW_ETYPE_MST1: /* triangluar master-slave type ( 1st order ) */
1345  if (edge_info_mst1(local_mesh, is, ie)) goto error;
1346  break;
1347  case HECMW_ETYPE_MST2: /* triangluar master-slave type ( 2nd order ) */
1348  if (edge_info_mst2(local_mesh, is, ie)) goto error;
1349  break;
1350  case HECMW_ETYPE_MSQ1: /* quadrilateral master-slave type ( 1st order ) */
1351  if (edge_info_msq1(local_mesh, is, ie)) goto error;
1352  break;
1353  case HECMW_ETYPE_MSQ2: /* quadrilateral master-slave type ( 2nd order ) */
1354  if (edge_info_msq2(local_mesh, is, ie)) goto error;
1355  break;
1356  case HECMW_ETYPE_JTT1: /* triangular interface ( 1st order ) */
1357  if (edge_info_jtt1(local_mesh, is, ie)) goto error;
1358  break;
1359  case HECMW_ETYPE_JTT2: /* triangluar interface ( 2nd order ) */
1360  if (edge_info_jtt2(local_mesh, is, ie)) goto error;
1361  break;
1362  case HECMW_ETYPE_JTQ1: /* quadrilateral interface ( 1st order ) */
1363  if (edge_info_jtq1(local_mesh, is, ie)) goto error;
1364  break;
1365  case HECMW_ETYPE_JTQ2: /* quadrilateral interface ( 2nd order ) */
1366  if (edge_info_jtq2(local_mesh, is, ie)) goto error;
1367  break;
1368 
1369  case HECMW_ETYPE_BEM1: /* beam ( 1st order ) */
1370  if (edge_info_bem1(local_mesh, is, ie)) goto error;
1371  break;
1372  case HECMW_ETYPE_BEM2: /* beam ( 2nd order ) */
1373  if (edge_info_bem2(local_mesh, is, ie)) goto error;
1374  break;
1375  case HECMW_ETYPE_BEM3: /* beam ( Mixed beam 341) */
1376  if (edge_info_bem3(local_mesh, is, ie)) goto error;
1377  break;
1378 
1379  case HECMW_ETYPE_SHT1: /* triangluar shell ( 1st order ) */
1380  if (edge_info_sht1(local_mesh, is, ie)) goto error;
1381  break;
1382  case HECMW_ETYPE_SHT2: /* triangular shell ( 2nd order ) */
1383  if (edge_info_sht2(local_mesh, is, ie)) goto error;
1384  break;
1385  case HECMW_ETYPE_SHQ1: /* quadrilateral shell ( 1st order ) */
1386  if (edge_info_shq1(local_mesh, is, ie)) goto error;
1387  break;
1388  case HECMW_ETYPE_SHQ2: /* quadrilateral shell ( 2nd order ) */
1389  if (edge_info_shq2(local_mesh, is, ie)) goto error;
1390  break;
1391  case HECMW_ETYPE_SHT6: /* triangluar shell ( Mixed solid ) */
1392  if (edge_info_sht6(local_mesh, is, ie)) goto error;
1393  break;
1394  case HECMW_ETYPE_SHQ8: /* quadrilateral shell ( Mixed solid ) */
1395  if (edge_info_shq8(local_mesh, is, ie)) goto error;
1396  break;
1397 
1398  case HECMW_ETYPE_PTT1: /* triangular patch ( 1st order ) */
1399  case HECMW_ETYPE_PTT2: /* triangular patch ( 2nd order ) */
1400  case HECMW_ETYPE_PTQ1: /* quadrilateral patch ( 1st order ) */
1401  case HECMW_ETYPE_PTQ2: /* quadrilateral patch ( 2nd order ) */
1402  break; /* no need to add any edge */
1403 
1404  case HECMW_ETYPE_LN11:
1405  case HECMW_ETYPE_LN12:
1406  case HECMW_ETYPE_LN13:
1407  case HECMW_ETYPE_LN14:
1408  case HECMW_ETYPE_LN15:
1409  case HECMW_ETYPE_LN16:
1410  case HECMW_ETYPE_LN21:
1411  case HECMW_ETYPE_LN22:
1412  case HECMW_ETYPE_LN23:
1413  case HECMW_ETYPE_LN24:
1414  case HECMW_ETYPE_LN25:
1415  case HECMW_ETYPE_LN26:
1416  case HECMW_ETYPE_LN31:
1417  case HECMW_ETYPE_LN32:
1418  case HECMW_ETYPE_LN33:
1419  case HECMW_ETYPE_LN34:
1420  case HECMW_ETYPE_LN35:
1421  case HECMW_ETYPE_LN36:
1422  case HECMW_ETYPE_LN41:
1423  case HECMW_ETYPE_LN42:
1424  case HECMW_ETYPE_LN43:
1425  case HECMW_ETYPE_LN44:
1426  case HECMW_ETYPE_LN45:
1427  case HECMW_ETYPE_LN46:
1428  case HECMW_ETYPE_LN51:
1429  case HECMW_ETYPE_LN52:
1430  case HECMW_ETYPE_LN53:
1431  case HECMW_ETYPE_LN54:
1432  case HECMW_ETYPE_LN55:
1433  case HECMW_ETYPE_LN56:
1434  case HECMW_ETYPE_LN61:
1435  case HECMW_ETYPE_LN62:
1436  case HECMW_ETYPE_LN63:
1437  case HECMW_ETYPE_LN64:
1438  case HECMW_ETYPE_LN65:
1439  case HECMW_ETYPE_LN66:
1440  if (edge_info_rod1(local_mesh, is, ie)) goto error;
1441  break;
1442 
1443  default:
1445  local_mesh->elem_type_item[i]);
1446  goto error;
1447  }
1448  }
1449 #ifdef HECMW_ARCH_FX64
1450 
1451  } else if ( edge_create_type == 1 ) { //element volume based creation
1452  if (edge_info_nn(local_mesh, 0, local_mesh->n_elem)) goto error;
1453  }
1454 #endif
1455 
1456  edge_data->n_edge = HECMW_mesh_hsort_edge_get_n();
1457  if (edge_data->n_edge < 0) goto error;
1458 
1459  edge_data->edge_node_item = HECMW_mesh_hsort_edge_get_v();
1460  if (edge_data->edge_node_item == NULL) goto error;
1461 
1463 
1464  return 0;
1465 
1466 error:
1468 
1469  return -1;
1470 }
#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:33
#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:204