FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
hecmw_conn_conv.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 "hecmw_util.h"
7 #include "hecmw_common_define.h"
8 #include "hecmw_etype.h"
9 #include "hecmw_conn_conv.h"
10 
11 struct conn_conv {
12  int hecmw_etype;
14 };
15 
16 static struct conn_conv conn_conv_abaqus[] = {
17  {232, {1, 2, 3, 6, 4, 5}},
18  {342, {1, 2, 3, 4, 7, 5, 6, 8, 9, 10}},
19  {352, {1, 2, 3, 4, 5, 6, 9, 7, 8, 12, 10, 11, 13, 14, 15}},
20  {542, {1, 2, 3, 4, 9, 10, 11, 12, 5, 6, 7, 8, 13, 14, 15, 16}},
21  {-1, {-1}} /* terminator */
22 };
23 
24 #if 0
25 static struct conn_conv conn_conv_nastran[] = {
26  { -1, { -1}} /* terminator */
27 };
28 #endif
29 
30 struct conn_order {
31  int node;
33 };
34 
35 static int conn_comp(const void *c1, const void *c2) {
36  int co1 = ((struct conn_order *)c1)->hecmw_order;
37  int co2 = ((struct conn_order *)c2)->hecmw_order;
38 
39  if (co1 == co2) return 0;
40 
41  if (co1 < co2) return -1;
42 
43  return 1;
44 }
45 
46 int HECMW_convert_connectivity(int from, int hecmw_etype, int *conn) {
47  int i, j, n;
48  struct conn_conv *from_table;
49  struct conn_order order[HECMW_MAX_NODE_MAX];
50 
51  if (conn == NULL) {
53  "Connectivity contversion: 'conn' is NULL");
54  return -1;
55  }
56 
57  switch (from) {
59  return 0;
60 
62  from_table = conn_conv_abaqus;
63  break;
64 #if 0
65 
67  from_table = conn_conv_nastran;
68  break;
69 #endif
70 
71  default:
73  "Connectivity conversion: Unsupported connectivity type");
74  return -1;
75  }
76 
77  if ((n = HECMW_get_max_node(hecmw_etype)) == -1) {
79  "Connectivity conversion: Invalid 'hecmw_etype'");
80  return -1;
81  }
82 
83  for (i = 0; from_table[i].hecmw_etype != -1; i++) {
84  if (from_table[i].hecmw_etype != hecmw_etype) continue;
85 
86  for (j = 0; j < n; j++) {
87  order[j].node = conn[j];
88  order[j].hecmw_order = from_table[i].connectivity[j];
89  }
90 
91  qsort(order, n, sizeof(*order), conn_comp);
92 
93  for (j = 0; j < n; j++) {
94  conn[j] = order[j].node;
95  }
96 
97  break;
98  }
99 
100  return 0;
101 }
hecmw_etype.h
conn_order::node
int node
Definition: hecmw_conn_conv.c:31
HECMW_CONNTYPE_HECMW
#define HECMW_CONNTYPE_HECMW
Definition: hecmw_conn_conv.h:9
HECMW_MAX_NODE_MAX
#define HECMW_MAX_NODE_MAX
Definition: hecmw_common_define.h:303
conn_order
Definition: hecmw_conn_conv.c:30
conn_conv
Definition: hecmw_conn_conv.c:11
hecmw_conn_conv.h
HECMW_CONNTYPE_ABAQUS
#define HECMW_CONNTYPE_ABAQUS
Definition: hecmw_conn_conv.h:10
HECMW_convert_connectivity
int HECMW_convert_connectivity(int from, int hecmw_etype, int *conn)
Definition: hecmw_conn_conv.c:46
HECMW_get_max_node
int HECMW_get_max_node(int etype)
Definition: hecmw_etype.c:413
HECMW_ALL_E0101
#define HECMW_ALL_E0101
Definition: hecmw_msgno.h:8
conn_conv::hecmw_etype
int hecmw_etype
Definition: hecmw_conn_conv.c:15
hecmw_common_define.h
hecmw_etype
I/O and Utility.
Definition: hecmw_etype_f.f90:7
HECMW_set_error
int HECMW_set_error(int errorno, const char *fmt,...)
Definition: hecmw_error.c:37
HECMW_CONNTYPE_NASTRAN
#define HECMW_CONNTYPE_NASTRAN
Definition: hecmw_conn_conv.h:11
NULL
#define NULL
Definition: hecmw_io_nastran.c:30
conn_conv::connectivity
int connectivity[HECMW_MAX_NODE_MAX]
Definition: hecmw_conn_conv.c:16
hecmw_util.h
conn_order::hecmw_order
int hecmw_order
Definition: hecmw_conn_conv.c:32