14#define MASK_BIT(map, bit) ((map) |= (bit))
15#define EVAL_BIT(map, bit) ((map) & (bit))
16#define INV_BIT(map, bit) ((map) ^= (bit))
17#define CLEAR_BIT(map, bit) \
22#define BIT_DOF_THREE 2
25#define BIT_DOF_ALL (BIT_DOF_TWO | BIT_DOF_THREE | BIT_DOF_SIX | BIT_DOF_FOUR)
27#define HECMW_COMMON_EQUATION_BLOCK_NAME "EQUATION_BLOCK"
29#define NEIGHBOR_RANK 2
36#define dw_node_flag(ptr, nmemb) dw_node_flag_(ptr, nmemb, __FILE__, __LINE__)
38#define dw_node_flag(ptr, nmemb) ((void)0)
79 old = local_mesh->
node;
82 for (i = 0; i < local_mesh->
n_node; i++) {
83 new[3 * i] = old[3 * (node_new2old[i] - 1)];
84 new[3 * i + 1] = old[3 * (node_new2old[i] - 1) + 1];
85 new[3 * i + 2] = old[3 * (node_new2old[i] - 1) + 2];
88 local_mesh->
node =
new;
112 for (i = 0; i < local_mesh->
n_node; i++) {
113 new[2 * i] = old[2 * (node_new2old[i] - 1)];
114 new[2 * i + 1] = old[2 * (node_new2old[i] - 1) + 1];
141 for (i = 0; i < local_mesh->
n_node; i++) {
142 new[i] = old[node_new2old[i] - 1];
157 int *new_index, *old_index;
158 double *new_item, *old_item;
164 if (new_index ==
NULL) {
170 if (new_item ==
NULL) {
180 for (counter = 0, i = 0; i < local_mesh->
n_node; i++) {
181 old_id = node_new2old[i];
183 for (j = old_index[old_id - 1]; j < old_index[old_id]; j++) {
184 new_item[counter++] = old_item[j];
186 new_index[i + 1] = counter;
220 if (!local_mesh->
mpc->
n_mpc)
return 0;
243 j < local_mesh->node_group->grp_index[i + 1]; j++) {
257 int *node_new2old,
int *node_old2new) {
259 if (old2new_node(local_mesh, node_new2old))
return -1;
262 if (old2new_node_ID(local_mesh, node_new2old))
return -1;
265 if (old2new_global_node_ID(local_mesh, node_new2old))
return -1;
269 if (old2new_node_init_val(local_mesh, node_new2old))
return -1;
273 if (old2new_elem_node_item(local_mesh, node_old2new))
return -1;
277 if (old2new_mpc_item(local_mesh, node_old2new))
return -1;
282 if (old2new_node_grp_item(local_mesh, node_old2new))
return -1;
309 for (i = 0; i < local_mesh->
n_elem; i++) {
310 new[i] = local_mesh->
elem_type[elem_new2old[i] - 1];
325 int *new_index, *old_index;
326 int *new_item, *old_item;
332 if (new_index ==
NULL) {
338 if (new_item ==
NULL) {
348 for (counter = 0, i = 0; i < local_mesh->
n_elem; i++) {
349 old_id = elem_new2old[i];
351 for (j = old_index[old_id - 1]; j < old_index[old_id]; j++) {
352 new_item[counter++] = old_item[j];
354 new_index[i + 1] = counter;
384 for (i = 0; i < local_mesh->
n_elem; i++) {
385 new[2 * i] = old[2 * (elem_new2old[i] - 1)];
386 new[2 * i + 1] = old[2 * (elem_new2old[i] - 1) + 1];
413 for (i = 0; i < local_mesh->
n_elem; i++) {
414 new[i] = old[elem_new2old[i] - 1];
441 for (i = 0; i < local_mesh->
n_elem; i++) {
442 new[i] = local_mesh->
section_ID[elem_new2old[i] - 1];
457 int *new_index, *old_index;
458 int *new_item, *old_item;
464 if (new_index ==
NULL) {
470 if (new_item ==
NULL) {
480 for (counter = 0, i = 0; i < local_mesh->
n_elem; i++) {
481 old_id = elem_new2old[i];
483 for (j = old_index[old_id - 1]; j < old_index[old_id]; j++) {
484 new_item[counter++] = old_item[j];
486 new_index[i + 1] = counter;
552 int *elem_new2old,
int *elem_old2new) {
554 if (old2new_elem_type(local_mesh, elem_new2old))
return -1;
557 if (old2new_elem_node(local_mesh, elem_new2old))
return -1;
560 if (old2new_elem_ID(local_mesh, elem_new2old))
return -1;
563 if (old2new_global_elem_ID(local_mesh, elem_new2old))
return -1;
566 if (old2new_section_ID(local_mesh, elem_new2old))
return -1;
569 if (old2new_mat_ID(local_mesh, elem_new2old))
return -1;
572 if (old2new_elem_internal_list(local_mesh, elem_old2new))
return -1;
576 if (old2new_elem_grp_item(local_mesh, elem_old2new))
return -1;
581 if (old2new_surf_grp_item(local_mesh, elem_old2new))
return -1;
598 int n_eqn_block, eqn_block_idx;
604 eqn_block_idx = get_eqn_block_idx( local_mesh );
612 new_item = (
int *)
HECMW_calloc( n_eqn_block,
sizeof(
int) );
613 if( new_item ==
NULL ) {
618 for( js=0, i=grp->
grp_index[eqn_block_idx]; i<grp->
grp_index[eqn_block_idx+1]; i++ ) {
619 new_item[eqn_block_old2new[i-grp->
grp_index[eqn_block_idx]]] = grp->
grp_item[i] - js;
623 for( counter=0, i=0; i<n_eqn_block; i++ ) {
624 counter += new_item[i];
637old2new_eqn_block_info(
struct hecmwST_local_mesh *local_mesh,
int *eqn_block_old2new )
640 if(old2new_eqn_block( local_mesh, eqn_block_old2new ))
return -1;
660 for (i = 0; i < local_mesh->
n_elem; i++) {
697 int *counter,
int *elem_new2old,
729 for (j = 0; j < local_mesh->
n_elem; j++) {
731 elem_new2old[elems] = j + 1;
732 elem_old2new[j] = elems + 1;
757 if (counter ==
NULL) {
763 if (elem_new2old ==
NULL) {
769 if (elem_old2new ==
NULL) {
775 if (count_each_elem_type(local_mesh, counter)) {
780 if (set_n_elem_type(local_mesh, counter)) {
785 if (set_elem_type_index(local_mesh, counter, elem_new2old, elem_old2new)) {
790 if (old2new_elem_info(local_mesh, elem_new2old, elem_old2new)) {
809 char *node_flag,
const int is,
const int ie,
810 const int n_comp,
const int n_dof) {
814 for (i = is; i < ie; i++) {
817 for (j = 0; j < n_comp; j++) {
819 MASK_BIT(node_flag[node - 1], n_dof);
964 if (mask_node_dof_inner(local_mesh, node_flag, is, ie, n_comp, n_dof))
975 char *node_flag,
int *node_new2old,
976 int *node_old2new,
char *dof_flag,
int *n_dof_tot) {
981 for (i = 0; i < local_mesh->
n_node; i++) {
983 node_old2new[i] = counter + 1;
984 node_new2old[counter] = i + 1;
994 for (i = 0; i < local_mesh->
n_node; i++) {
996 node_old2new[i] = counter + 1;
997 node_new2old[counter] = i + 1;
1007 for (i = 0; i < local_mesh->
n_node; i++) {
1009 node_old2new[i] = counter + 1;
1010 node_new2old[counter] = i + 1;
1020 for (i = 0; i < local_mesh->
n_node; i++) {
1022 node_old2new[i] = counter + 1;
1023 node_new2old[counter] = i + 1;
1043 char *node_flag,
char *block_flag,
const int eqn_block_idx )
1049 for( js=0, i=grp->
grp_index[eqn_block_idx]; i<grp->
grp_index[eqn_block_idx+1]; i++ ) {
1050 for( dof_max=0, j=js; j<grp->
grp_item[i]; j++ ) {
1065 char *node_flag,
char *block_flag,
1066 int *node_new2old,
int *node_old2new,
int *block_old2new,
1067 const int n_eqn_block,
const int eqn_block_idx,
1068 char *dof_flag,
int *n_dof_tot )
1072 int counter=0, blocks=0;
1076 for( js=0, i=0; i<n_eqn_block; i++ ) {
1078 block_old2new[i] = blocks++;
1080 for( j=js; j<grp->
grp_item[idx+i]; j++ ) {
1081 node_old2new[j] = counter+1;
1082 node_new2old[counter] = j+1;
1094 for( js=0, i=0; i<n_eqn_block; i++ ) {
1096 block_old2new[i] = blocks++;
1098 for( j=js; j<grp->
grp_item[idx+i]; j++ ) {
1099 node_old2new[j] = counter+1;
1100 node_new2old[counter] = j+1;
1112 for( js=0, i=0; i<n_eqn_block; i++ ) {
1114 block_old2new[i] = blocks++;
1116 for( j=js; j<grp->
grp_item[idx+i]; j++ ) {
1117 node_old2new[j] = counter+1;
1118 node_new2old[counter] = j+1;
1130 for( js=0, i=0; i<n_eqn_block; i++ ) {
1132 block_old2new[i] = blocks++;
1134 for( j=js; j<grp->
grp_item[idx+i]; j++ ) {
1135 node_old2new[j] = counter+1;
1136 node_new2old[counter] = j+1;
1155 char *node_flag,
int *node_new2old,
int *node_old2new,
1156 char *dof_flag,
int *n_dof_tot )
1161 int n_eqn_block, eqn_block_idx;
1164 eqn_block_idx = get_eqn_block_idx( local_mesh );
1165 if( eqn_block_idx < 0 ) {
1174 block_flag = (
char *)
HECMW_calloc( n_eqn_block,
sizeof(
char) );
1175 if( block_flag ==
NULL ) {
1180 block_old2new = (
int *)
HECMW_malloc(
sizeof(
int)*n_eqn_block );
1181 if( block_old2new ==
NULL ) {
1187 if(mask_eqn_block( local_mesh, node_flag, block_flag, eqn_block_idx ))
return -1;
1190 if(reorder_node_dof_4mpc_inner( local_mesh, node_flag, block_flag, node_new2old, node_old2new, block_old2new, n_eqn_block, eqn_block_idx, dof_flag, n_dof_tot ))
return -1;
1193 if(old2new_eqn_block_info( local_mesh, block_old2new ))
return -1;
1244 char *dof_flag,
int *n_dof_tot) {
1314 char dof_flag =
'\0';
1322 if (node_flag ==
NULL) {
1328 if (node_new2old ==
NULL) {
1334 if (node_old2new ==
NULL) {
1344 if (mask_node_dof(local_mesh, node_flag)) {
1366 if (reorder_node_dof(local_mesh, node_flag, node_new2old, node_old2new,
1367 &dof_flag, n_dof_tot)) {
1379 if (count_n_dof_grp(local_mesh, &dof_flag)) {
1383 if (create_node_dof_item(local_mesh, &dof_flag, n_dof_tot)) {
1388 if (old2new_node_info(local_mesh, node_new2old, node_old2new)) {
1407 int *mpc_node_flag,
int *mpc_index_flag) {
1408 int node, min_group, group;
1411 for (i = 0; i < local_mesh->
mpc->
n_mpc; i++) {
1418 for (j = js; j < je; j++) {
1423 group = mpc_node_flag[node - 1];
1424 mpc_node_flag[node - 1] = (group < 0) ? i : group;
1427 min_group = (mpc_index_flag[mpc_node_flag[node - 1]] < min_group)
1428 ? mpc_index_flag[mpc_node_flag[node - 1]]
1433 for (j = js; j < je; j++) {
1435 group = mpc_node_flag[node - 1];
1437 mpc_index_flag[group] = min_group;
1439 mpc_index_flag[i] = min_group;
1443 for (i = 0; i < local_mesh->
mpc->
n_mpc; i++) {
1444 group = mpc_index_flag[i];
1445 mpc_index_flag[i] = mpc_index_flag[group];
1456 int *mpc_index_flag,
int *mpc_group2block) {
1463 if (n_block ==
NULL) {
1469 for (i = 0; i < local_mesh->
mpc->
n_mpc; i++) {
1470 block = mpc_index_flag[i];
1476 for (counter = 0, i = 0; i < local_mesh->
mpc->
n_mpc; i++) {
1477 if (n_block[i]) mpc_group2block[i] = counter++;
1495 int *mpc_node_flag) {
1498 for (i = 0; i < local_mesh->
n_node; i++) {
1499 if (mpc_node_flag[i] < 0) (eqn_block->
n_eqn_block)++;
1510 int *mpc_node_flag,
int *mpc_index_flag,
1511 int *mpc_group2block) {
1515 for (counter = eqn_block->
n_mpc_block, i = 0; i < local_mesh->n_node; i++) {
1516 if (mpc_node_flag[i] >= 0) {
1517 mpc_node_flag[i] = mpc_group2block[mpc_index_flag[mpc_node_flag[i]]];
1519 mpc_node_flag[i] = counter++;
1533 int *mpc_node_flag,
int *mpc_group2block) {
1539 if (n_block ==
NULL) {
1552 for (i = 0; i < local_mesh->
n_node; i++) {
1553 (n_block[mpc_node_flag[i]])++;
1576 int *mpc_node_flag,
int *node_old2new,
1577 int *node_new2old) {
1583 if (n_block ==
NULL) {
1588 for (i = 0; i < local_mesh->
n_node; i++) {
1590 n_block[mpc_node_flag[i]];
1591 node_old2new[i] = new_id + 1;
1592 node_new2old[new_id] = i + 1;
1593 (n_block[mpc_node_flag[i]])++;
1659 int *mpc_node_flag, *mpc_index_flag, *mpc_group2block;
1660 int *node_old2new, *node_new2old;
1664 if (local_mesh->
mpc->
n_mpc == 0)
return 0;
1668 if (mpc_node_flag ==
NULL) {
1672 for (i = 0; i < local_mesh->
n_node; i++) {
1673 mpc_node_flag[i] = -1;
1677 if (mpc_index_flag ==
NULL) {
1681 for (i = 0; i < local_mesh->
mpc->
n_mpc; i++) {
1682 mpc_index_flag[i] = i;
1687 if (eqn_block ==
NULL) {
1693 if (set_mpc_block(local_mesh, mpc_node_flag, mpc_index_flag)) {
1699 if (mpc_group2block ==
NULL) {
1703 for (i = 0; i < local_mesh->
mpc->
n_mpc; i++) mpc_group2block[i] = -1;
1705 if (count_mpc_block(local_mesh, eqn_block, mpc_index_flag, mpc_group2block)) {
1710 if (count_eqn_block(local_mesh, eqn_block, mpc_node_flag)) {
1715 if (set_eqn_block_of_node(local_mesh, eqn_block, mpc_node_flag,
1716 mpc_index_flag, mpc_group2block)) {
1721 if (create_eqn_block_index(local_mesh, eqn_block, mpc_node_flag,
1731 if (node_old2new ==
NULL) {
1737 if (node_new2old ==
NULL) {
1742 if (create_old2new_node(local_mesh, eqn_block, mpc_node_flag, node_old2new,
1747 if (old2new_node_info(local_mesh, node_new2old, node_old2new)) {
1756 if (reconstruct_node_grp(local_mesh, eqn_block)) {
#define HECMW_ETYPE_TET1_4
#define HECMW_ETYPE_TRI22
#define HECMW_MESH_DOF_SIX
#define HECMW_MESH_DOF_TOT
#define HECMW_MESH_DOF_THREE
#define HECMW_MESH_ETYPE_MAX
#define HECMW_COMMON_E_ALLOCATION
#define HECMW_MESH_DOF_TWO
#define HECMW_COMMON_E_OUT_OF_RANGE
#define HECMW_ETYPE_ROD31
#define HECMW_COMMON_W_NO_EQN_BLOCK
#define HECMW_MESH_DOF_MAX
#define HECMW_ETYPE_HEX1_4
#define HECMW_ETYPE_TET22
#define HECMW_MESH_DOF_FOUR
int HECMW_set_error(int errorno, const char *fmt,...)
int HECMW_get_etype_UTIL2HECMW(int etype)
int HECMW_get_max_node(int etype)
int HECMW_get_etype_HECMW2UTIL(int etype)
#define HECMW_calloc(nmemb, size)
#define HECMW_realloc(ptr, size)
#define HECMW_malloc(size)
#define CLEAR_BIT(map, bit)
int HECMW_reorder(struct hecmwST_local_mesh *local_mesh)
int HECMW_reorder_elem_type(struct hecmwST_local_mesh *local_mesh)
int HECMW_reorder_node_dof(struct hecmwST_local_mesh *local_mesh)
#define EVAL_BIT(map, bit)
#define HECMW_COMMON_EQUATION_BLOCK_NAME
int HECMW_reorder_node_mpc(struct hecmwST_local_mesh *local_mesh)
#define MASK_BIT(map, bit)
void HECMW_print_msg(int loglv, int msgno, const char *fmt,...)
#define HECMW_assert(cond)
struct hecmwST_node_grp * node_group
double * node_init_val_item
struct hecmwST_surf_grp * surf_group
struct hecmwST_elem_grp * elem_group
int * node_init_val_index