20 int *stack_import,
int *nod_import,
21 int *stack_export,
int *nod_export,
int *x,
24 int *stack_import,
int *nod_import,
25 int *stack_export,
int *nod_export,
double *x,
28 int *nod_import,
int *stack_export,
29 int *nod_export,
int *x,
int *y,
32 int *stack_import,
int *nod_import,
33 int *stack_export,
int *nod_export,
38 int *stack_export,
int *x,
int *y,
41 int *stack_export,
int *x,
int *y,
44 int *stack_import,
int *stack_export,
54 int *send_elem_num, *send_elem, *recv_elem_num, *recv_elem, *recv_parent_num,
55 *count_elem, *send_parent, *send_parent_num, *count_parent;
56 int *flag_hit, *flag_elem_hit;
59 int *tmp_int_send, *tmp_int_recv, *tmp2_int_send, *tmp2_int_recv;
61 int *tmp_stack_send, *tmp_stack_recv, *tmp_neibpe, tmp_int, tmp_sum;
62 int *send_ptr_num, *send_ptr_parent_num, *recv_ptr_num, *recv_ptr_parent_num;
63 int *global_index, *global_index_hit;
64 int *send_node_num, *recv_node_num, *send_node, *recv_node;
65 int *tmp_node, *count_node, *tmp_send, *tmp_recv;
66 int *import_index, *export_index, *count_index, *export_node, *import_node;
67 int import_n_neighbor_pe, export_n_neighbor_pe, *import_neighbor_pe,
71 int *tmp_int_nodeid, *tmp2_int_nodeid;
72 double *tmp_node_d, *recv_node_d, *tmp2_node_d, *recv2_node_d, *tmp_send_d,
73 *tmp_recv_d, *tmp2_send_d, *tmp2_recv_d;
74 int *tmp_node_i, *recv_node_i, *tmp2_node_i, *recv2_node_i;
76 FILE *test_fp, *test_fp2;
78 int min_pe, tmp_pe, local_nid;
79 int nvtxs, tmp_nvtxs, tmp_peid, tmp_lid;
80 int *new_elem, *global_recv_elem_num, *global_recv_parent_num;
81 int *send_adapt_parent, *recv_adapt_parent, *send_tmp, *recv_tmp,
82 *send_tmp_num, *recv_tmp_num, *send_adapt_ptype, *count_num;
83 int t_elem, l_child, new_l_child;
84 int *inter_elem, *send_adapt_child, *recv_adapt_child, *send_adapt_child_num,
85 *recv_adapt_child_num, *send_index_child, *recv_index_child;
86 int *send2_adapt_child_num, *recv2_adapt_child_num;
87 int *send_inter, *recv_inter, *send_inter_num, *recv_inter_num,
88 *global_recv_inter_num;
89 int *send_parent_inter, *recv_parent_inter, *send_parent_inter_num,
90 *recv_parent_inter_num, *global_recv_parent_inter_num;
91 int init_flag, new_elemid;
92 int *tmp_elem_grp, num_grp_item, *tmp_surf_grp, *tmp_surf_id, *tmp2_surf_id;
97 int *new2old, *count_elem_index, *new_tmp, *new_tmp2, *old2new;
105 sprintf(test_file,
"test3.%d", mynode);
106 test_fp = fopen(test_file,
"w");
107 if (test_fp ==
NULL) {
108 fprintf(stderr,
"Cannot open test_file\n");
144 sprintf(test_file,
"test5.%d", mynode);
145 test_fp2 = fopen(test_file,
"w");
151 new_part = (
int *)calloc(
mesh->
n_node,
sizeof(
int));
158 result->
part = new_part;
159 new_elem = (
int *)calloc(
mesh->
n_elem,
sizeof(
int));
161 inter_elem = (
int *)calloc(
mesh->
n_elem,
sizeof(
int));
178 for (i = 0; i <
mesh->
n_elem; i++) new_elem[i] = -1;
186 send_elem_num = (
int *)calloc(pesize + 1,
sizeof(
int));
187 send_inter_num = (
int *)calloc(pesize + 1,
sizeof(
int));
188 recv_elem_num = (
int *)calloc(pesize + 1,
sizeof(
int));
189 recv_inter_num = (
int *)calloc(pesize + 1,
sizeof(
int));
190 if ((send_elem_num ==
NULL) || (send_inter_num ==
NULL) ||
191 (recv_elem_num ==
NULL) || (recv_inter_num ==
NULL))
193 flag_hit = (
int *)calloc(pesize,
sizeof(
int));
194 flag_elem_hit = (
int *)calloc(
mesh->
n_elem,
sizeof(
int));
195 if ((flag_hit ==
NULL) || (flag_elem_hit ==
NULL))
198 for (i = 0; i < pesize + 1; i++) {
199 send_elem_num[i] = 0;
200 send_inter_num[i] = 0;
201 recv_elem_num[i] = 0;
202 recv_inter_num[i] = 0;
206 for (j = 0; j < pesize; j++) flag_hit[j] = 0;
219 send_inter_num[init_flag + 1]++;
227 for (i = 1; i < pesize + 1; i++) {
228 send_elem_num[i] = send_elem_num[i - 1] + send_elem_num[i];
229 send_inter_num[i] = send_inter_num[i - 1] + send_inter_num[i];
248 global_recv_elem_num = (
int *)calloc(pesize * (pesize + 1),
sizeof(int));
249 global_recv_inter_num = (
int *)calloc(pesize * (pesize + 1),
sizeof(int));
250 if ((global_recv_elem_num ==
NULL) || (global_recv_inter_num ==
NULL))
260 if (send_elem_num[pesize] > 0) {
261 send_elem = (
int *)calloc(send_elem_num[pesize],
sizeof(
int));
262 count_elem = (
int *)calloc(pesize,
sizeof(
int));
263 count_num = (
int *)calloc(pesize,
sizeof(
int));
264 send_inter = (
int *)calloc(send_elem_num[pesize],
sizeof(
int));
266 if ((send_elem ==
NULL) || (count_elem ==
NULL))
268 for (i = 0; i < pesize; i++) {
274 for (j = 0; j < pesize; j++) flag_hit[j] = 0;
289 new_elemid = init_flag * t_elem +
290 global_recv_inter_num[init_flag * (pesize + 1) + mynode] +
291 count_num[init_flag];
292 new_elem[i] = new_elemid;
296 count_num[init_flag]++;
299 for (i = 0; i < send_elem_num[pesize]; i++)
300 send_inter[i] = new_elem[send_elem[i]];
304 send_parent_num = (
int *)calloc(pesize + 1,
sizeof(
int));
305 send_parent_inter_num = (
int *)calloc(pesize + 1,
sizeof(
int));
306 recv_parent_num = (
int *)calloc(pesize + 1,
sizeof(
int));
307 recv_parent_inter_num = (
int *)calloc(pesize + 1,
sizeof(
int));
309 for (i = 0; i < pesize + 1; i++) {
310 send_parent_num[i] = 0;
311 send_parent_inter_num[i] = 0;
313 for (i = 0; i <
mesh->
n_elem; i++) flag_elem_hit[i] = 0;
314 for (j = 0; j < pesize; j++) {
315 send_parent_num[j + 1] = 0;
316 for (k = send_elem_num[j]; k < send_elem_num[j + 1]; k++) {
317 id_elem = send_elem[k];
322 send_parent_num[j + 1]++;
328 for (i = 1; i < pesize + 1; i++) {
329 send_parent_num[i] = send_parent_num[i - 1] + send_parent_num[i];
332 recv_parent_num = (
int *)calloc(pesize + 1,
sizeof(
int));
336 global_recv_parent_num = (
int *)calloc(pesize * (pesize + 1),
sizeof(int));
337 if (global_recv_parent_num ==
NULL)
342 send_parent = (
int *)calloc(send_parent_num[pesize],
sizeof(
int));
343 send_parent_inter = (
int *)calloc(send_parent_num[pesize],
sizeof(
int));
344 count_parent = (
int *)calloc(pesize,
sizeof(
int));
346 if ((send_parent ==
NULL) || (count_parent ==
NULL))
349 for (i = 0; i <
mesh->
n_elem; i++) flag_elem_hit[i] = 0;
350 for (j = 0; j < pesize; j++) {
352 for (k = send_elem_num[j]; k < send_elem_num[j + 1]; k++) {
353 id_elem = send_elem[k];
358 send_parent[send_parent_num[j] + count_parent[j]] =
367 j * t_elem + global_recv_inter_num[j * (pesize + 1) + pesize] +
368 global_recv_parent_num[j * (pesize + 1) + mynode] +
375 for (i = 0; i < send_parent_num[pesize]; i++) {
376 send_parent_inter[i] = new_elem[send_parent[i]];
377 if (send_parent_inter[i] < 0)
382 send_tmp_num = (
int *)calloc(pesize + 1,
sizeof(
int));
383 recv_tmp_num = (
int *)calloc(pesize + 1,
sizeof(
int));
384 if ((send_tmp_num ==
NULL) || (recv_tmp_num ==
NULL))
386 if (send_elem_num[pesize] > 0) {
387 send_adapt_parent = (
int *)calloc(send_elem_num[pesize],
sizeof(
int));
388 send_adapt_ptype = (
int *)calloc(send_elem_num[pesize],
sizeof(
int));
389 if ((send_adapt_parent ==
NULL) || (send_adapt_ptype ==
NULL))
393 for (i = 0; i < pesize + 1; i++) send_tmp_num[i] = 0;
395 for (i = 0; i < send_elem_num[pesize]; i++) {
397 send_adapt_parent[i] = -1;
402 send_adapt_parent[i] =
406 fprintf(stderr,
"There is something wrong with parent information\n");
407 fprintf(stderr,
"i=%d, send_elem[i]=%d parent is %d PE=%d\n", i,
413 for (i = 1; i < pesize + 1; i++) {
414 send_tmp_num[i] = send_tmp_num[i - 1] + send_tmp_num[i];
420 for (i = 0; i < pesize; i++) count_num[i] = 0;
421 if (send_tmp_num[pesize] > 0) {
422 send_tmp = (
int *)calloc(send_tmp_num[pesize],
sizeof(
int));
425 if (recv_tmp_num[pesize] > 0) {
426 recv_tmp = (
int *)calloc(recv_tmp_num[pesize],
sizeof(
int));
429 for (i = 0; i < send_elem_num[pesize]; i++) {
431 send_adapt_parent[i] = -1;
440 if (send_tmp_num[pesize] > 0)
442 recv_tmp_num, send_tmp_num, send_tmp, recv_tmp,
445 for (i = 0; i < recv_tmp_num[pesize]; i++) {
446 if (new_elem[recv_tmp[i]] == -1)
449 recv_tmp[i] = new_elem[recv_tmp[i]];
451 if (send_tmp_num[pesize] > 0)
453 send_tmp_num, recv_tmp_num, recv_tmp, send_tmp,
456 for (i = 0; i < pesize; i++) count_num[i] = 0;
457 for (i = 0; i < send_elem_num[pesize]; i++) {
459 send_adapt_parent[i] = -1;
460 send_adapt_ptype[i] = -1;
462 send_adapt_parent[i] =
468 }
else if (new_elem[inter_elem[
mesh->
adapt_parent[send_elem[i] * 2] - 1]] !=
470 send_adapt_parent[i] =
473 }
else if (new_elem[inter_elem[
mesh->
adapt_parent[send_elem[i] * 2] - 1]] ==
477 if (recv_elem_num[pesize] > 0) {
478 tmp_int_recv = (
int *)calloc(recv_elem_num[pesize],
sizeof(
int));
481 recv_elem_num, send_elem_num, send_adapt_parent,
507 new_mesh->
n_elem = recv_elem_num[pesize] + recv_parent_num[pesize];
517 for (i = 0; i < recv_elem_num[pesize]; i++) {
518 if (tmp_int_recv[i] == -1) {
527 recv_elem_num, send_elem_num, send_adapt_ptype,
529 for (i = 0; i < recv_elem_num[pesize]; i++)
531 if (send_tmp_num[pesize] > 0) free(send_tmp);
532 if (recv_tmp_num[pesize] > 0) free(recv_tmp);
533 if (send_elem_num[pesize] > 0) {
534 free(send_adapt_parent);
535 free(send_adapt_ptype);
537 if (send_parent_num[pesize] > 0) {
538 send_adapt_parent = (
int *)calloc(send_parent_num[pesize],
sizeof(
int));
539 send_adapt_ptype = (
int *)calloc(send_parent_num[pesize],
sizeof(
int));
540 if ((send_adapt_parent ==
NULL) || (send_adapt_ptype ==
NULL))
544 for (i = 0; i < pesize + 1; i++) send_tmp_num[i] = 0;
546 for (i = 0; i < send_parent_num[pesize]; i++) {
548 send_adapt_parent[i] = -1;
551 else if (new_elem[inter_elem[
mesh->
adapt_parent[send_parent[i] * 2] - 1]] !=
553 send_adapt_parent[i] =
555 else if (new_elem[inter_elem[
mesh->
adapt_parent[send_parent[i] * 2] - 1]] ==
559 for (i = 1; i < pesize + 1; i++) {
560 send_tmp_num[i] = send_tmp_num[i - 1] + send_tmp_num[i];
566 for (i = 0; i < pesize; i++) count_num[i] = 0;
567 if (send_tmp_num[pesize] > 0) {
568 send_tmp = (
int *)calloc(send_tmp_num[pesize],
sizeof(
int));
571 if (recv_tmp_num[pesize] > 0) {
572 recv_tmp = (
int *)calloc(recv_tmp_num[pesize],
sizeof(
int));
575 for (i = 0; i < send_parent_num[pesize]; i++) {
577 send_adapt_parent[i] = -1;
585 if (send_tmp_num[pesize] > 0)
587 recv_tmp_num, send_tmp_num, send_tmp, recv_tmp,
589 for (i = 0; i < recv_tmp_num[pesize]; i++) {
590 if (new_elem[recv_tmp[i]] == -1)
593 recv_tmp[i] = new_elem[recv_tmp[i]];
595 if (send_tmp_num[pesize] > 0)
597 send_tmp_num, recv_tmp_num, recv_tmp, send_tmp,
600 for (i = 0; i < pesize; i++) count_num[i] = 0;
601 for (i = 0; i < send_parent_num[pesize]; i++) {
603 send_adapt_parent[i] = -1;
604 send_adapt_ptype[i] = -1;
606 send_adapt_parent[i] =
614 send_adapt_parent[i] =
622 tmp2_int_recv = (
int *)calloc(recv_parent_num[pesize],
sizeof(
int));
625 recv_parent_num, send_parent_num, send_adapt_parent,
628 for (i = 0; i < recv_parent_num[pesize]; i++) {
629 if (tmp2_int_recv[i] == -1) {
634 (tmp2_int_recv[i] % t_elem) + 1;
636 tmp2_int_recv[i] / t_elem;
640 recv_parent_num, send_parent_num, send_adapt_ptype,
642 for (i = 0; i < recv_parent_num[pesize]; i++)
644 if (send_tmp_num[pesize] > 0) free(send_tmp);
645 if (recv_tmp_num[pesize] > 0) free(recv_tmp);
646 if (send_parent_num[pesize] > 0) {
647 free(send_adapt_parent);
648 free(send_adapt_ptype);
653 send_adapt_child_num = (
int *)calloc(pesize + 1,
sizeof(
int));
654 for (j = 0; j < pesize + 1; j++) send_adapt_child_num[j] = 0;
655 for (j = 0; j < pesize; j++) {
656 for (i = send_elem_num[j]; i < send_elem_num[j + 1]; i++)
657 send_adapt_child_num[j + 1] +=
661 for (i = 1; i < pesize + 1; i++) {
662 send_adapt_child_num[i] =
663 send_adapt_child_num[i - 1] + send_adapt_child_num[i];
666 send_adapt_child = (
int *)calloc(send_adapt_child_num[pesize],
sizeof(
int));
667 send_index_child = (
int *)calloc(send_elem_num[pesize],
sizeof(
int));
668 if ((send_adapt_child ==
NULL) || (send_index_child ==
NULL))
671 for (i = 0; i < pesize + 1; i++) send_tmp_num[i] = 0;
673 for (i = 0; i < send_elem_num[pesize]; i++) {
675 j < mesh->adapt_children_index[send_elem[i] + 1]; j++) {
678 send_adapt_child[tmp_int] = -1;
682 send_adapt_child[tmp_int] =
686 fprintf(stderr,
"There is something wrong with child information\n");
687 fprintf(stderr,
"i=%d, send_elem[i]=%d child is %d PE=%d\n", i,
694 for (i = 1; i < pesize + 1; i++) {
695 send_tmp_num[i] = send_tmp_num[i - 1] + send_tmp_num[i];
700 for (i = 0; i < pesize; i++) count_num[i] = 0;
701 if (send_tmp_num[pesize] > 0) {
702 send_tmp = (
int *)calloc(send_tmp_num[pesize],
sizeof(
int));
705 if (recv_tmp_num[pesize] > 0) {
706 recv_tmp = (
int *)calloc(recv_tmp_num[pesize],
sizeof(
int));
710 for (i = 0; i < send_elem_num[pesize]; i++) {
712 j < mesh->adapt_children_index[send_elem[i] + 1]; j++) {
715 send_adapt_child[tmp_int] = -1;
724 if (send_tmp_num[pesize] > 0)
726 recv_tmp_num, send_tmp_num, send_tmp, recv_tmp,
728 for (i = 0; i < recv_tmp_num[pesize]; i++) {
729 if (new_elem[recv_tmp[i]] == -1)
732 recv_tmp[i] = new_elem[recv_tmp[i]];
734 if (send_tmp_num[pesize] > 0)
736 send_tmp_num, recv_tmp_num, recv_tmp, send_tmp,
739 for (i = 0; i < pesize; i++) count_num[i] = 0;
741 for (i = 0; i < send_elem_num[pesize]; i++) {
745 j < mesh->adapt_children_index[send_elem[i] + 1]; j++) {
748 send_adapt_child[tmp_int] = -1;
750 send_adapt_child[tmp_int] =
756 send_adapt_child[tmp_int] =
760 fprintf(stderr,
"There is something wrong with child information\n");
761 fprintf(stderr,
"i=%d, send_elem[i]=%d child is %d PE=%d\n", i,
769 recv_adapt_child_num = (
int *)calloc(pesize + 1,
sizeof(
int));
770 if (recv_adapt_child_num ==
NULL)
775 recv_adapt_child = (
int *)calloc(recv_adapt_child_num[pesize],
sizeof(
int));
778 send_adapt_child_num[pesize], recv_adapt_child_num[pesize], pesize,
779 recv_adapt_child_num, send_adapt_child_num, send_adapt_child,
783 recv_elem_num, send_elem_num, send_index_child,
788 send2_adapt_child_num = (
int *)calloc(pesize + 1,
sizeof(
int));
789 for (j = 0; j < pesize + 1; j++) send2_adapt_child_num[j] = 0;
790 for (j = 0; j < pesize; j++) {
791 for (i = send_parent_num[j]; i < send_parent_num[j + 1]; i++)
792 send2_adapt_child_num[j + 1] +=
796 for (i = 1; i < pesize + 1; i++) {
797 send2_adapt_child_num[i] =
798 send2_adapt_child_num[i - 1] + send2_adapt_child_num[i];
800 recv2_adapt_child_num = (
int *)calloc(pesize + 1,
sizeof(
int));
801 if (recv2_adapt_child_num ==
NULL)
807 2 * (recv_adapt_child_num[pesize] + recv2_adapt_child_num[pesize]),
819 for (i = 0; i < recv_adapt_child_num[pesize]; i++) {
820 if (recv_adapt_child[i] == -1) {
829 for (i = 0; i < recv_elem_num[pesize]; i++)
832 if (send_tmp_num[pesize] > 0) free(send_tmp);
833 if (recv_tmp_num[pesize] > 0) free(recv_tmp);
834 if (send_elem_num[pesize] > 0) {
835 free(send_adapt_child);
836 free(recv_adapt_child);
837 free(send_index_child);
840 send_adapt_child = (
int *)calloc(send2_adapt_child_num[pesize],
sizeof(
int));
841 send_index_child = (
int *)calloc(send_parent_num[pesize],
sizeof(
int));
842 if ((send_adapt_child ==
NULL) || (send_index_child ==
NULL))
845 for (i = 0; i < pesize + 1; i++) send_tmp_num[i] = 0;
847 for (i = 0; i < send_parent_num[pesize]; i++) {
849 j < mesh->adapt_children_index[send_parent[i] + 1]; j++) {
852 send_adapt_child[tmp_int] = -1;
856 send_adapt_child[tmp_int] =
860 fprintf(stderr,
"There is something wrong with child information\n");
861 fprintf(stderr,
"in PE %d i=%d, send_parent[i]=%d child is %d PE=%d\n",
868 for (i = 1; i < pesize + 1; i++) {
869 send_tmp_num[i] = send_tmp_num[i - 1] + send_tmp_num[i];
874 for (i = 0; i < pesize; i++) count_num[i] = 0;
875 if (send_tmp_num[pesize] > 0) {
876 send_tmp = (
int *)calloc(send_tmp_num[pesize],
sizeof(
int));
879 if (recv_tmp_num[pesize] > 0) {
880 recv_tmp = (
int *)calloc(recv_tmp_num[pesize],
sizeof(
int));
884 for (i = 0; i < send_parent_num[pesize]; i++) {
886 j < mesh->adapt_children_index[send_parent[i] + 1]; j++) {
889 send_adapt_child[tmp_int] = -1;
898 if (send_tmp_num[pesize] > 0)
900 recv_tmp_num, send_tmp_num, send_tmp, recv_tmp,
902 for (i = 0; i < recv_tmp_num[pesize]; i++) {
903 if (new_elem[recv_tmp[i]] == -1)
906 recv_tmp[i] = new_elem[recv_tmp[i]];
908 if (send_tmp_num[pesize] > 0)
910 send_tmp_num, recv_tmp_num, recv_tmp, send_tmp,
913 for (i = 0; i < pesize; i++) count_num[i] = 0;
915 for (i = 0; i < send_parent_num[pesize]; i++) {
919 j < mesh->adapt_children_index[send_parent[i] + 1]; j++) {
922 send_adapt_child[tmp_int] = -1;
924 send_adapt_child[tmp_int] =
930 send_adapt_child[tmp_int] =
934 fprintf(stderr,
"There is something wrong with child information\n");
935 fprintf(stderr,
"i=%d, send_elem[i]=%d child is %d PE=%d\n", i,
943 recv_adapt_child = (
int *)calloc(recv2_adapt_child_num[pesize],
sizeof(
int));
946 send2_adapt_child_num[pesize], recv2_adapt_child_num[pesize], pesize,
947 recv2_adapt_child_num, send2_adapt_child_num, send_adapt_child,
951 recv_parent_num, send_parent_num, send_index_child,
954 for (i = 0; i < recv2_adapt_child_num[pesize]; i++) {
955 if (recv_adapt_child[i] == -1) {
962 (recv_adapt_child[i] % t_elem) + 1;
965 recv_adapt_child[i] / t_elem;
970 for (i = 1; i < recv_parent_num[pesize]; i++)
974 if (send_tmp_num[pesize] > 0) free(send_tmp);
975 if (recv_tmp_num[pesize] > 0) free(recv_tmp);
976 if (send_parent_num[pesize] > 0) {
977 free(send_adapt_child);
978 free(recv_adapt_child);
979 free(send_index_child);
989 tmp_int_send = (
int *)calloc(send_elem_num[pesize] + 1,
sizeof(
int));
992 if (send_elem_num[pesize] > 0) {
993 for (i = 0; i < send_elem_num[pesize]; i++) tmp_int_send[i] = send_inter[i];
995 tmp_int_recv = (
int *)calloc(recv_elem_num[pesize] + 1,
sizeof(
int));
999 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1001 if (recv_elem_num[pesize] > 0) {
1002 for (i = 0; i < recv_elem_num[pesize]; i++) {
1007 tmp2_int_send = (
int *)calloc(send_parent_num[pesize],
sizeof(
int));
1010 for (i = 0; i < send_parent_num[pesize]; i++)
1011 tmp2_int_send[i] = send_parent_inter[i];
1013 recv_parent_num, send_parent_num, tmp2_int_send,
1015 for (i = 0; i < recv_parent_num[pesize]; i++) {
1017 (tmp2_int_recv[i] % t_elem) + 1;
1019 tmp2_int_recv[i] / t_elem;
1022 if (mynode == 0) fprintf(stderr,
"Finish sending elem_id\n");
1026 free(send_parent_inter);
1034 new_nelem_dist = (
int *)calloc(pesize + 1,
sizeof(
int));
1037 new_nelem_dist[0] = 0;
1040 for (i = 1; i < pesize; i++) {
1044 new_nelem_dist[i + 1] = tmp_sum;
1046 for (i = 1; i < pesize; i++)
1073 if (send_elem_num[pesize] > 0) {
1074 for (i = 0; i < send_elem_num[pesize]; i++)
1078 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1080 for (i = 0; i < recv_elem_num[pesize]; i++)
1082 for (i = 0; i < send_parent_num[pesize]; i++)
1085 recv_parent_num, send_parent_num, tmp2_int_send,
1087 for (i = 0; i < recv_parent_num[pesize]; i++)
1089 if (mynode == 0) fprintf(stderr,
"Finish sending elem_type\n");
1096 if (send_elem_num[pesize] > 0) {
1097 for (i = 0; i < send_elem_num[pesize]; i++)
1101 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1103 for (i = 0; i < recv_elem_num[pesize]; i++)
1105 for (i = 0; i < send_parent_num[pesize]; i++)
1108 recv_parent_num, send_parent_num, tmp2_int_send,
1110 for (i = 0; i < recv_parent_num[pesize]; i++)
1112 if (mynode == 0) fprintf(stderr,
"Finish sending section_ID\n");
1121 tmp_send_d = (
double *)calloc(send_elem_num[pesize] + 1,
sizeof(
double));
1122 tmp_recv_d = (
double *)calloc(recv_elem_num[pesize] + 1,
sizeof(
double));
1124 if (send_elem_num[pesize] > 0) {
1125 for (i = 0; i < send_elem_num[pesize]; i++)
1129 pesize, recv_elem_num, send_elem_num, tmp_send_d,
1131 for (i = 0; i < recv_elem_num[pesize]; i++)
1136 (
double *)calloc(send_parent_num[pesize] + 1,
sizeof(
double));
1138 (
double *)calloc(recv_parent_num[pesize] + 1,
sizeof(
double));
1141 for (i = 0; i < send_parent_num[pesize]; i++)
1144 pesize, recv_parent_num, send_parent_num,
1147 for (i = 0; i < recv_parent_num[pesize]; i++)
1167 if (mynode == 0) fprintf(stderr,
"Finish sending elem_material inf\n");
1176 for (i = 0; i < send_elem_num[pesize]; i++)
1179 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1181 for (i = 0; i < recv_elem_num[pesize]; i++)
1184 for (i = 0; i < send_parent_num[pesize]; i++)
1187 recv_parent_num, send_parent_num, tmp2_int_send,
1189 for (i = 0; i < recv_parent_num[pesize]; i++)
1191 if (mynode == 0) fprintf(stderr,
"Finish sending adaptation_level\n");
1197 for (i = 0; i < send_elem_num[pesize]; i++)
1200 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1202 for (i = 0; i < recv_elem_num[pesize]; i++)
1205 for (i = 0; i < send_parent_num[pesize]; i++)
1208 recv_parent_num, send_parent_num, tmp2_int_send,
1210 for (i = 0; i < recv_parent_num[pesize]; i++)
1212 if (mynode == 0) fprintf(stderr,
"Finish sending adaptation_type\n");
1220 for (i = 0; i < send_elem_num[pesize]; i++)
1223 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1225 for (i = 0; i < recv_elem_num[pesize]; i++)
1228 for (i = 0; i < send_parent_num[pesize]; i++)
1231 recv_parent_num, send_parent_num, tmp2_int_send,
1233 for (i = 0; i < recv_parent_num[pesize]; i++)
1236 if (mynode == 0) fprintf(stderr,
"Finish sending when_i_was_refined_elem\n");
1245 for (i = 0; i < send_elem_num[pesize]; i++)
1249 recv_elem_num, send_elem_num, tmp_int_send, tmp_int_recv,
1251 for (i = 0; i < send_parent_num[pesize]; i++)
1255 recv_parent_num, send_parent_num, tmp2_int_send,
1260 for (i = 0; i < recv_elem_num[pesize]; i++)
1263 for (i = 0; i < recv_parent_num[pesize]; i++)
1269 if (mynode == 0) fprintf(stderr,
"Finish sending elem_node_index\n");
1272 send_ptr_num = (
int *)calloc(pesize + 1,
sizeof(
int));
1273 send_ptr_parent_num = (
int *)calloc(pesize + 1,
sizeof(
int));
1274 recv_ptr_num = (
int *)calloc(pesize + 1,
sizeof(
int));
1275 recv_ptr_parent_num = (
int *)calloc(pesize + 1,
sizeof(
int));
1276 if ((send_ptr_num ==
NULL) || (send_ptr_parent_num ==
NULL) ||
1277 (recv_ptr_num ==
NULL) || (recv_ptr_parent_num ==
NULL))
1279 for (i = 0; i < pesize + 1; i++) {
1280 send_ptr_num[i] = 0;
1281 send_ptr_parent_num[i] = 0;
1283 for (i = 1; i < pesize + 1; i++) {
1284 for (j = send_elem_num[i - 1]; j < send_elem_num[i]; j++)
1285 send_ptr_num[i] += tmp_int_send[j];
1287 for (i = 1; i < pesize + 1; i++)
1288 send_ptr_num[i] = send_ptr_num[i - 1] + send_ptr_num[i];
1289 for (i = 1; i < pesize + 1; i++) {
1290 for (j = send_parent_num[i - 1]; j < send_parent_num[i]; j++)
1291 send_ptr_parent_num[i] += tmp2_int_send[j];
1293 for (i = 1; i < pesize + 1; i++)
1294 send_ptr_parent_num[i] =
1295 send_ptr_parent_num[i - 1] + send_ptr_parent_num[i];
1367 tmp_grp[m].num_of_item = 0;
1370 tmp_elem_grp = (
int *)calloc(
mesh->
n_elem,
sizeof(
int));
1373 for (i = 0; i <
mesh->
n_elem; i++) tmp_elem_grp[i] = 0;
1377 i < mesh->elem_group->grp_index[m + 1]; i++)
1380 if (send_elem_num[pesize] > 0) {
1381 for (i = 0; i < send_elem_num[pesize]; i++)
1382 tmp_int_send[i] = tmp_elem_grp[send_elem[i]];
1384 pesize, recv_elem_num, send_elem_num, tmp_int_send,
1387 if (send_parent_num[pesize] > 0) {
1388 for (i = 0; i < send_parent_num[pesize]; i++)
1389 tmp2_int_send[i] = tmp_elem_grp[send_parent[i]];
1391 pesize, recv_parent_num, send_parent_num,
1396 for (i = 0; i < recv_elem_num[pesize]; i++) {
1397 if (tmp_int_recv[i] == 1) num_grp_item++;
1399 for (i = 0; i < recv_parent_num[pesize]; i++) {
1400 if (tmp2_int_recv[i] == 1) num_grp_item++;
1403 if (num_grp_item > 0) {
1404 tmp_grp[m].
item = (
int *)calloc(num_grp_item,
sizeof(
int));
1407 for (i = 0; i < recv_elem_num[pesize]; i++) {
1408 if (tmp_int_recv[i] == 1) {
1409 tmp_grp[m].
item[tmp_int] = i + 1;
1413 for (i = 0; i < recv_parent_num[pesize]; i++) {
1414 if (tmp2_int_recv[i] == 1) {
1415 tmp_grp[m].
item[tmp_int] = recv_elem_num[pesize] + i + 1;
1425 num_grp_item += tmp_grp[m].num_of_item;
1434 if (num_grp_item > 0) {
1447 if (tmp_grp[m].num_of_item > 0) free(tmp_grp[m].item);
1450 if (mynode == 0) fprintf(stderr,
"Finish generating new elem_grp inf.\n");
1458 tmp_surf_id = (
int *)calloc(recv_elem_num[pesize] + 1,
sizeof(
int));
1460 tmp2_surf_id = (
int *)calloc(recv_parent_num[pesize] + 1,
sizeof(
int));
1464 tmp_grp[m].num_of_item = 0;
1467 tmp_elem_grp = (
int *)calloc(
mesh->
n_elem,
sizeof(
int));
1469 tmp_surf_grp = (
int *)calloc(
mesh->
n_elem,
sizeof(
int));
1472 for (i = 0; i <
mesh->
n_elem; i++) tmp_elem_grp[i] = 0;
1473 for (i = 0; i <
mesh->
n_elem; i++) tmp_surf_grp[i] = -1;
1477 i < mesh->surf_group->grp_index[m + 1]; i++) {
1483 if (send_elem_num[pesize] > 0) {
1484 for (i = 0; i < send_elem_num[pesize]; i++)
1485 tmp_int_send[i] = tmp_elem_grp[send_elem[i]];
1487 pesize, recv_elem_num, send_elem_num, tmp_int_send,
1489 for (i = 0; i < send_elem_num[pesize]; i++)
1490 tmp_int_send[i] = tmp_surf_grp[send_elem[i]];
1492 pesize, recv_elem_num, send_elem_num, tmp_int_send,
1495 if (send_parent_num[pesize] > 0) {
1496 for (i = 0; i < send_parent_num[pesize]; i++)
1497 tmp2_int_send[i] = tmp_elem_grp[send_parent[i]];
1499 pesize, recv_parent_num, send_parent_num,
1502 for (i = 0; i < send_parent_num[pesize]; i++)
1503 tmp2_int_send[i] = tmp_surf_grp[send_parent[i]];
1505 pesize, recv_parent_num, send_parent_num,
1510 for (i = 0; i < recv_elem_num[pesize]; i++) {
1511 if (tmp_int_recv[i] == 1) num_grp_item++;
1513 for (i = 0; i < recv_parent_num[pesize]; i++) {
1514 if (tmp2_int_recv[i] == 1) num_grp_item++;
1517 if (num_grp_item > 0) {
1518 tmp_grp[m].
item = (
int *)calloc(num_grp_item * 2,
sizeof(
int));
1521 for (i = 0; i < recv_elem_num[pesize]; i++) {
1522 if (tmp_int_recv[i] == 1) {
1523 tmp_grp[m].
item[tmp_int * 2] = i + 1;
1524 tmp_grp[m].
item[tmp_int * 2 + 1] = tmp_surf_id[i];
1528 for (i = 0; i < recv_parent_num[pesize]; i++) {
1529 if (tmp2_int_recv[i] == 1) {
1530 tmp_grp[m].
item[tmp_int * 2] = recv_elem_num[pesize] + i + 1;
1531 tmp_grp[m].
item[tmp_int * 2 + 1] = tmp2_surf_id[i];
1545 num_grp_item += tmp_grp[m].num_of_item;
1554 if (num_grp_item > 0) {
1556 (
int *)calloc(num_grp_item * 2,
sizeof(
int));
1564 tmp_grp[m].
item[i * 2 + 1];
1570 if (tmp_grp[m].num_of_item > 0) free(tmp_grp[m].item);
1573 if (mynode == 0) fprintf(stderr,
"Finish generating new surf_grp inf.\n");
1576 if (tmp_int_send !=
NULL) free(tmp_int_send);
1577 if (tmp2_int_send !=
NULL) free(tmp2_int_send);
1586 if (tmp_int_recv !=
NULL) free(tmp_int_recv);
1587 if (tmp2_int_recv !=
NULL) free(tmp2_int_recv);
1588 tmp_int_send = (
int *)calloc(send_ptr_num[pesize],
sizeof(
int));
1589 tmp_int_nodeid = (
int *)calloc(recv_ptr_num[pesize],
sizeof(
int));
1591 if ((tmp_int_send ==
NULL) || (tmp_int_nodeid ==
NULL))
1598 for (i = 0; i < send_elem_num[pesize]; i++) {
1600 j < mesh->elem_node_index[send_elem[i] + 1]; j++) {
1601 tmp_int_send[tmp_int] =
1609 recv_ptr_num, send_ptr_num, tmp_int_send, tmp_int_nodeid,
1611 tmp2_int_send = (
int *)calloc(send_ptr_parent_num[pesize],
sizeof(
int));
1612 tmp2_int_nodeid = (
int *)calloc(recv_ptr_parent_num[pesize],
sizeof(
int));
1614 if ((tmp2_int_send ==
NULL) || (tmp2_int_nodeid ==
NULL))
1617 for (i = 0; i < send_parent_num[pesize]; i++) {
1619 j < mesh->elem_node_index[send_parent[i] + 1]; j++) {
1620 tmp2_int_send[tmp_int] =
1628 pesize, recv_ptr_parent_num, send_ptr_parent_num,
1632 free(tmp2_int_send);
1639 send_node_num = (
int *)calloc(pesize + 1,
sizeof(
int));
1640 count_node = (
int *)calloc(pesize,
sizeof(
int));
1642 recv_node_num = (
int *)calloc(pesize + 1,
sizeof(
int));
1643 if ((send_node_num ==
NULL) || (count_node ==
NULL) || (send_node ==
NULL) ||
1644 (recv_node_num ==
NULL))
1646 "send_node_num, count_node, send_node, and recv_node_num");
1647 for (i = 0; i < pesize + 1; i++) {
1648 send_node_num[i] = 0;
1651 send_node_num[result->
part[i] + 1]++;
1653 for (i = 1; i < pesize + 1; i++)
1654 send_node_num[i] = send_node_num[i - 1] + send_node_num[i];
1655 for (i = 0; i < pesize; i++) count_node[i] = 0;
1657 send_node[send_node_num[result->
part[i]] + count_node[result->
part[i]]] = i;
1658 count_node[result->
part[i]]++;
1660 tmp_node = (
int *)calloc(send_node_num[pesize] + 1,
sizeof(
int));
1661 for (i = 0; i < send_node_num[pesize]; i++)
1662 tmp_node[i] = vtxdist[mynode] + send_node[i];
1666 recv_node = (
int *)calloc(recv_node_num[pesize] + 1,
sizeof(
int));
1669 recv_node_num, send_node_num, tmp_node, recv_node,
1671 global_index = (
int *)calloc(result->
t_node,
sizeof(
int));
1672 global_index_hit = (
int *)calloc(result->
t_node,
sizeof(
int));
1673 if ((global_index ==
NULL) || (global_index_hit ==
NULL))
1675 for (i = 0; i < result->
t_node; i++) {
1676 global_index[i] = -1;
1677 global_index_hit[i] = -1;
1679 for (i = 0; i < recv_node_num[pesize]; i++) {
1680 if (recv_node[i] >= result->
t_node)
1682 global_index[recv_node[i]] = mynode * result->
t_node + i;
1683 global_index_hit[recv_node[i]] = i;
1691 tmp_recv = (
int *)calloc(result->
t_node,
sizeof(
int));
1693 for (i = 1; i < pesize; i++) {
1696 for (j = 0; j < result->
t_node; j++) {
1697 if (tmp_recv[j] >= 0) global_index[j] = tmp_recv[j];
1701 for (i = 1; i < pesize; i++)
1714 import_index = (
int *)calloc(pesize + 1,
sizeof(
int));
1716 for (i = 0; i < pesize + 1; i++) import_index[i] = 0;
1717 for (i = 0; i < recv_ptr_num[pesize]; i++) {
1718 tmp_int = tmp_int_nodeid[i];
1719 if (tmp_int >= result->
t_node) {
1720 fprintf(stderr,
"There is something wrong with data: i=%d tmp_int=%d\n",
1724 if (global_index_hit[tmp_int] == -1) {
1725 global_index_hit[tmp_int] = -2;
1726 m = global_index[tmp_int] / result->
t_node;
1727 import_index[m + 1]++;
1730 for (i = 0; i < recv_ptr_parent_num[pesize]; i++) {
1731 tmp_int = tmp2_int_nodeid[i];
1732 if (tmp_int >= result->
t_node) {
1733 fprintf(stderr,
"There is something wrong with data: i=%d tmp_int=%d\n",
1737 if (global_index_hit[tmp_int] == -1) {
1738 global_index_hit[tmp_int] = -2;
1739 m = global_index[tmp_int] / result->
t_node;
1740 import_index[m + 1]++;
1743 for (i = 1; i < pesize + 1; i++)
1744 import_index[i] = import_index[i - 1] + import_index[i];
1745 count_index = (
int *)calloc(pesize,
sizeof(
int));
1746 for (i = 0; i < pesize; i++) count_index[i] = 0;
1747 for (i = 0; i < result->
t_node; i++) {
1748 global_index_hit[i] = -1;
1750 for (i = 0; i < recv_node_num[pesize]; i++) {
1751 global_index_hit[recv_node[i]] = i;
1777 for (i = 0; i < recv_node_num[pesize]; i++) {
1781 if ((recv_ptr_num[pesize] + recv_ptr_parent_num[pesize]) > 0) {
1783 recv_ptr_num[pesize] + recv_ptr_parent_num[pesize],
sizeof(
int));
1787 for (i = 0; i < recv_ptr_num[pesize]; i++) {
1788 tmp_int = tmp_int_nodeid[i];
1789 if (global_index_hit[tmp_int] != -1) {
1792 m = global_index[tmp_int] / result->
t_node;
1793 global_index_hit[tmp_int] =
1797 (global_index[tmp_int] % result->
t_node) + 1;
1799 global_index[tmp_int] / result->
t_node;
1803 for (i = 0; i < recv_ptr_parent_num[pesize]; i++) {
1804 tmp_int = tmp2_int_nodeid[i];
1805 if (global_index_hit[tmp_int] != -1) {
1807 global_index_hit[tmp_int];
1809 m = global_index[tmp_int] / result->
t_node;
1810 global_index_hit[tmp_int] =
1813 global_index_hit[tmp_int];
1815 (global_index[tmp_int] % result->
t_node) + 1;
1817 global_index[tmp_int] / result->
t_node;
1822 for (i = 0; i < recv_ptr_num[pesize] + recv_ptr_parent_num[pesize]; i++)
1860 for (i = 1; i < pesize + 1; i++) {
1861 if ((import_index[i] - import_index[i - 1]) > 0) tmp_int++;
1863 import_n_neighbor_pe = tmp_int;
1864 import_neighbor_pe = (
int *)calloc(tmp_int,
sizeof(
int));
1867 for (i = 1; i < pesize + 1; i++) {
1868 if ((import_index[i] - import_index[i - 1]) > 0) {
1870 import_neighbor_pe[tmp_int] = i - 1;
1873 export_index = (
int *)calloc(pesize + 1,
sizeof(
int));
1876 export_node = (
int *)calloc(export_index[pesize] + 1,
sizeof(
int));
1877 tmp_send = (
int *)calloc(import_index[pesize] + 1,
sizeof(
int));
1879 for (i = 0; i < import_index[pesize]; i++)
1892 export_index, import_index, tmp_send, export_node,
1903 for (i = 1; i < pesize + 1; i++) {
1904 if ((export_index[i] - export_index[i - 1]) > 0) tmp_int++;
1906 export_n_neighbor_pe = tmp_int;
1907 export_neighbor_pe = (
int *)calloc(tmp_int,
sizeof(
int));
1909 for (i = 1; i < pesize + 1; i++) {
1910 if ((export_index[i] - export_index[i - 1]) > 0) {
1912 export_neighbor_pe[tmp_int] = i - 1;
1916 if (export_n_neighbor_pe > import_n_neighbor_pe) {
1940 if (import_index[pesize] > 0) {
1945 for (i = 0; i < import_index[pesize]; i++)
1947 if (export_index[pesize] > 0) {
1952 for (i = 0; i < export_index[pesize]; i++)
1954 free(global_index_hit);
1969 tmp_node_d = (
double *)calloc(send_node_num[pesize] + 1,
sizeof(
double));
1970 recv_node_d = (
double *)calloc(recv_node_num[pesize] + 1,
sizeof(
double));
1971 tmp2_node_d = (
double *)calloc(export_index[pesize] + 1,
sizeof(
double));
1972 recv2_node_d = (
double *)calloc(import_index[pesize] + 1,
sizeof(
double));
1973 if ((tmp_node_d ==
NULL) || (recv_node_d ==
NULL) || (tmp2_node_d ==
NULL) ||
1974 (recv2_node_d ==
NULL))
1976 for (j = 0; j < 3; j++) {
1977 for (i = 0; i < recv_node_num[pesize]; i++) recv_node_d[i] = 0.0;
1978 for (i = 0; i < send_node_num[pesize]; i++)
1979 tmp_node_d[i] =
mesh->
node[send_node[i] * 3 + j];
1981 pesize, recv_node_num, send_node_num, tmp_node_d,
1983 for (i = 0; i < export_index[pesize]; i++)
1984 tmp2_node_d[i] = recv_node_d[export_node[i] - 1];
1987 import_index, export_index, tmp2_node_d,
1991 for (i = 0; i < import_index[pesize]; i++)
2014 free(tmp_int_nodeid);
2015 free(tmp2_int_nodeid);
2049 (
double *)calloc(tn_component *
new_mesh->
n_node,
sizeof(
double));
2052 for (j = 0; j < tn_component; j++) {
2053 for (i = 0; i < send_node_num[pesize]; i++)
2057 pesize, recv_node_num, send_node_num, tmp_node_d,
2059 for (i = 0; i < export_index[pesize]; i++)
2060 tmp2_node_d[i] = recv_node_d[export_node[i] - 1];
2063 pesize, import_index, export_index, tmp2_node_d,
2067 for (i = 0; i < import_index[pesize]; i++)
2082 tmp_node_i = (
int *)calloc(send_node_num[pesize] + 1,
sizeof(
int));
2083 recv_node_i = (
int *)calloc(recv_node_num[pesize] + 1,
sizeof(
int));
2084 tmp2_node_i = (
int *)calloc(export_index[pesize] + 1,
sizeof(
int));
2085 recv2_node_i = (
int *)calloc(import_index[pesize] + 1,
sizeof(
int));
2086 if ((tmp_node_i ==
NULL) || (recv_node_i ==
NULL))
2088 for (i = 0; i < recv_node_num[pesize]; i++) recv_node_i[i] = -1;
2089 for (i = 0; i < send_node_num[pesize]; i++)
2093 recv_node_num, send_node_num, tmp_node_i, recv_node_i,
2095 for (i = 0; i < export_index[pesize]; i++)
2096 tmp2_node_i[i] = recv_node_i[export_node[i] - 1];
2099 import_index, export_index, tmp2_node_i, recv2_node_i,
2103 for (i = 0; i < import_index[pesize]; i++)
2113 tmp_grp[m].num_of_item = 0;
2123 i < mesh->node_group->grp_index[m + 1]; i++) {
2128 for (i = 0; i < recv_node_num[pesize]; i++) recv_node_i[i] = -1;
2129 for (i = 0; i < send_node_num[pesize]; i++)
2130 tmp_node_i[i] = tmp_elem_grp[send_node[i]];
2133 recv_node_num, send_node_num, tmp_node_i,
2135 for (i = 0; i < export_index[pesize]; i++)
2136 tmp2_node_i[i] = recv_node_i[export_node[i] - 1];
2139 import_index, export_index, tmp2_node_i,
2143 if (recv_node_i[i] == 1) num_grp_item++;
2145 for (i = 0; i < import_index[pesize]; i++) {
2146 if (recv2_node_i[i] == 1) num_grp_item++;
2149 if (num_grp_item > 0) {
2150 tmp_grp[m].
item = (
int *)calloc(num_grp_item,
sizeof(
int));
2154 if (recv_node_i[i] == 1) {
2155 tmp_grp[m].
item[tmp_int] = i + 1;
2159 for (i = 0; i < import_index[pesize]; i++) {
2160 if (recv2_node_i[i] == 1) {
2171 num_grp_item += tmp_grp[m].num_of_item;
2180 if (num_grp_item > 0) {
2193 if (tmp_grp[m].num_of_item > 0) free(tmp_grp[m].item);
2196 if (mynode == 0) fprintf(stderr,
"Finish generating new node_grp inf.\n");
2205 new_vtxdist = (
int *)calloc(pesize + 1,
sizeof(
int));
2209 new_vtxdist[1] = nvtxs;
2211 for (i = 1; i < pesize; i++) {
2214 tmp_sum += tmp_nvtxs;
2215 new_vtxdist[i + 1] = tmp_sum;
2217 for (i = 1; i < pesize; i++)
2283 if (count_elem_index ==
NULL)
2290 count_elem_index[j]++;
2295 free(count_elem_index);
2341 for (j = new_tmp2[new2old[i]]; j < new_tmp2[new2old[i] + 1]; j++) {
2365 fprintf(test_fp,
"i= %d elem_ID=%d %d\n", i,
new_mesh->
elem_ID[i * 2],
2444 new_tmp = (
int *)calloc(
2448 for (j = new_tmp2[new2old[i]]; j < new_tmp2[new2old[i] + 1]; j++) {
2628 new_tmp = (
int *)calloc(
2642 new_tmp = (
int *)calloc(
2861 "Finish migration now. The time cost for migration and generating "
2862 "new mesh is %lf\n",