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,
long long *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_item, *tmp_section_ID,
212 *tmp_node_global_ID, *tmp_send_i;
213 long long *tmp_elem_node_index;
214 int disp_comp, stress_comp, disp_base, stress_base, name_len;
215 int temp_comp, temp_base;
223 strcat(outfile,
".neu");
224 outfp = fopen(outfile,
"w");
245 fprintf(outfp,
" -1\n");
246 fprintf(outfp,
" 403\n");
249 fprintf(outfp,
"%8d,0,0,1,46,0,0,0,0,0,0,%15.7e,%15.7e,%15.7e\n",
253 for (i = 1; i < pesize; i++) {
257 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int * 3,
sizeof(
double));
258 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
266 for (j = 0; j < tmp_int; j++)
267 fprintf(outfp,
"%8d,0,0,1,46,0,0,0,0,0,0,%15.7e,%15.7e,%15.7e\n",
268 tmp_recv_i[j], tmp_recv_d[j * 3], tmp_recv_d[j * 3 + 1],
269 tmp_recv_d[j * 3 + 2]);
275 fprintf(outfp,
" -1\n");
300 fprintf(outfp,
" -1\n");
301 fprintf(outfp,
" 404\n");
308 for (j = 1; j < pesize; j++) {
314 tmp_elem_global_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
315 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_int * 2,
sizeof(
int));
316 tmp_elem_type = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
317 tmp_section_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
318 tmp_elem_node_index = (
long long *)
HECMW_calloc(tmp_int + 1,
sizeof(
long long));
319 if ((tmp_elem_global_ID ==
NULL) || (tmp_elem_ID ==
NULL) ||
320 (tmp_elem_type ==
NULL) || (tmp_section_ID ==
NULL))
335 (
int *)
HECMW_calloc(tmp_elem_node_index[tmp_int],
sizeof(
int));
336 tmp_node_global_ID = (
int *)
HECMW_calloc(tmp_int2,
sizeof(
int));
343 femap_write_elem(outfp, j, tmp_int, tmp_int2, tmp_elem_global_ID,
344 tmp_elem_ID, tmp_elem_type, tmp_section_ID,
345 tmp_elem_node_index, tmp_elem_node_item,
357 fprintf(outfp,
" -1\n");
365 count_data_components(
data, &tn_component, &te_component);
372 for (j = 0; j <
data->nn_component; j++) {
373 name_len = strlen(
data->node_label[j]);
374 if (strncmp(
"TEMPERATURE",
data->node_label[j], name_len) == 0) {
378 if (temp_comp >= 0) {
380 for (i = 0; i < temp_comp; i++) temp_base +=
data->nn_dof[i];
390 tmp_send_d[i] =
data->node_val_item[i * tn_component + temp_base];
398 fprintf(outfp,
" -1\n");
399 fprintf(outfp,
" 451\n");
400 fprintf(outfp,
"1,1,1,\n");
401 fprintf(outfp,
"Temperature\n");
402 fprintf(outfp,
"1.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,0,0,0,0,0,0,0,0,\n");
405 fprintf(outfp,
"0,0,6,7,\n");
406 fprintf(outfp,
"0,0,1,\n");
409 tmp =
data->node_val_item[i * tn_component + temp_base];
412 for (i = 1; i < pesize; i++) {
416 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
417 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
423 for (j = 0; j < tmp_int; j++)
424 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
429 fprintf(outfp,
"-1,0.\n");
437 for (j = 0; j <
data->nn_component; j++) {
438 name_len = strlen(
data->node_label[j]);
439 if (strncmp(
"DISPLACEMENT",
data->node_label[j], name_len) == 0) {
444 for (j = 0; j <
data->nn_component; j++) {
445 name_len = strlen(
data->node_label[j]);
446 if (strncmp(
"NodalSTRESS",
data->node_label[j], name_len) == 0 ||
447 strncmp(
"NodalSTRESSplus",
data->node_label[j], name_len) == 0) {
454 for (i = 0; i < disp_comp; i++) disp_base +=
data->nn_dof[i];
455 for (i = 0; i < stress_comp; i++) stress_base +=
data->nn_dof[i];
466 sqrt(
data->node_val_item[i * tn_component + disp_base] *
467 data->node_val_item[i * tn_component + disp_base] +
468 data->node_val_item[i * tn_component + disp_base + 1] *
469 data->node_val_item[i * tn_component + disp_base + 1] +
470 data->node_val_item[i * tn_component + disp_base + 2] *
471 data->node_val_item[i * tn_component + disp_base + 2]);
481 tmp_send_d[i] =
data->node_val_item[i * tn_component + disp_base];
490 tmp_send_d[i] =
data->node_val_item[i * tn_component + disp_base + 1];
499 tmp_send_d[i] =
data->node_val_item[i * tn_component + disp_base + 2];
505 for (j = 0; j < 7; j++) {
511 data->node_val_item[i * tn_component + stress_base + j];
516 for (j = 0; j < 14; j++) {
522 data->node_val_item[i * tn_component + stress_base + j];
530 fprintf(outfp,
" -1\n");
531 fprintf(outfp,
" 451\n");
532 for (k = 0; k < 4; k++) {
533 fprintf(outfp,
"1,%1d,1,\n", k + 1);
535 fprintf(outfp,
"Total Translation\n");
537 fprintf(outfp,
"T%1d Translation\n", k);
538 fprintf(outfp,
"1.0, 0.0, 0.0\n");
540 fprintf(outfp,
"2,3,4,0,0,0,0,0,0,0,\n");
542 fprintf(outfp,
"2,0,0,0,0,0,0,0,0,0,\n");
544 fprintf(outfp,
"0,3,0,0,0,0,0,0,0,0,\n");
546 fprintf(outfp,
"0,0,4,0,0,0,0,0,0,0,\n");
547 fprintf(outfp,
"0,0,0,0,0,0,0,0,0,0,\n");
548 fprintf(outfp,
"0,0,1,7,\n");
550 fprintf(outfp,
"1,1,1,\n");
552 fprintf(outfp,
"0,1,1,\n");
556 tmp = sqrt(
data->node_val_item[i * tn_component + disp_base] *
557 data->node_val_item[i * tn_component + disp_base] +
558 data->node_val_item[i * tn_component + disp_base + 1] *
559 data->node_val_item[i * tn_component + disp_base + 1] +
560 data->node_val_item[i * tn_component + disp_base + 2] *
561 data->node_val_item[i * tn_component + disp_base + 2]);
563 tmp =
data->node_val_item[i * tn_component + disp_base + k - 1];
566 for (i = 1; i < pesize; i++) {
570 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
571 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
577 for (j = 0; j < tmp_int; j++)
578 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
583 fprintf(outfp,
"-1,0.\n");
586 char *nodal_stress_titles_solid[] = {
587 "Solid X Normal Stress",
"Solid Y Normal Stress",
588 "Solid Z Normal Stress",
"Solid XY Shear Stress",
589 "Solid YZ Shear Stress",
"Solid XZ Shear Stress",
590 "Solid Von Mises Stress"};
591 for (k = 0; k < 7; k++) {
592 fprintf(outfp,
"1,6001%1d,1,\n", k + 1);
593 fprintf(outfp,
"%s\n", nodal_stress_titles_solid[k]);
594 fprintf(outfp,
"1.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,0,0,0,0,0,0,0,0,\n");
597 fprintf(outfp,
"0,0,4,7,\n");
598 fprintf(outfp,
"0,0,1,\n");
601 tmp =
data->node_val_item[i * tn_component + stress_base + k];
604 for (i = 1; i < pesize; i++) {
608 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
609 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
615 for (j = 0; j < tmp_int; j++)
616 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
621 fprintf(outfp,
"-1,0.\n");
624 char *nodal_stress_ids_shell[] = {
625 "1,70011,1,",
"1,70012,1,",
"1,70013,1,",
"1,70014,1,",
"1,70015,1,",
626 "1,70016,1,",
"1,71011,1,",
"1,71012,1,",
"1,71013,1,",
"1,71014,1,",
627 "1,71015,1,",
"1,71016,1,",
"1,70017,1,",
"1,71017,1,"};
628 char *nodal_stress_titles_shell[] = {
629 "Plate Top X Normal Stress",
"Plate Top Y Normal Stress",
630 "Plate Top Z Normal Stress",
"Plate Top XY Shear Stress",
631 "Plate Top YZ Shear Stress",
"Plate Top XZ Shear Stress",
632 "Plate Bot X Normal Stress",
"Plate Bot Y Normal Stress",
633 "Plate Bot Z Normal Stress",
"Plate Bot XY Shear Stress",
634 "Plate Bot YZ Shear Stress",
"Plate Bot XZ Shear Stress",
635 "Plate Top Von Mises Stress",
"Plate Bot Von Mises Stress"};
636 for (k = 0; k < 14; k++) {
637 fprintf(outfp,
"%s\n", nodal_stress_ids_shell[k]);
638 fprintf(outfp,
"%s\n", nodal_stress_titles_shell[k]);
639 fprintf(outfp,
"1.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,0,0,0,0,0,0,0,0,\n");
642 fprintf(outfp,
"0,0,4,7,\n");
643 fprintf(outfp,
"0,0,1,\n");
646 tmp =
data->node_val_item[i * tn_component + stress_base + k];
649 for (i = 1; i < pesize; i++) {
653 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
654 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
662 for (j = 0; j < tmp_int; j++)
663 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
669 fprintf(outfp,
"-1,0.\n");
676 if (
data->ne_component > 0) {
678 for (j = 0; j <
data->ne_component; j++) {
679 name_len = strlen(
data->elem_label[j]);
680 if (strncmp(
"ElementalSTRESS",
data->elem_label[j], name_len) == 0) {
686 for (i = 0; i < stress_comp; i++) stress_base +=
data->ne_dof[i];
692 for (j = 0; j < 7; j++) {
699 data->elem_val_item[tmp_int * te_component + stress_base + j];
709 char *elem_stress_titles_solid[] = {
710 "Solid X Normal Stress",
"Solid Y Normal Stress",
711 "Solid Z Normal Stress",
"Solid XY Shear Stress",
712 "Solid YZ Shear Stress",
"Solid XZ Shear Stress",
713 "Solid Von Mises Stress"};
715 for (k = 0; k < 7; k++) {
716 fprintf(outfp,
"1,7001%1d,1,\n", k + 1);
717 fprintf(outfp,
"%s\n", elem_stress_titles_solid[k]);
718 fprintf(outfp,
"1.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,0,0,0,0,0,0,0,0,\n");
721 fprintf(outfp,
"0,0,4,8,\n");
722 fprintf(outfp,
"0,0,1,\n");
726 tmp =
data->elem_val_item[tmp_int * te_component + stress_base + k];
729 for (i = 1; i < pesize; i++) {
733 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int,
sizeof(
double));
734 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
742 for (j = 0; j < tmp_int; j++)
743 fprintf(outfp,
"%8d,%15.7e,\n", tmp_recv_i[j], tmp_recv_d[j]);
749 fprintf(outfp,
"-1,0.\n");
756 fprintf(outfp,
" -1\n");
757 fprintf(outfp,
" -1\n");
765 static void avs_write_header(FILE *outfp,
int total_n_node,
int total_n_elem,
766 int tn_component,
int te_component,
769 fprintf(outfp,
"%d %d %d %d 0\n", total_n_node, total_n_elem, tn_component,
772 fprintf(outfp,
"1\n");
773 fprintf(outfp,
"data\n");
774 fprintf(outfp,
"step1\n");
775 fprintf(outfp,
"%d %d\n", total_n_node, total_n_elem);
779 static void avs_write_node_coord(FILE *outfp,
int n_node,
int *global_node_ID,
780 double *node,
int flag_global_ID,
786 for (i = 0; i < n_node; i++) {
787 fprintf(outfp,
"%8d %15.7e %15.7e %15.7e\n",
788 flag_global_ID ? global_node_ID[i] : i + 1 + nid_offset,
789 node[i * 3], node[i * 3 + 1], node[i * 3 + 2]);
793 static const int *avs_elem_node_order(
int elem_type) {
794 static const int i232[] = {0, 1, 2, 5, 3, 4};
795 static const int i342[] = {0, 1, 3, 2, 6, 7, 5, 8, 9, 4};
796 static const int i352[] = {0, 2, 1, 3, 5, 4, 7, 6, 8, 10, 9, 11, 12, 14, 13};
797 static const int i362[] = {0, 3, 2, 1, 4, 7, 6, 5, 11, 10,
798 9, 8, 15, 14, 13, 12, 16, 19, 18, 17};
799 static const int idefault[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
800 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
803 if (elem_type == 232 || elem_type == 732)
805 else if (elem_type == 341 || elem_type == 342 || elem_type == 3414)
807 else if (elem_type == 351 || elem_type == 352)
809 else if (elem_type == 361 || elem_type == 362)
817 static void avs_write_elem_conn(FILE *outfp,
int mynode,
int n_elem,
818 int *elem_ID,
int *elem_type,
819 long long *elem_node_index,
int *elem_node_item,
820 int *global_elem_ID,
int *global_node_ID,
821 int *node_ID,
int flag_global_ID,
822 int flag_skip_external,
int flag_oldUCD,
823 int *nid_offsets,
int eid_offset) {
825 int i, j, etype, node_num;
829 HECMW_assert((flag_global_ID && global_elem_ID && global_node_ID) ||
830 (!flag_global_ID && (!nid_offsets || node_ID)));
832 for (i = 0; i < n_elem; i++) {
833 if (flag_skip_external && elem_ID[i * 2 + 1] != mynode)
continue;
837 etype = elem_type[i];
838 if (flag_oldUCD && etype % 2 == 0) {
840 if (etype != 3414 && etype != 3614) {
847 for (j = 0; j < node_num; j++) {
848 int nid = elem_node_item[elem_node_index[i] + j] - 1;
849 if (flag_global_ID) {
850 nn[j] = global_node_ID[nid];
851 }
else if (nid_offsets !=
NULL) {
852 int rank = node_ID[nid * 2 + 1];
853 int nid_in_rank = node_ID[nid * 2];
854 nn[j] = nid_offsets[rank] + nid_in_rank;
860 fprintf(outfp,
"%8d %d %s ",
861 flag_global_ID ? global_elem_ID[i] : eid + eid_offset,
864 ii = avs_elem_node_order(etype);
865 for (j = 0; j < node_num; j++) fprintf(outfp,
"%8d ", nn[ii[j]]);
866 fprintf(outfp,
"\n");
870 static void avs_write_data_header(FILE *outfp,
int tn_component,
871 int te_component,
int flag_oldUCD) {
872 if (flag_oldUCD)
return;
873 fprintf(outfp,
"%8d %8d\n", tn_component, te_component);
876 static void avs_write_node_data_header(FILE *outfp,
int tn_component,
882 fprintf(outfp,
"%8d", tn_component);
883 for (j = 0; j < tn_component; j++) fprintf(outfp,
" 1");
884 fprintf(outfp,
"\n");
885 for (j = 0; j <
data->nn_component; j++) {
886 for (ii = 0; ii <
data->nn_dof[j]; ii++)
887 fprintf(outfp,
"%s_%d, unit_unknown\n",
data->node_label[j], ii + 1);
890 fprintf(outfp,
"%8d",
data->nn_component);
891 for (j = 0; j <
data->nn_component; j++)
892 fprintf(outfp,
" %d",
data->nn_dof[j]);
893 fprintf(outfp,
"\n");
894 for (j = 0; j <
data->nn_component; j++)
895 fprintf(outfp,
"%s, unit_unknown\n",
data->node_label[j]);
899 static void avs_write_node_data(FILE *outfp,
int n_node,
int *global_node_ID,
900 int tn_component,
double *node_val_item,
901 int flag_global_ID,
int nid_offset) {
906 for (i = 0; i < n_node; i++) {
907 fprintf(outfp,
"%8d ",
908 flag_global_ID ? global_node_ID[i] : i + 1 + nid_offset);
909 for (k = 0; k < tn_component; k++)
910 fprintf(outfp,
"%15.7e ", node_val_item[i * tn_component + k]);
911 fprintf(outfp,
"\n");
916 int i, j, n, refine, max_elem;
921 if (refine <= 0)
return 0;
925 for (n = 0; n < refine; n++) {
927 for (i = 0; i < nn; i++) {
928 if (max_elem < mesh->node_ID[2 * i]) {
933 for (i = 0; i < nn; i++) {
951 fprintf (outfp,
"%8d", te_component);
952 for (j = 0; j < te_component; j++)
953 fprintf (outfp,
" 1");
954 fprintf (outfp,
"\n");
955 for (j = 0; j <
data->ne_component; j++) {
956 for (ii = 0; ii <
data->ne_dof[j]; ii++)
957 fprintf (outfp,
"%s_%d, unit_unknown\n",
data->elem_label[j], ii + 1);
960 fprintf (outfp,
"%8d",
data->ne_component);
961 for (j = 0; j <
data->ne_component; j++)
962 fprintf (outfp,
" %d",
data->ne_dof[j]);
963 fprintf (outfp,
"\n");
964 for (j = 0; j <
data->ne_component; j++)
965 fprintf (outfp,
"%s, unit_unknown\n",
data->elem_label[j]);
970 avs_write_elem_data(FILE *outfp,
int mynode,
971 int n_elem,
int *elem_ID,
int *global_elem_ID,
int te_component,
double *elem_val_item,
972 int flag_global_ID,
int eid_offset) {
977 for (i = 0; i < n_elem; i++) {
978 if (elem_ID[i * 2 + 1] != mynode)
981 fprintf (outfp,
"%8d ", flag_global_ID ? global_elem_ID[i] : in+1 + eid_offset);
982 for (k = 0; k < te_component; k++)
983 fprintf (outfp,
"%15.7e ",
984 elem_val_item[i * te_component + k]);
985 fprintf (outfp,
"\n");
992 HECMW_Comm VIS_COMM,
int flag_oldUCD,
int flag_global_ID,
995 int total_n_node, total_n_elem;
996 int tn_component, te_component;
997 int *nid_offsets, *eid_offsets;
1001 int flag_skip_ext = 1;
1018 count_data_components(
data, &tn_component, &te_component);
1022 nid_offsets = (
int *)
HECMW_calloc(pesize + 1,
sizeof(
int));
1024 eid_offsets = (
int *)
HECMW_calloc(pesize + 1,
sizeof(
int));
1028 outfp = fopen(outfile,
"w");
1033 avs_write_header(outfp, total_n_node, total_n_elem, tn_component, te_component,
1056 for (i = 1; i < pesize; i++) {
1057 int tmp_nn_internal;
1061 nid_offsets[i + 1] = nid_offsets[i] + tmp_nn_internal;
1063 if (tmp_nn_internal > 0) {
1064 int *tmp_global_node_ID =
NULL;
1067 if (flag_global_ID) {
1068 tmp_global_node_ID =
1070 if (tmp_global_node_ID ==
NULL)
1077 tmp_node = (
double *)
HECMW_calloc(tmp_nn_internal * 3,
sizeof(
double));
1083 avs_write_node_coord(outfp, tmp_nn_internal, tmp_global_node_ID,
1084 tmp_node, flag_global_ID, nid_offsets[i]);
1086 if (flag_global_ID)
HECMW_free(tmp_global_node_ID);
1095 printf(
"###ERROR: modify element information due to refininer \n");
1116 if (flag_global_ID) {
1133 flag_skip_ext, flag_oldUCD, nid_offsets, 0);
1138 for (j = 1; j < pesize; j++) {
1140 int tmp_ne_internal;
1145 eid_offsets[j + 1] = eid_offsets[j] + tmp_ne_internal;
1147 if (tmp_n_elem > 0) {
1151 long long *tmp_elem_node_index;
1152 int *tmp_elem_node_item;
1153 int *tmp_global_elem_ID;
1154 int *tmp_global_node_ID;
1160 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_n_elem * 2,
sizeof(
int));
1161 tmp_elem_type = (
int *)
HECMW_calloc(tmp_n_elem,
sizeof(
int));
1162 tmp_elem_node_index = (
long long *)
HECMW_calloc(tmp_n_elem + 1,
sizeof(
long long));
1163 if ((tmp_elem_ID ==
NULL) || (tmp_elem_type ==
NULL) ||
1164 (tmp_elem_node_index ==
NULL))
1166 "tmp recv: elem_ID, elem_type, elem_node_index");
1175 tmp_elem_node_item =
1176 (
int *)
HECMW_calloc(tmp_elem_node_index[tmp_n_elem],
sizeof(
int));
1177 if (tmp_elem_node_item ==
NULL)
1180 HECMW_Recv(tmp_elem_node_item, tmp_elem_node_index[tmp_n_elem],
1183 if (flag_global_ID) {
1184 tmp_global_elem_ID = (
int *)
HECMW_calloc(tmp_n_elem,
sizeof(
int));
1185 tmp_global_node_ID = (
int *)
HECMW_calloc(tmp_n_node,
sizeof(
int));
1186 if ((tmp_global_elem_ID ==
NULL) || (tmp_global_node_ID ==
NULL))
1196 tmp_global_elem_ID =
NULL;
1197 tmp_global_node_ID =
NULL;
1199 tmp_node_ID = (
int *)
HECMW_calloc(tmp_n_node * 2,
sizeof(
int));
1206 avs_write_elem_conn(outfp, j, tmp_n_elem, tmp_elem_ID, tmp_elem_type,
1207 tmp_elem_node_index, tmp_elem_node_item,
1208 tmp_global_elem_ID, tmp_global_node_ID, tmp_node_ID,
1209 flag_global_ID, flag_skip_ext, flag_oldUCD,
1210 nid_offsets, eid_offsets[j]);
1217 if (flag_global_ID) {
1229 avs_write_data_header(outfp, tn_component, te_component, flag_oldUCD);
1230 avs_write_node_data_header(outfp, tn_component,
data, flag_Scalar);
1247 tn_component,
data->node_val_item, flag_global_ID, 0);
1249 for (i = 1; i < pesize; i++) {
1250 int tmp_nn_internal;
1255 if (tmp_nn_internal > 0) {
1256 int *tmp_global_node_ID =
NULL;
1257 double *tmp_node_val_item;
1259 if (flag_global_ID) {
1260 tmp_global_node_ID =
1262 if (tmp_global_node_ID ==
NULL)
1270 tmp_nn_internal * tn_component,
sizeof(
double));
1271 if (tmp_node_val_item ==
NULL)
1274 HECMW_Recv(tmp_node_val_item, tmp_nn_internal * tn_component,
1277 avs_write_node_data(outfp, tmp_nn_internal, tmp_global_node_ID,
1278 tn_component, tmp_node_val_item, flag_global_ID,
1281 if (flag_global_ID)
HECMW_free(tmp_global_node_ID);
1289 if (te_component > 0){
1290 avs_write_elem_data_header(outfp, te_component,
data, flag_Scalar);
1296 if (te_component > 0){
1307 if (te_component > 0){
1309 for (i = 1; i < pesize; i++){
1313 if (tmp_n_elem > 0){
1315 double *tmp_elem_val_item;
1316 int *tmp_global_elem_ID =
NULL;
1318 tmp_elem_ID = (
int *)
HECMW_calloc (tmp_n_elem * 2,
sizeof (
int));
1319 if (tmp_elem_ID ==
NULL)
1324 if (flag_global_ID){
1325 tmp_global_elem_ID = (
int *)
HECMW_calloc (tmp_n_elem,
sizeof (
int));
1326 if (tmp_global_elem_ID ==
NULL)
1332 tmp_elem_val_item = (
double *)
HECMW_calloc (tmp_n_elem * te_component,
sizeof (
double));
1333 if (tmp_elem_val_item ==
NULL)
1338 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]);
1361 int flag_oldUCD = 0;
1362 int flag_global_ID = 1;
1363 int flag_Scalar = 0;
1364 avs_output(
mesh,
data, outfile, VIS_COMM, flag_oldUCD, flag_global_ID,
1371 int flag_oldUCD = 1;
1372 int flag_global_ID = 0;
1373 int flag_Scalar = 0;
1374 avs_output(
mesh,
data, outfile, VIS_COMM, flag_oldUCD, flag_global_ID,
1381 int flag_oldUCD = 0;
1382 int flag_global_ID = 1;
1383 int flag_Scalar = 1;
1384 avs_output(
mesh,
data, outfile, VIS_COMM, flag_oldUCD, flag_global_ID,
1394 int ielm, nn[20], tmp_int, tn_component, tmp_int2, te_component, tmp_nn[20];
1395 double *tmp_recv_d, *tmp_send_d;
1396 int *tmp_recv_i, *tmp_elem_ID, *tmp_elem_type, *tmp_elem_global_ID,
1397 *tmp_elem_node_item, *tmp_section_ID,
1398 *tmp_node_global_ID;
1399 long long *tmp_elem_node_index;
1401 int total_n_node, total_n_elem;
1414 char nodedata_label[16];
1415 char nodedata_unit[16];
1417 int tmp_int_conv, *tmp_global_id, count, elem_type_bin;
1453 for (i = 0; i <
data->nn_component; i++) tn_component +=
data->nn_dof[i];
1455 for (i = 0; i <
data->ne_component; i++) te_component +=
data->ne_dof[i];
1457 fp2 = fopen(outfile,
"w");
1458 fprintf(fp2,
"#UCD Binary format\n");
1459 fprintf(fp2,
"#\n");
1460 fprintf(fp2,
"data\n");
1461 fprintf(fp2,
"bin_data.dat\n");
1464 fp = fopen(
"bin_data.dat",
"wb");
1468 fprintf(stderr,
"Start writing binary output for AVS UCD format\n");
1469 snprintf(keyword,
sizeof(keyword),
"AVS UCD");
1471 #ifdef CONVERSE_ORDER
1474 strcpy(
title,
"ucd binary test data");
1476 #ifdef CONVERSE_ORDER
1480 #ifdef CONVERSE_ORDER
1483 tmp_int_conv = total_n_node;
1484 #ifdef CONVERSE_ORDER
1488 fwrite(keyword, 7, 1, fp);
1490 fwrite(
title, 70, 1, fp);
1491 fwrite(&stepno, 4, 1, fp);
1492 fwrite(&timeval, 4, 1, fp);
1493 fwrite(&tmp_int_conv, 4, 1, fp);
1495 #ifdef CONVERSE_ORDER
1499 fwrite(&ztype, 4, 1, fp);
1514 #ifdef CONVERSE_ORDER
1517 fwrite(&tmp_int_conv, 4, 1, fp);
1519 xyz[1] = (
float)
mesh->
node[i * 3 + 1];
1520 xyz[2] = (float)
mesh->
node[i * 3 + 2];
1521 #ifdef CONVERSE_ORDER
1526 fwrite(xyz, 4, 3, fp);
1528 for (i = 1; i < pesize; i++) {
1531 tmp_recv_i = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1532 tmp_recv_d = (
double *)
HECMW_calloc(tmp_int * 3,
sizeof(
double));
1533 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
1539 for (j = 0; j < tmp_int; j++) {
1540 tmp_int_conv = tmp_recv_i[j];
1541 #ifdef CONVERSE_ORDER
1544 fwrite(&tmp_int_conv, 4, 1, fp);
1545 xyz[0] = (float)tmp_recv_d[j * 3];
1546 xyz[1] = (float)tmp_recv_d[j * 3 + 1];
1547 xyz[2] = (float)tmp_recv_d[j * 3 + 2];
1548 #ifdef CONVERSE_ORDER
1553 fwrite(xyz, 4, 3, fp);
1570 tmp_global_id = (
int *)
HECMW_calloc(total_n_elem,
sizeof(
int));
1580 for (j = 1; j < pesize; j++) {
1583 tmp_elem_global_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1584 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_int * 2,
sizeof(
int));
1585 if ((tmp_elem_global_ID ==
NULL) || (tmp_elem_ID ==
NULL))
1592 for (i = 0; i < tmp_int; i++) {
1593 if (tmp_elem_ID[i * 2 + 1] == j) {
1594 tmp_global_id[count] = tmp_elem_global_ID[i];
1623 tmp_int_conv = total_n_elem;
1624 #ifdef CONVERSE_ORDER
1627 fwrite(&tmp_int_conv, 4, 1, fp);
1628 for (i = 0; i < total_n_elem; i++) {
1629 tmp_int_conv = tmp_global_id[i];
1630 #ifdef CONVERSE_ORDER
1633 fwrite(&tmp_int_conv, 4, 1, fp);
1635 for (i = 0; i < total_n_elem; i++) {
1637 #ifdef CONVERSE_ORDER
1640 fwrite(&tmp_int_conv, 4, 1, fp);
1642 icell_type[0] = (char)elem_type_bin;
1643 for (i = 0; i < total_n_elem; i++) {
1644 fwrite(&icell_type[0], 1, 1, fp);
1650 for (j = 0; j < node_num; j++)
1666 for (m = 0; m < node_num; m++) nn[m] = tmp_nn[m];
1670 for (m = 0; m < node_num; m++) {
1671 tmp_int_conv = nn[m];
1672 #ifdef CONVERSE_ORDER
1675 fwrite(&tmp_int_conv, 4, 1, fp);
1679 for (j = 1; j < pesize; j++) {
1683 tmp_elem_global_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1684 tmp_elem_ID = (
int *)
HECMW_calloc(tmp_int * 2,
sizeof(
int));
1685 tmp_elem_type = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1686 tmp_section_ID = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1687 tmp_elem_node_index = (
long long *)
HECMW_calloc(tmp_int + 1,
sizeof(
long long));
1688 if ((tmp_elem_global_ID ==
NULL) || (tmp_elem_ID ==
NULL) ||
1689 (tmp_elem_type ==
NULL) || (tmp_section_ID ==
NULL))
1697 tmp_elem_node_item =
1698 (
int *)
HECMW_calloc(tmp_elem_node_index[tmp_int],
sizeof(
int));
1699 tmp_node_global_ID = (
int *)
HECMW_calloc(tmp_int2,
sizeof(
int));
1705 for (i = 0; i < tmp_int; i++) {
1706 if (tmp_elem_ID[i * 2 + 1] == j) {
1707 ielm = tmp_elem_global_ID[i];
1708 for (m = 0; m < node_num; m++)
1709 tmp_nn[m] = tmp_node_global_ID
1710 [tmp_elem_node_item[tmp_elem_node_index[i] + m] - 1];
1723 for (m = 0; m < node_num; m++) nn[m] = tmp_nn[m];
1726 for (m = 0; m < node_num; m++) {
1727 tmp_int_conv = nn[m];
1728 #ifdef CONVERSE_ORDER
1731 fwrite(&tmp_int_conv, 4, 1, fp);
1748 tmp_int_conv = tn_component;
1749 #ifdef CONVERSE_ORDER
1752 fwrite(&tmp_int_conv, 4, 1, fp);
1754 #ifdef CONVERSE_ORDER
1757 fwrite(&tmp_int_conv, 4, 1, fp);
1758 for (j = 0; j <
data->nn_component; j++) {
1759 for (ii = 0; ii <
data->nn_dof[j]; ii++) {
1760 snprintf(nodedata_label,
sizeof(nodedata_label),
"%s%d\n",
data->node_label[j], ii + 1);
1761 snprintf(nodedata_unit,
sizeof(nodedata_unit),
"%s",
"m/s");
1763 #ifdef CONVERSE_ORDER
1767 #ifdef CONVERSE_ORDER
1770 null_value = -999.999;
1771 #ifdef CONVERSE_ORDER
1774 fwrite(nodedata_label, 16, 1, fp);
1775 fwrite(nodedata_unit, 16, 1, fp);
1776 fwrite(&num_nodeveclen, 4, 1, fp);
1777 fwrite(&null_flag, 4, 1, fp);
1778 fwrite(&null_value, 4, 1, fp);
1790 tmp_send_d[i] =
data->node_val_item[i];
1801 for (k = 0; k < tn_component; k++) {
1802 tmp_d_conv = (float)
data->node_val_item[i * tn_component + k];
1803 #ifdef CONVERSE_ORDER
1806 fwrite(&tmp_d_conv, 4, 1, fp);
1809 for (i = 1; i < pesize; i++) {
1812 tmp_recv_i = (
int *)
HECMW_calloc(tmp_int,
sizeof(
int));
1814 (
double *)
HECMW_calloc(tmp_int * tn_component,
sizeof(
double));
1815 if ((tmp_recv_i ==
NULL) || (tmp_recv_d ==
NULL))
1821 for (j = 0; j < tmp_int; j++) {
1822 for (k = 0; k < tn_component; k++) {
1823 tmp_d_conv = (float)tmp_recv_d[j * tn_component + k];
1824 #ifdef CONVERSE_ORDER
1827 fwrite(&tmp_d_conv, 4, 1, fp);
1835 fwrite(&num_celldata, 4, 1, fp);
1837 if (mynode == 0) fclose(fp);
1846 int total_n_node, total_n_elem;
1847 int tn_component, te_component;
1849 int flag_oldUCD = 1;
1850 int flag_global_ID = 0;
1851 int flag_Scalar = 0;
1852 int flag_skip_ext = 0;
1861 count_data_components(
data, &tn_component, &te_component);
1864 outfp = fopen(outfile,
"w");
1869 avs_write_header(outfp, total_n_node, total_n_elem, tn_component, 0,
1881 flag_skip_ext, flag_oldUCD,
NULL, 0);
1884 avs_write_data_header(outfp, tn_component, 0, flag_oldUCD);
1887 avs_write_node_data_header(outfp, tn_component,
data, flag_Scalar);
1891 data->node_val_item, flag_global_ID, 0);
int HECMW_Comm_rank(HECMW_Comm comm, int *rank)
int HECMW_Comm_size(HECMW_Comm comm, int *size)
int HECMW_Allreduce(void *sendbuf, void *recvbuf, int count, HECMW_Datatype datatype, HECMW_Op op, HECMW_Comm comm)
int HECMW_Send(void *buffer, int count, HECMW_Datatype datatype, int dest, int tag, HECMW_Comm comm)
int HECMW_Recv(void *buffer, int count, HECMW_Datatype datatype, int source, int tag, HECMW_Comm comm, HECMW_Status *status)
struct hecmwST_local_mesh * mesh
int HECMW_get_max_node(int etype)
int HECMW_is_etype_33struct(int etype)
char * HECMW_get_ucd_label(int etype)
int HECMW_get_etype_class(int etype)
int modify_element_information(const struct hecmwST_local_mesh *mesh)
void HECMW_fstr_output_femap(struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, char *outfile, HECMW_Comm VIS_COMM)
void HECMW_separate_avs_output(struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, char *outfile)
void HECMW_microavs_output(struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, char *outfile, HECMW_Comm VIS_COMM)
void HECMW_bin_avs_output(struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, char *outfile, HECMW_Comm VIS_COMM)
void HECMW_avs_output(struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, char *outfile, HECMW_Comm VIS_COMM)
void HECMW_reorder_avs_output(struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, char *outfile, HECMW_Comm VIS_COMM)
#define HECMW_calloc(nmemb, size)
#define HECMW_assert(cond)
void put_neutral_middle(FILE *outfp)
void put_neutral_402(FILE *outfp, struct hecmwST_local_mesh *mesh)
void put_neutral_head(FILE *outfp)
void put_neutral_601(FILE *outfp, struct hecmwST_local_mesh *mesh)
void HECMW_vis_print_exit(char *var)
void HECMW_vis_memory_exit(char *var)
void version(char *arg)
show version and revision of FrontISTR
struct hecmwST_section * section
long long * elem_node_index