20 int *tn_component,
int *te_component) {
23 for (i = 0; i <
data->nn_component; i++) *tn_component +=
data->nn_dof[i];
26 for (i = 0; i <
data->ne_component; i++) *te_component +=
data->ne_dof[i];
29 static void femap_write_elem(FILE *outfp,
int mynode,
int n_elem,
int n_node,
30 int *global_elem_ID,
int *elem_ID,
int *elem_type,
31 int *section_ID,
int *elem_node_index,
32 int *elem_node_item,
int *global_node_ID,
35 int ielm, icol, isid, isop, istyp, ietyp, itopo;
36 int nna[10], nnb[10], nn[20];
38 for (i = 0; i < n_elem; i++) {
39 if (elem_ID[i * 2 + 1] != mynode)
continue;
41 for (m = 0; m < 20; m++) {
44 for (m = 0; m < 10; m++) {
49 ielm = global_elem_ID[i];
52 isop = sect_opt[isid];
53 for (j = 0; j < elem_node_index[i + 1] - elem_node_index[i]; j++) {
54 nn[j] = global_node_ID[elem_node_item[elem_node_index[i] + j] - 1];
59 if (isop == 1) istyp = 19;
60 if (isop == 2) istyp = 35;
65 }
else if (ietyp == 731) {
71 }
else if (ietyp == 232) {
73 if (isop == 1) istyp = 20;
74 if (isop == 2) istyp = 36;
82 }
else if (ietyp == 732) {
91 }
else if (ietyp == 241) {
93 if (isop == 1) istyp = 19;
94 if (isop == 2) istyp = 35;
100 }
else if (ietyp == 741) {
107 }
else if (ietyp == 242) {
109 if (isop == 1) istyp = 20;
110 if (isop == 2) istyp = 36;
112 for (m = 0; m < 8; m++) nna[m] = nn[m];
113 }
else if (ietyp == 742) {
116 for (m = 0; m < 8; m++) nna[m] = nn[m];
117 }
else if (ietyp == 743) {
120 for (m = 0; m < 8; m++) nna[m] = nn[m];
121 }
else if (ietyp == 341 || ietyp == 3414) {
128 }
else if (ietyp == 351) {
137 }
else if (ietyp == 361) {
140 for (m = 0; m < 8; m++) nna[m] = nn[m];
141 }
else if (ietyp == 342 || ietyp == 3422) {
154 }
else if (ietyp == 352) {
172 }
else if (ietyp == 362) {
175 for (m = 0; m < 10; m++) nna[m] = nn[m];
188 fprintf(outfp,
"%8d,%8d,%8d,%8d,%8d,1,0,0,0,0,0,0,0,\n", ielm, icol, isid,
190 for (m = 0; m < 10; m++) fprintf(outfp,
"%8d,", nna[m]);
191 fprintf(outfp,
"\n");
192 for (m = 0; m < 10; m++) fprintf(outfp,
"%8d,", nnb[m]);
193 fprintf(outfp,
"\n");
194 fprintf(outfp,
"0,0,0,\n");
195 fprintf(outfp,
"0,0,0,\n");
196 fprintf(outfp,
"0,0,0,\n");
197 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n");
208 int tmp_int, tn_component, tmp_int2, te_component;
209 double *tmp_recv_d, *tmp_send_d;
210 int *tmp_recv_i, *tmp_elem_ID, *tmp_elem_type, *tmp_elem_global_ID,
211 *tmp_elem_node_index, *tmp_elem_node_item, *tmp_section_ID,
212 *tmp_node_global_ID, *tmp_send_i;
213 int disp_comp, stress_comp, disp_base, stress_base, name_len;
214 int temp_comp, temp_base;
222 strcat(outfile,
".neu");
223 outfp = fopen(outfile,
"w");
244 fprintf(outfp,
" -1\n");
245 fprintf(outfp,
" 403\n");
248 fprintf(outfp,
"%8d,0,0,1,46,0,0,0,0,0,0,%15.7e,%15.7e,%15.7e\n",
252 for (i = 1; i < pesize; i++) {
256 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int * 3,
sizeof(
double));
257 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
265 for (j = 0; j < tmp_int; j++)
266 fprintf(outfp,
"%8d,0,0,1,46,0,0,0,0,0,0,%15.7e,%15.7e,%15.7e\n",
267 tmp_recv_i[j], tmp_recv_d[j * 3], tmp_recv_d[j * 3 + 1],
268 tmp_recv_d[j * 3 + 2]);
274 fprintf(outfp,
" -1\n");
299 fprintf(outfp,
" -1\n");
300 fprintf(outfp,
" 404\n");
307 for (j = 1; j < pesize; j++) {
313 tmp_elem_global_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
314 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_int * 2,
sizeof(
int));
315 tmp_elem_type = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
316 tmp_section_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
317 tmp_elem_node_index = (
int *)
HECMW_calloc(tmp_int + 1,
sizeof(
int));
318 if ((tmp_elem_global_ID ==
NULL) || (tmp_elem_ID ==
NULL) ||
319 (tmp_elem_type ==
NULL) || (tmp_section_ID ==
NULL))
334 (
int *)
HECMW_calloc(tmp_elem_node_index[tmp_int],
sizeof(
int));
335 tmp_node_global_ID = (
int *)
HECMW_calloc(tmp_int2,
sizeof(
int));
342 femap_write_elem(outfp, j, tmp_int, tmp_int2, tmp_elem_global_ID,
343 tmp_elem_ID, tmp_elem_type, tmp_section_ID,
344 tmp_elem_node_index, tmp_elem_node_item,
356 fprintf(outfp,
" -1\n");
364 count_data_components(
data, &tn_component, &te_component);
371 for (j = 0; j <
data->nn_component; j++) {
372 name_len = strlen(
data->node_label[j]);
373 if (strncmp(
"TEMPERATURE",
data->node_label[j], name_len) == 0) {
377 if (temp_comp >= 0) {
379 for (i = 0; i < temp_comp; i++) temp_base +=
data->nn_dof[i];
389 tmp_send_d[i] =
data->node_val_item[i * tn_component + temp_base];
397 fprintf(outfp,
" -1\n");
398 fprintf(outfp,
" 451\n");
399 fprintf(outfp,
"1,1,1,\n");
400 fprintf(outfp,
"Temperature\n");
401 fprintf(outfp,
"1.0, 0.0, 0.0\n");
402 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
403 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
404 fprintf(outfp,
"0,0,6,7,\n");
405 fprintf(outfp,
"0,0,1,\n");
408 tmp =
data->node_val_item[i * tn_component + temp_base];
411 for (i = 1; i < pesize; i++) {
415 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
416 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
422 for (j = 0; j < tmp_int; j++)
423 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
428 fprintf(outfp,
"-1,0.\n");
436 for (j = 0; j <
data->nn_component; j++) {
437 name_len = strlen(
data->node_label[j]);
438 if (strncmp(
"DISPLACEMENT",
data->node_label[j], name_len) == 0) {
443 for (j = 0; j <
data->nn_component; j++) {
444 name_len = strlen(
data->node_label[j]);
445 if (strncmp(
"NodalSTRESS",
data->node_label[j], name_len) == 0 ||
446 strncmp(
"NodalSTRESSplus",
data->node_label[j], name_len) == 0) {
453 for (i = 0; i < disp_comp; i++) disp_base +=
data->nn_dof[i];
454 for (i = 0; i < stress_comp; i++) stress_base +=
data->nn_dof[i];
465 sqrt(
data->node_val_item[i * tn_component + disp_base] *
466 data->node_val_item[i * tn_component + disp_base] +
467 data->node_val_item[i * tn_component + disp_base + 1] *
468 data->node_val_item[i * tn_component + disp_base + 1] +
469 data->node_val_item[i * tn_component + disp_base + 2] *
470 data->node_val_item[i * tn_component + disp_base + 2]);
480 tmp_send_d[i] =
data->node_val_item[i * tn_component + disp_base];
489 tmp_send_d[i] =
data->node_val_item[i * tn_component + disp_base + 1];
498 tmp_send_d[i] =
data->node_val_item[i * tn_component + disp_base + 2];
504 for (j = 0; j < 7; j++) {
510 data->node_val_item[i * tn_component + stress_base + j];
515 for (j = 0; j < 14; j++) {
521 data->node_val_item[i * tn_component + stress_base + j];
529 fprintf(outfp,
" -1\n");
530 fprintf(outfp,
" 451\n");
531 for (k = 0; k < 4; k++) {
532 fprintf(outfp,
"1,%1d,1,\n", k + 1);
534 fprintf(outfp,
"Total Translation\n");
536 fprintf(outfp,
"T%1d Translation\n", k);
537 fprintf(outfp,
"1.0, 0.0, 0.0\n");
539 fprintf(outfp,
"2,3,4,0,0,0,0,0,0,0,\n");
541 fprintf(outfp,
"2,0,0,0,0,0,0,0,0,0,\n");
543 fprintf(outfp,
"0,3,0,0,0,0,0,0,0,0,\n");
545 fprintf(outfp,
"0,0,4,0,0,0,0,0,0,0,\n");
546 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
547 fprintf(outfp,
"0,0,1,7,\n");
549 fprintf(outfp,
"1,1,1,\n");
551 fprintf(outfp,
"0,1,1,\n");
555 tmp = sqrt(
data->node_val_item[i * tn_component + disp_base] *
556 data->node_val_item[i * tn_component + disp_base] +
557 data->node_val_item[i * tn_component + disp_base + 1] *
558 data->node_val_item[i * tn_component + disp_base + 1] +
559 data->node_val_item[i * tn_component + disp_base + 2] *
560 data->node_val_item[i * tn_component + disp_base + 2]);
562 tmp =
data->node_val_item[i * tn_component + disp_base + k - 1];
565 for (i = 1; i < pesize; i++) {
569 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
570 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
576 for (j = 0; j < tmp_int; j++)
577 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
582 fprintf(outfp,
"-1,0.\n");
585 char *nodal_stress_titles_solid[] = {
586 "Solid X Normal Stress",
"Solid Y Normal Stress",
587 "Solid Z Normal Stress",
"Solid XY Shear Stress",
588 "Solid YZ Shear Stress",
"Solid XZ Shear Stress",
589 "Solid Von Mises Stress"};
590 for (k = 0; k < 7; k++) {
591 fprintf(outfp,
"1,6001%1d,1,\n", k + 1);
592 fprintf(outfp,
"%s\n", nodal_stress_titles_solid[k]);
593 fprintf(outfp,
"1.0, 0.0, 0.0\n");
594 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
595 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
596 fprintf(outfp,
"0,0,4,7,\n");
597 fprintf(outfp,
"0,0,1,\n");
600 tmp =
data->node_val_item[i * tn_component + stress_base + k];
603 for (i = 1; i < pesize; i++) {
607 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
608 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
614 for (j = 0; j < tmp_int; j++)
615 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
620 fprintf(outfp,
"-1,0.\n");
623 char *nodal_stress_ids_shell[] = {
624 "1,70011,1,",
"1,70012,1,",
"1,70013,1,",
"1,70014,1,",
"1,70015,1,",
625 "1,70016,1,",
"1,71011,1,",
"1,71012,1,",
"1,71013,1,",
"1,71014,1,",
626 "1,71015,1,",
"1,71016,1,",
"1,70017,1,",
"1,71017,1,"};
627 char *nodal_stress_titles_shell[] = {
628 "Plate Top X Normal Stress",
"Plate Top Y Normal Stress",
629 "Plate Top Z Normal Stress",
"Plate Top XY Shear Stress",
630 "Plate Top YZ Shear Stress",
"Plate Top XZ Shear Stress",
631 "Plate Bot X Normal Stress",
"Plate Bot Y Normal Stress",
632 "Plate Bot Z Normal Stress",
"Plate Bot XY Shear Stress",
633 "Plate Bot YZ Shear Stress",
"Plate Bot XZ Shear Stress",
634 "Plate Top Von Mises Stress",
"Plate Bot Von Mises Stress"};
635 for (k = 0; k < 14; k++) {
636 fprintf(outfp,
"%s\n", nodal_stress_ids_shell[k]);
637 fprintf(outfp,
"%s\n", nodal_stress_titles_shell[k]);
638 fprintf(outfp,
"1.0, 0.0, 0.0\n");
639 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
640 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
641 fprintf(outfp,
"0,0,4,7,\n");
642 fprintf(outfp,
"0,0,1,\n");
645 tmp =
data->node_val_item[i * tn_component + stress_base + k];
648 for (i = 1; i < pesize; i++) {
652 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
653 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
661 for (j = 0; j < tmp_int; j++)
662 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
668 fprintf(outfp,
"-1,0.\n");
675 if (
data->ne_component > 0) {
677 for (j = 0; j <
data->ne_component; j++) {
678 name_len = strlen(
data->elem_label[j]);
679 if (strncmp(
"ElementalSTRESS",
data->elem_label[j], name_len) == 0) {
685 for (i = 0; i < stress_comp; i++) stress_base +=
data->ne_dof[i];
691 for (j = 0; j < 7; j++) {
698 data->elem_val_item[tmp_int * te_component + stress_base + j];
708 char *elem_stress_titles_solid[] = {
709 "Solid X Normal Stress",
"Solid Y Normal Stress",
710 "Solid Z Normal Stress",
"Solid XY Shear Stress",
711 "Solid YZ Shear Stress",
"Solid XZ Shear Stress",
712 "Solid Von Mises Stress"};
714 for (k = 0; k < 7; k++) {
715 fprintf(outfp,
"1,7001%1d,1,\n", k + 1);
716 fprintf(outfp,
"%s\n", elem_stress_titles_solid[k]);
717 fprintf(outfp,
"1.0, 0.0, 0.0\n");
718 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
719 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
720 fprintf(outfp,
"0,0,4,8,\n");
721 fprintf(outfp,
"0,0,1,\n");
725 tmp =
data->elem_val_item[tmp_int * te_component + stress_base + k];
728 for (i = 1; i < pesize; i++) {
732 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
733 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
741 for (j = 0; j < tmp_int; j++)
742 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
748 fprintf(outfp,
"-1,0.\n");
755 fprintf(outfp,
" -1\n");
756 fprintf(outfp,
" -1\n");
764 static void avs_write_header(FILE *outfp,
int total_n_node,
int total_n_elem,
765 int tn_component,
int te_component,
768 fprintf(outfp,
"%d %d %d %d 0\n", total_n_node, total_n_elem, tn_component,
771 fprintf(outfp,
"1\n");
772 fprintf(outfp,
"data\n");
773 fprintf(outfp,
"step1\n");
774 fprintf(outfp,
"%d %d\n", total_n_node, total_n_elem);
778 static void avs_write_node_coord(FILE *outfp,
int n_node,
int *global_node_ID,
779 double *node,
int flag_global_ID,
785 for (i = 0; i < n_node; i++) {
786 fprintf(outfp,
"%8d %15.7e %15.7e %15.7e\n",
787 flag_global_ID ? global_node_ID[i] : i + 1 + nid_offset,
788 node[i * 3], node[i * 3 + 1], node[i * 3 + 2]);
792 static const int *avs_elem_node_order(
int elem_type) {
793 static const int i232[] = {0, 1, 2, 5, 3, 4};
794 static const int i342[] = {0, 1, 3, 2, 6, 7, 5, 8, 9, 4};
795 static const int i352[] = {0, 2, 1, 3, 5, 4, 7, 6, 8, 10, 9, 11, 12, 14, 13};
796 static const int i362[] = {0, 3, 2, 1, 4, 7, 6, 5, 11, 10,
797 9, 8, 15, 14, 13, 12, 16, 19, 18, 17};
798 static const int idefault[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
799 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
802 if (elem_type == 232 || elem_type == 732)
804 else if (elem_type == 341 || elem_type == 342 || elem_type == 3414)
806 else if (elem_type == 351 || elem_type == 352)
808 else if (elem_type == 361 || elem_type == 362)
816 static void avs_write_elem_conn(FILE *outfp,
int mynode,
int n_elem,
817 int *elem_ID,
int *elem_type,
818 int *elem_node_index,
int *elem_node_item,
819 int *global_elem_ID,
int *global_node_ID,
820 int *node_ID,
int flag_global_ID,
821 int flag_skip_external,
int flag_oldUCD,
822 int *nid_offsets,
int eid_offset) {
824 int i, j, etype, node_num;
828 HECMW_assert((flag_global_ID && global_elem_ID && global_node_ID) ||
829 (!flag_global_ID && (!nid_offsets || node_ID)));
831 for (i = 0; i < n_elem; i++) {
832 if (flag_skip_external && elem_ID[i * 2 + 1] != mynode)
continue;
836 etype = elem_type[i];
837 if (flag_oldUCD && etype % 2 == 0) {
839 if (etype != 3414 && etype != 3614) {
846 for (j = 0; j < node_num; j++) {
847 int nid = elem_node_item[elem_node_index[i] + j] - 1;
848 if (flag_global_ID) {
849 nn[j] = global_node_ID[nid];
850 }
else if (nid_offsets !=
NULL) {
851 int rank = node_ID[nid * 2 + 1];
852 int nid_in_rank = node_ID[nid * 2];
853 nn[j] = nid_offsets[rank] + nid_in_rank;
859 fprintf(outfp,
"%8d %d %s ",
860 flag_global_ID ? global_elem_ID[i] : eid + eid_offset,
863 ii = avs_elem_node_order(etype);
864 for (j = 0; j < node_num; j++) fprintf(outfp,
"%8d ", nn[ii[j]]);
865 fprintf(outfp,
"\n");
869 static void avs_write_data_header(FILE *outfp,
int tn_component,
870 int te_component,
int flag_oldUCD) {
871 if (flag_oldUCD)
return;
872 fprintf(outfp,
"%8d %8d\n", tn_component, te_component);
875 static void avs_write_node_data_header(FILE *outfp,
int tn_component,
881 fprintf(outfp,
"%8d", tn_component);
882 for (j = 0; j < tn_component; j++) fprintf(outfp,
" 1");
883 fprintf(outfp,
"\n");
884 for (j = 0; j <
data->nn_component; j++) {
885 for (ii = 0; ii <
data->nn_dof[j]; ii++)
886 fprintf(outfp,
"%s_%d, unit_unknown\n",
data->node_label[j], ii + 1);
889 fprintf(outfp,
"%8d",
data->nn_component);
890 for (j = 0; j <
data->nn_component; j++)
891 fprintf(outfp,
" %d",
data->nn_dof[j]);
892 fprintf(outfp,
"\n");
893 for (j = 0; j <
data->nn_component; j++)
894 fprintf(outfp,
"%s, unit_unknown\n",
data->node_label[j]);
898 static void avs_write_node_data(FILE *outfp,
int n_node,
int *global_node_ID,
899 int tn_component,
double *node_val_item,
900 int flag_global_ID,
int nid_offset) {
905 for (i = 0; i < n_node; i++) {
906 fprintf(outfp,
"%8d ",
907 flag_global_ID ? global_node_ID[i] : i + 1 + nid_offset);
908 for (k = 0; k < tn_component; k++)
909 fprintf(outfp,
"%15.7e ", node_val_item[i * tn_component + k]);
910 fprintf(outfp,
"\n");
915 int i, j, n, refine, max_elem;
920 if (refine <= 0)
return 0;
924 for (n = 0; n < refine; n++) {
926 for (i = 0; i < nn; i++) {
927 if (max_elem < mesh->node_ID[2 * i]) {
932 for (i = 0; i < nn; i++) {
950 fprintf (outfp,
"%8d", te_component);
951 for (j = 0; j < te_component; j++)
952 fprintf (outfp,
" 1");
953 fprintf (outfp,
"\n");
954 for (j = 0; j <
data->ne_component; j++) {
955 for (ii = 0; ii <
data->ne_dof[j]; ii++)
956 fprintf (outfp,
"%s_%d, unit_unknown\n",
data->elem_label[j], ii + 1);
959 fprintf (outfp,
"%8d",
data->ne_component);
960 for (j = 0; j <
data->ne_component; j++)
961 fprintf (outfp,
" %d",
data->ne_dof[j]);
962 fprintf (outfp,
"\n");
963 for (j = 0; j <
data->ne_component; j++)
964 fprintf (outfp,
"%s, unit_unknown\n",
data->elem_label[j]);
969 avs_write_elem_data(FILE *outfp,
int mynode,
970 int n_elem,
int *elem_ID,
int *global_elem_ID,
int te_component,
double *elem_val_item,
971 int flag_global_ID,
int eid_offset) {
976 for (i = 0; i < n_elem; i++) {
977 if (elem_ID[i * 2 + 1] != mynode)
980 fprintf (outfp,
"%8d ", flag_global_ID ? global_elem_ID[i] : in+1 + eid_offset);
981 for (k = 0; k < te_component; k++)
982 fprintf (outfp,
"%15.7e ",
983 elem_val_item[i * te_component + k]);
984 fprintf (outfp,
"\n");
991 HECMW_Comm VIS_COMM,
int flag_oldUCD,
int flag_global_ID,
994 int total_n_node, total_n_elem;
995 int tn_component, te_component;
996 int *nid_offsets, *eid_offsets;
1000 int flag_skip_ext = 1;
1017 count_data_components(
data, &tn_component, &te_component);
1021 nid_offsets = (
int *)
HECMW_calloc(pesize + 1,
sizeof(
int));
1023 eid_offsets = (
int *)
HECMW_calloc(pesize + 1,
sizeof(
int));
1027 outfp = fopen(outfile,
"w");
1032 avs_write_header(outfp, total_n_node, total_n_elem, tn_component, te_component,
1055 for (i = 1; i < pesize; i++) {
1056 int tmp_nn_internal;
1060 nid_offsets[i + 1] = nid_offsets[i] + tmp_nn_internal;
1062 if (tmp_nn_internal > 0) {
1063 int *tmp_global_node_ID =
NULL;
1066 if (flag_global_ID) {
1067 tmp_global_node_ID =
1069 if (tmp_global_node_ID ==
NULL)
1076 tmp_node = (
double *)
HECMW_calloc(tmp_nn_internal * 3,
sizeof(
double));
1082 avs_write_node_coord(outfp, tmp_nn_internal, tmp_global_node_ID,
1083 tmp_node, flag_global_ID, nid_offsets[i]);
1085 if (flag_global_ID)
HECMW_free(tmp_global_node_ID);
1094 printf(
"###ERROR: modify element information due to refininer \n");
1115 if (flag_global_ID) {
1132 flag_skip_ext, flag_oldUCD, nid_offsets, 0);
1137 for (j = 1; j < pesize; j++) {
1139 int tmp_ne_internal;
1144 eid_offsets[j + 1] = eid_offsets[j] + tmp_ne_internal;
1146 if (tmp_n_elem > 0) {
1150 int *tmp_elem_node_index;
1151 int *tmp_elem_node_item;
1152 int *tmp_global_elem_ID;
1153 int *tmp_global_node_ID;
1159 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_n_elem * 2,
sizeof(
int));
1160 tmp_elem_type = (
int *)
HECMW_calloc(tmp_n_elem,
sizeof(
int));
1161 tmp_elem_node_index = (
int *)
HECMW_calloc(tmp_n_elem + 1,
sizeof(
int));
1162 if ((tmp_elem_ID ==
NULL) || (tmp_elem_type ==
NULL) ||
1163 (tmp_elem_node_index ==
NULL))
1165 "tmp recv: elem_ID, elem_type, elem_node_index");
1174 tmp_elem_node_item =
1175 (
int *)
HECMW_calloc(tmp_elem_node_index[tmp_n_elem],
sizeof(
int));
1176 if (tmp_elem_node_item ==
NULL)
1179 HECMW_Recv(tmp_elem_node_item, tmp_elem_node_index[tmp_n_elem],
1182 if (flag_global_ID) {
1183 tmp_global_elem_ID = (
int *)
HECMW_calloc(tmp_n_elem,
sizeof(
int));
1184 tmp_global_node_ID = (
int *)
HECMW_calloc(tmp_n_node,
sizeof(
int));
1185 if ((tmp_global_elem_ID ==
NULL) || (tmp_global_node_ID ==
NULL))
1195 tmp_global_elem_ID =
NULL;
1196 tmp_global_node_ID =
NULL;
1198 tmp_node_ID = (
int *)
HECMW_calloc(tmp_n_node * 2,
sizeof(
int));
1205 avs_write_elem_conn(outfp, j, tmp_n_elem, tmp_elem_ID, tmp_elem_type,
1206 tmp_elem_node_index, tmp_elem_node_item,
1207 tmp_global_elem_ID, tmp_global_node_ID, tmp_node_ID,
1208 flag_global_ID, flag_skip_ext, flag_oldUCD,
1209 nid_offsets, eid_offsets[j]);
1216 if (flag_global_ID) {
1228 avs_write_data_header(outfp, tn_component, te_component, flag_oldUCD);
1229 avs_write_node_data_header(outfp, tn_component,
data, flag_Scalar);
1246 tn_component,
data->node_val_item, flag_global_ID, 0);
1248 for (i = 1; i < pesize; i++) {
1249 int tmp_nn_internal;
1254 if (tmp_nn_internal > 0) {
1255 int *tmp_global_node_ID =
NULL;
1256 double *tmp_node_val_item;
1258 if (flag_global_ID) {
1259 tmp_global_node_ID =
1261 if (tmp_global_node_ID ==
NULL)
1269 tmp_nn_internal * tn_component,
sizeof(
double));
1270 if (tmp_node_val_item ==
NULL)
1273 HECMW_Recv(tmp_node_val_item, tmp_nn_internal * tn_component,
1276 avs_write_node_data(outfp, tmp_nn_internal, tmp_global_node_ID,
1277 tn_component, tmp_node_val_item, flag_global_ID,
1280 if (flag_global_ID)
HECMW_free(tmp_global_node_ID);
1288 if (te_component > 0){
1289 avs_write_elem_data_header(outfp, te_component,
data, flag_Scalar);
1295 if (te_component > 0){
1306 if (te_component > 0){
1308 for (i = 1; i < pesize; i++){
1312 if (tmp_n_elem > 0){
1314 double *tmp_elem_val_item;
1315 int *tmp_global_elem_ID =
NULL;
1317 tmp_elem_ID = (
int *)
HECMW_calloc (tmp_n_elem * 2,
sizeof (
int));
1318 if (tmp_elem_ID ==
NULL)
1323 if (flag_global_ID){
1324 tmp_global_elem_ID = (
int *)
HECMW_calloc (tmp_n_elem,
sizeof (
int));
1325 if (tmp_global_elem_ID ==
NULL)
1331 tmp_elem_val_item = (
double *)
HECMW_calloc (tmp_n_elem * te_component,
sizeof (
double));
1332 if (tmp_elem_val_item ==
NULL)
1337 avs_write_elem_data(outfp, i, tmp_n_elem, tmp_elem_ID, tmp_global_elem_ID, te_component, tmp_elem_val_item, flag_global_ID, eid_offsets[i]);
1360 int flag_oldUCD = 0;
1361 int flag_global_ID = 1;
1362 int flag_Scalar = 0;
1363 avs_output(
mesh,
data, outfile, VIS_COMM, flag_oldUCD, flag_global_ID,
1370 int flag_oldUCD = 1;
1371 int flag_global_ID = 0;
1372 int flag_Scalar = 0;
1373 avs_output(
mesh,
data, outfile, VIS_COMM, flag_oldUCD, flag_global_ID,
1380 int flag_oldUCD = 0;
1381 int flag_global_ID = 1;
1382 int flag_Scalar = 1;
1383 avs_output(
mesh,
data, outfile, VIS_COMM, flag_oldUCD, flag_global_ID,
1393 int ielm, nn[20], tmp_int, tn_component, tmp_int2, te_component, tmp_nn[20];
1394 double *tmp_recv_d, *tmp_send_d;
1395 int *tmp_recv_i, *tmp_elem_ID, *tmp_elem_type, *tmp_elem_global_ID,
1396 *tmp_elem_node_index, *tmp_elem_node_item, *tmp_section_ID,
1397 *tmp_node_global_ID;
1399 int total_n_node, total_n_elem;
1412 char nodedata_label[16];
1413 char nodedata_unit[16];
1415 int tmp_int_conv, *tmp_global_id, count, elem_type_bin;
1451 for (i = 0; i <
data->nn_component; i++) tn_component +=
data->nn_dof[i];
1453 for (i = 0; i <
data->ne_component; i++) te_component +=
data->ne_dof[i];
1455 fp2 = fopen(outfile,
"w");
1456 fprintf(fp2,
"#UCD Binary format\n");
1457 fprintf(fp2,
"#\n");
1458 fprintf(fp2,
"data\n");
1459 fprintf(fp2,
"bin_data.dat\n");
1462 fp = fopen(
"bin_data.dat",
"wb");
1466 fprintf(stderr,
"Start writing binary output for AVS UCD format\n");
1467 snprintf(keyword, 7,
"AVS UCD");
1469 #ifdef CONVERSE_ORDER
1472 strcpy(
title,
"ucd binary test data");
1474 #ifdef CONVERSE_ORDER
1478 #ifdef CONVERSE_ORDER
1481 tmp_int_conv = total_n_node;
1482 #ifdef CONVERSE_ORDER
1486 fwrite(keyword, 7, 1, fp);
1488 fwrite(
title, 70, 1, fp);
1489 fwrite(&stepno, 4, 1, fp);
1490 fwrite(&timeval, 4, 1, fp);
1491 fwrite(&tmp_int_conv, 4, 1, fp);
1493 #ifdef CONVERSE_ORDER
1497 fwrite(&ztype, 4, 1, fp);
1512 #ifdef CONVERSE_ORDER
1515 fwrite(&tmp_int_conv, 4, 1, fp);
1517 xyz[1] = (
float)
mesh->
node[i * 3 + 1];
1518 xyz[2] = (float)
mesh->
node[i * 3 + 2];
1519 #ifdef CONVERSE_ORDER
1524 fwrite(xyz, 4, 3, fp);
1526 for (i = 1; i < pesize; i++) {
1529 tmp_recv_i = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1530 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int * 3,
sizeof(
double));
1531 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
1537 for (j = 0; j < tmp_int; j++) {
1538 tmp_int_conv = tmp_recv_i[j];
1539 #ifdef CONVERSE_ORDER
1542 fwrite(&tmp_int_conv, 4, 1, fp);
1543 xyz[0] = (float)tmp_recv_d[j * 3];
1544 xyz[1] = (float)tmp_recv_d[j * 3 + 1];
1545 xyz[2] = (float)tmp_recv_d[j * 3 + 2];
1546 #ifdef CONVERSE_ORDER
1551 fwrite(xyz, 4, 3, fp);
1568 tmp_global_id = (
int *)
HECMW_calloc(total_n_elem,
sizeof(
int));
1578 for (j = 1; j < pesize; j++) {
1581 tmp_elem_global_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1582 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_int * 2,
sizeof(
int));
1583 if ((tmp_elem_global_ID ==
NULL) || (tmp_elem_ID ==
NULL))
1590 for (i = 0; i < tmp_int; i++) {
1591 if (tmp_elem_ID[i * 2 + 1] == j) {
1592 tmp_global_id[count] = tmp_elem_global_ID[i];
1621 tmp_int_conv = total_n_elem;
1622 #ifdef CONVERSE_ORDER
1625 fwrite(&tmp_int_conv, 4, 1, fp);
1626 for (i = 0; i < total_n_elem; i++) {
1627 tmp_int_conv = tmp_global_id[i];
1628 #ifdef CONVERSE_ORDER
1631 fwrite(&tmp_int_conv, 4, 1, fp);
1633 for (i = 0; i < total_n_elem; i++) {
1635 #ifdef CONVERSE_ORDER
1638 fwrite(&tmp_int_conv, 4, 1, fp);
1640 icell_type[0] = (char)elem_type_bin;
1641 for (i = 0; i < total_n_elem; i++) {
1642 fwrite(&icell_type[0], 1, 1, fp);
1648 for (j = 0; j < node_num; j++)
1664 for (m = 0; m < node_num; m++) nn[m] = tmp_nn[m];
1668 for (m = 0; m < node_num; m++) {
1669 tmp_int_conv = nn[m];
1670 #ifdef CONVERSE_ORDER
1673 fwrite(&tmp_int_conv, 4, 1, fp);
1677 for (j = 1; j < pesize; j++) {
1681 tmp_elem_global_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1682 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_int * 2,
sizeof(
int));
1683 tmp_elem_type = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1684 tmp_section_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1685 tmp_elem_node_index = (
int *)
HECMW_calloc(tmp_int + 1,
sizeof(
int));
1686 if ((tmp_elem_global_ID ==
NULL) || (tmp_elem_ID ==
NULL) ||
1687 (tmp_elem_type ==
NULL) || (tmp_section_ID ==
NULL))
1695 tmp_elem_node_item =
1696 (
int *)
HECMW_calloc(tmp_elem_node_index[tmp_int],
sizeof(
int));
1697 tmp_node_global_ID = (
int *)
HECMW_calloc(tmp_int2,
sizeof(
int));
1703 for (i = 0; i < tmp_int; i++) {
1704 if (tmp_elem_ID[i * 2 + 1] == j) {
1705 ielm = tmp_elem_global_ID[i];
1706 for (m = 0; m < node_num; m++)
1707 tmp_nn[m] = tmp_node_global_ID
1708 [tmp_elem_node_item[tmp_elem_node_index[i] + m] - 1];
1721 for (m = 0; m < node_num; m++) nn[m] = tmp_nn[m];
1724 for (m = 0; m < node_num; m++) {
1725 tmp_int_conv = nn[m];
1726 #ifdef CONVERSE_ORDER
1729 fwrite(&tmp_int_conv, 4, 1, fp);
1746 tmp_int_conv = tn_component;
1747 #ifdef CONVERSE_ORDER
1750 fwrite(&tmp_int_conv, 4, 1, fp);
1752 #ifdef CONVERSE_ORDER
1755 fwrite(&tmp_int_conv, 4, 1, fp);
1756 for (j = 0; j <
data->nn_component; j++) {
1757 for (ii = 0; ii <
data->nn_dof[j]; ii++) {
1758 sprintf(nodedata_label,
"%s%d\n",
data->node_label[j], ii + 1);
1759 sprintf(nodedata_unit,
"%s",
"m/s");
1761 #ifdef CONVERSE_ORDER
1765 #ifdef CONVERSE_ORDER
1768 null_value = -999.999;
1769 #ifdef CONVERSE_ORDER
1772 fwrite(nodedata_label, 16, 1, fp);
1773 fwrite(nodedata_unit, 16, 1, fp);
1774 fwrite(&num_nodeveclen, 4, 1, fp);
1775 fwrite(&null_flag, 4, 1, fp);
1776 fwrite(&null_value, 4, 1, fp);
1788 tmp_send_d[i] =
data->node_val_item[i];
1799 for (k = 0; k < tn_component; k++) {
1800 tmp_d_conv = (float)
data->node_val_item[i * tn_component + k];
1801 #ifdef CONVERSE_ORDER
1804 fwrite(&tmp_d_conv, 4, 1, fp);
1807 for (i = 1; i < pesize; i++) {
1810 tmp_recv_i = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1812 (
double *)
HECMW_calloc(tmp_int * tn_component,
sizeof(
double));
1813 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
1819 for (j = 0; j < tmp_int; j++) {
1820 for (k = 0; k < tn_component; k++) {
1821 tmp_d_conv = (float)tmp_recv_d[j * tn_component + k];
1822 #ifdef CONVERSE_ORDER
1825 fwrite(&tmp_d_conv, 4, 1, fp);
1833 fwrite(&num_celldata, 4, 1, fp);
1835 if (mynode == 0) fclose(fp);
1844 int total_n_node, total_n_elem;
1845 int tn_component, te_component;
1847 int flag_oldUCD = 1;
1848 int flag_global_ID = 0;
1849 int flag_Scalar = 0;
1850 int flag_skip_ext = 0;
1859 count_data_components(
data, &tn_component, &te_component);
1862 outfp = fopen(outfile,
"w");
1867 avs_write_header(outfp, total_n_node, total_n_elem, tn_component, 0,
1879 flag_skip_ext, flag_oldUCD,
NULL, 0);
1882 avs_write_data_header(outfp, tn_component, 0, flag_oldUCD);
1885 avs_write_node_data_header(outfp, tn_component,
data, flag_Scalar);
1889 data->node_val_item, flag_global_ID, 0);