21 index_connect[i + 1] = index_connect[i] + 4;
23 index_connect[i + 1] = index_connect[i] + 5;
25 index_connect[i + 1] = index_connect[i] + 6;
27 index_connect[i + 1] = index_connect[i] + 0;
33 int pe_no,
int *export_element,
34 int *index_a_connect) {
37 index_a_connect[0] = 0;
38 for (i = 0; i < num_export; i++) {
42 index_a_connect[i + 1] = index_a_connect[i] + 4;
46 index_a_connect[i + 1] = index_a_connect[i] + 5;
50 index_a_connect[i + 1] = index_a_connect[i] + 6;
52 index_a_connect[i + 1] = index_a_connect[i] + 0;
58 int index_face_prism[6],
int face_prism[18],
59 int index_face_hexa[7],
int face_hexa[24]) {
61 index_face_tetra[0] = 0;
62 for (i = 0; i < 4; i++) index_face_tetra[i + 1] = (i + 1) * 3;
76 index_face_prism[0] = 0;
77 for (i = 0; i < 3; i++) index_face_prism[i + 1] = (i + 1) * 4;
78 index_face_prism[4] = 15;
79 index_face_prism[5] = 18;
99 index_face_hexa[0] = 0;
100 for (i = 0; i < 6; i++) index_face_hexa[i + 1] = (i + 1) * 4;
144 int face_tetra[12],
int index_face_prism[6],
145 int face_prism[18],
int index_face_hexa[7],
147 int i, j, k, n_elem, node[
MAX_N_NODE], nodesum;
150 for (i = 0; i < n_elem; i++) {
156 for (j = 0; j < 4; j++) {
158 for (k = index_face_tetra[j]; k < index_face_tetra[j + 1]; k++)
159 nodesum += node[face_tetra[k]];
163 for (j = 0; j < 5; j++) {
165 for (k = index_face_prism[j]; k < index_face_prism[j + 1]; k++)
166 nodesum += node[face_prism[k]];
170 for (j = 0; j < 6; j++) {
172 for (k = index_face_hexa[j]; k < index_face_hexa[j + 1]; k++)
173 nodesum += node[face_hexa[k]];
185 for (i = 0; i < num - 1; i++)
186 for (j = i + 1; j < num; j++) {
198 for (i = 0; i < num; i++) {
199 if (n[i] != nn[i]) flag = 0;
204 int is_connect(
int elemID1,
int faceID1,
int elemID2,
int faceID2,
206 int face_tetra[12],
int index_face_prism[6],
int face_prism[18],
207 int index_face_hexa[7],
int face_hexa[24]) {
222 f_num1 = index_face_tetra[faceID1 + 1] - index_face_tetra[faceID1];
223 for (k = 0; k < f_num1; k++)
224 face1[k] = node1[face_tetra[index_face_tetra[faceID1] + k]];
227 f_num1 = index_face_prism[faceID1 + 1] - index_face_prism[faceID1];
228 for (k = 0; k < f_num1; k++)
229 face1[k] = node1[face_prism[index_face_prism[faceID1] + k]];
232 f_num1 = index_face_hexa[faceID1 + 1] - index_face_hexa[faceID1];
233 for (k = 0; k < f_num1; k++)
234 face1[k] = node1[face_hexa[index_face_hexa[faceID1] + k]];
238 f_num2 = index_face_tetra[faceID2 + 1] - index_face_tetra[faceID2];
239 for (k = 0; k < f_num2; k++)
240 face2[k] = node2[face_tetra[index_face_tetra[faceID2] + k]];
243 f_num2 = index_face_prism[faceID2 + 1] - index_face_prism[faceID2];
244 for (k = 0; k < f_num2; k++)
245 face2[k] = node2[face_prism[index_face_prism[faceID2] + k]];
250 f_num2 = index_face_hexa[faceID2 + 1] - index_face_hexa[faceID2];
251 for (k = 0; k < f_num2; k++)
252 face2[k] = node2[face_hexa[index_face_hexa[faceID2] + k]];
255 if (f_num1 != f_num2) flag = 0;
266 int index_face_tetra[5],
int face_tetra[12],
267 int index_face_prism[6],
int face_prism[18],
268 int index_face_hexa[7],
int face_hexa[24]) {
269 int elemID2, faceID2;
274 if (h_table[hashID].elemID > 0) {
277 if (p1->
elemID != elemID1) {
281 index_face_tetra, face_tetra, index_face_prism,
282 face_prism, index_face_hexa, face_hexa)) {
283 tmp_connect[0] = elemID2;
284 tmp_connect[1] = faceID2;
299 for (i = 0; i < maxadd; i++) {
324 int *index_connect,
int *connect,
325 int index_face_tetra[5],
int face_tetra[12],
326 int index_face_prism[6],
int face_prism[18],
327 int index_face_hexa[7],
int face_hexa[24]) {
328 int i, j, k, n_elem, node[
MAX_N_NODE], nodesum, tmp_connect[2];
332 for (i = 0; i < n_elem; i++) {
338 for (j = 0; j < 4; j++) {
340 for (k = index_face_tetra[j]; k < index_face_tetra[j + 1]; k++) {
341 nodesum += node[face_tetra[k]];
344 index_face_tetra, face_tetra, index_face_prism,
345 face_prism, index_face_hexa, face_hexa);
347 connect[(index_connect[i] + j) * 3] = tmp_connect[0];
348 connect[(index_connect[i] + j) * 3 + 1] = tmp_connect[1];
350 connect[(index_connect[i] + j) * 3] = -1;
351 connect[(index_connect[i] + j) * 3 + 1] = -1;
355 for (j = 0; j < 5; j++) {
357 for (k = index_face_prism[j]; k < index_face_prism[j + 1]; k++) {
358 nodesum += node[face_prism[k]];
361 index_face_tetra, face_tetra, index_face_prism,
362 face_prism, index_face_hexa, face_hexa);
364 connect[(index_connect[i] + j) * 3] = tmp_connect[0];
365 connect[(index_connect[i] + j) * 3 + 1] = tmp_connect[1];
367 connect[(index_connect[i] + j) * 3] = -1;
368 connect[(index_connect[i] + j) * 3 + 1] = -1;
373 for (j = 0; j < 6; j++) {
375 for (k = index_face_hexa[j]; k < index_face_hexa[j + 1]; k++) {
376 nodesum += node[face_hexa[k]];
379 index_face_tetra, face_tetra, index_face_prism,
380 face_prism, index_face_hexa, face_hexa);
382 connect[(index_connect[i] + j) * 3] = tmp_connect[0];
383 connect[(index_connect[i] + j) * 3 + 1] = tmp_connect[1];
385 connect[(index_connect[i] + j) * 3] = -1;
386 connect[(index_connect[i] + j) * 3 + 1] = -1;
398 int node[4],
int c_base,
int d_base,
int tn_component) {
400 int index_patch, patch[3];
409 if ((node[0] == node[1]) || (node[0] == node[2]) || (node[1] == node[2]))
412 for (k = 0; k < 3; k++) {
413 if (node_hit[node[k] - 1] == -1) {
423 data->node_val_item[(node[k] - 1) * tn_component + c_base + m];
426 c_data = sqrt(c_data);
429 c_data =
data->node_val_item[(node[k] - 1) * tn_component + c_base +
432 c_data =
data->node_val_item[(node[k] - 1) * tn_component + c_base];
436 for (m = 0; m < 3; m++)
438 data->node_val_item[(node[k] - 1) * tn_component + d_base + m];
446 patch[index_patch] = b_point->
ident;
447 node_hit[node[k] - 1] = b_point->
ident;
450 patch[index_patch] = node_hit[node[k] - 1];
459 t1->
patch[0] = patch[0];
460 t1->
patch[1] = patch[1];
461 t1->
patch[2] = patch[2];
469 int node[4],
int c_base,
int d_base,
int tn_component) {
471 int index_patch, patch[4];
479 for (k = 0; k < 4; k++) {
480 if (node_hit[node[k] - 1] == -1) {
489 tmp =
data->node_val_item[(node[k] - 1) * tn_component + c_base + m];
492 c_data = sqrt(c_data);
495 c_data =
data->node_val_item[(node[k] - 1) * tn_component + c_base +
498 c_data =
data->node_val_item[(node[k] - 1) * tn_component + c_base];
502 for (m = 0; m < 3; m++)
504 data->node_val_item[(node[k] - 1) * tn_component + d_base + m];
513 patch[index_patch] = b_point->
ident;
514 node_hit[node[k] - 1] = b_point->
ident;
517 patch[index_patch] = node_hit[node[k] - 1];
521 if ((node[0] == node[1]) || (node[0] == node[2]) || (node[1] == node[2]))
530 t1->
patch[0] = patch[0];
531 t1->
patch[1] = patch[1];
532 t1->
patch[2] = patch[2];
535 if ((node[0] == node[2]) || (node[0] == node[3]) || (node[2] == node[3]))
544 t1->
patch[0] = patch[0];
545 t1->
patch[1] = patch[2];
546 t1->
patch[2] = patch[3];
555 int *tvertex,
int *tpatch,
double *minc,
556 double *maxc,
Result *result,
int sf_i,
565 int *export_no_element, *import_no_element, *export_elem, *flag,
566 *index_import_element;
567 int *global_id, *among_connect, **g_id, **a_connect, **index_a;
568 int flag1, nnode[
MAX_N_NODE], pe_no, startnode;
573 int index_face_tetra[5], face_tetra[12], index_face_prism[6], face_prism[18],
574 index_face_hexa[7], face_hexa[24];
575 int *index_a_connect;
583 int tmp_sum, tmp_nelem;
584 int *connect, *index_connect;
592 for (i = 0; i <
data->nn_component; i++) tn_component +=
data->nn_dof[i];
593 generate_face(index_face_tetra, face_tetra, index_face_prism, face_prism,
594 index_face_hexa, face_hexa);
595 if (init_flag == 1) {
596 nelem_dist = (
int *)
HECMW_calloc(pesize + 1,
sizeof(
int));
601 for (i = 1; i < pesize; i++) {
603 tmp_sum += tmp_nelem;
604 nelem_dist[i + 1] = tmp_sum;
606 for (i = 1; i < pesize; i++)
644 for (i = 0; i < index_connect[
mesh->
n_elem] * 3; i++) connect[i] = -1;
646 index_face_prism, face_prism, index_face_hexa, face_hexa);
649 face_tetra, index_face_prism, face_prism,
650 index_face_hexa, face_hexa);
654 for (i = 0; i < index_connect[
mesh->
n_elem]; i++) {
655 if (connect[i * 3] != -1) connect[i * 3 + 2] = mynode;
659 if ((export_no_element =
662 if ((import_no_element =
665 if ((index_import_element =
671 sizeof(
int))) ==
NULL)
694 export_no_element[k]++;
695 export_elem[k *
mesh->
n_elem + export_no_element[k] - 1] =
707 for (pe_no = 0; pe_no < pesize; pe_no++) {
708 if (mynode != pe_no) {
712 if (export_no_element[i] > 0) {
716 if ((global_id = (
int *)
HECMW_calloc(export_no_element[i],
717 sizeof(
int))) ==
NULL)
720 (
int *)
HECMW_calloc(export_no_element[i] + 1,
sizeof(
int));
721 if (index_a_connect ==
NULL)
726 index_a_connect[export_no_element[i]] * 3,
727 sizeof(
int))) ==
NULL)
729 for (j = 0; j < export_no_element[i]; j++) {
732 for (k = 0; k < index_a_connect[j + 1] - index_a_connect[j];
734 among_connect[(index_a_connect[j] + k) * 3] =
735 connect[(index_connect[export_elem[i * n_elem + j]] + k) *
737 among_connect[(index_a_connect[j] + k) * 3 + 1] =
738 connect[(index_connect[export_elem[i * n_elem + j]] + k) *
741 among_connect[(index_a_connect[j] + k) * 3 + 2] =
742 connect[(index_connect[export_elem[i * n_elem + j]] + k) *
749 if (export_no_element[i] > 0) {
757 index_a_connect[export_no_element[i]] * 3,
HECMW_INT,
768 else if (mynode == pe_no &&
776 sizeof(
int *))) ==
NULL)
779 sizeof(
int *))) ==
NULL)
786 if (import_no_element[i] > 0) {
789 if ((g_id[i] = (
int *)
HECMW_calloc(import_no_element[i],
790 sizeof(
int))) ==
NULL)
795 if ((index_a[i] = (
int *)
HECMW_calloc(import_no_element[i] + 1,
796 sizeof(
int))) ==
NULL)
799 if ((a_connect[i] = (
int *)
HECMW_calloc(index_import_element[i] * 3,
800 sizeof(
int))) ==
NULL)
811 for (j = 0; j < index_connect[i + 1] - index_connect[i]; j++) {
812 if (connect[(index_connect[i] + j) * 3] == -1) {
816 for (m = 0; m < import_no_element[k]; m++) {
818 (*(a_connect[k] + (*(index_a[k] + m) + j) * 3) != -1)) {
819 connect[(index_connect[i] + j) * 3] =
820 *(a_connect[k] + (*(index_a[k] + m) + j) * 3);
821 connect[(index_connect[i] + j) * 3 + 1] =
822 *(a_connect[k] + (*(index_a[k] + m) + j) * 3 + 1);
823 connect[(index_connect[i] + j) * 3 + 2] =
824 *(a_connect[k] + (*(index_a[k] + m) + j) * 3 + 2);
850 if (init_flag != 1) {
857 if ((b_point ==
NULL) || (head_b_patch ==
NULL))
864 for (i = 0; i <
mesh->
n_node; i++) node_hit[i] = -1;
882 c_base +=
data->nn_dof[i];
886 for (i = 0; i < sff->
disp_comp; i++) d_base +=
data->nn_dof[i];
890 for (i = 0; i < n_elem; i++)
892 for (j = 0; j < index_connect[i + 1] - index_connect[i]; j++) {
893 if (connect[(index_connect[i] + j) * 3] == -1) {
896 for (k = 0; k < index_face_tetra[j + 1] - index_face_tetra[j]; k++)
899 face_tetra[index_face_tetra[j] + k]];
901 node, c_base, d_base, tn_component);
904 for (k = 0; k < index_face_prism[j + 1] - index_face_prism[j]; k++)
907 face_prism[index_face_prism[j] + k]];
910 node, c_base, d_base, tn_component);
913 node, c_base, d_base, tn_component);
916 for (k = 0; k < index_face_hexa[j + 1] - index_face_hexa[j]; k++)
918 face_hexa[index_face_hexa[j] + k]];
920 node, c_base, d_base, tn_component);
930 (
double *)
HECMW_calloc(result[sf_i].n_vertex * 3,
sizeof(
double));
932 (
double *)
HECMW_calloc(result[sf_i].n_vertex,
sizeof(
double));
934 (
int *)
HECMW_calloc(result[sf_i].n_patch * 3,
sizeof(
int));
935 if ((result[sf_i].vertex ==
NULL) || (result[sf_i].
patch ==
NULL) ||
936 (result[sf_i].color ==
NULL))
940 (
double *)
HECMW_calloc(result[sf_i].n_vertex * 3,
sizeof(
double));
944 if (b_point->
ident > 0) {
946 for (i = 0; i < b_point->
ident; i++) {
947 for (j = 0; j < 3; j++)
948 result[sf_i].vertex[(p1->
ident) * 3 + j] = p1->
geom[j];
953 for (j = 0; j < 3; j++)
954 result[sf_i].disp[(p1->
ident) * 3 + j] = p1->
disp[j];
965 for (i = 0; i < head_b_patch->
num_patch; i++) {
966 for (j = 0; j < 3; j++)
967 result[sf_i].patch[i * 3 + j] = *tvertex + t1->
patch[j];
976 *tpatch += result[sf_i].
n_patch;
980 if (init_flag == 1) {