FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
output_ucd_c.c
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2019 FrontISTR Commons
3  * This software is released under the MIT License, see LICENSE.txt
4  *****************************************************************************/
5 
6 #include "hecmw_repart.h"
7 
10  int i, j, k;
11  FILE *fp;
12  int id_elem;
13  int flag_hit;
14  int tmp_count, n_elem_type;
15  int tn_component, ne_internal, tmp_int;
16 
17  if ((fp = fopen(outfile, "w")) == NULL) {
18  fprintf(stderr, "output file error: %s\n", outfile);
19  exit(1);
20  }
21 
22  tn_component = 0;
23  for (i = 0; i < new_data->nn_component; i++)
24  tn_component += new_data->nn_dof[i];
25  ne_internal = 0;
26  for (i = 0; i < new_mesh->ne_internal; i++) {
28  ne_internal++;
29  }
30 
31  fprintf(fp, "%d %d %d %d %d\n", new_mesh->n_node, ne_internal, tn_component,
32  0, 0);
33  for (i = 0; i < new_mesh->n_node; i++)
34  fprintf(fp, "%d %lf %lf %lf\n", i + 1, new_mesh->node[i * 3],
35  new_mesh->node[i * 3 + 1], new_mesh->node[i * 3 + 2]);
36  tmp_count = 0;
37  for (i = 0; i < new_mesh->ne_internal; i++) {
38  if (new_mesh->adapt_type[new_mesh->elem_internal_list[i] - 1] == 0) {
39  tmp_count++;
40  fprintf(fp, "%d 1 ", tmp_count);
41  tmp_int = new_mesh->elem_internal_list[i] - 1;
42  if ((new_mesh->elem_node_index[tmp_int + 1] -
43  new_mesh->elem_node_index[tmp_int]) == 4)
44  fprintf(fp, " tet ");
45  else
46  fprintf(fp, " prism ");
47  {
48  long long jj;
49  for (jj = new_mesh->elem_node_index[tmp_int];
50  jj < new_mesh->elem_node_index[tmp_int + 1]; jj++)
51  fprintf(fp, "%d ", new_mesh->elem_node_item[jj]);
52  }
53  fprintf(fp, "\n");
54  }
55  }
56  fprintf(fp, "%d ", new_data->nn_component);
57  for (i = 0; i < new_data->nn_component; i++)
58  fprintf(fp, "%d ", new_data->nn_dof[i]);
59  fprintf(fp, "\n");
60  for (i = 0; i < new_data->nn_component; i++)
61  fprintf(fp, "%s,\n", new_data->node_label[i]);
62  for (i = 0; i < new_mesh->n_node; i++) {
63  fprintf(fp, "%d ", i + 1);
64  for (j = 0; j < tn_component; j++)
65  fprintf(fp, "%lf ", new_data->node_val_item[i * tn_component + j]);
66  fprintf(fp, "\n");
67  }
68  fclose(fp);
69  return;
70 }
71 
72 /*
73 void write_one_mesh_display(char *outfile, struct hecmwST_local_mesh *new_mesh,
74  struct hecmwST_result_data *new_data,
75  MPI_Comm VIS_COMM, int mynode, int pesize) {
76  int i, j, k;
77  FILE *fp;
78  int id_elem;
79  int flag_hit;
80  int tmp_count, n_elem_type;
81  int tn_component, ne_internal, tmp_int;
82  int n_node, n_elem;
83  int nvtxs, *new_vtxdist, tmp_sum, tmp_nvtxs, *tmp_data;
84 
85  if (mynode == 0) {
86  if ((fp = fopen(outfile, "w")) == NULL) {
87  fprintf(stderr, "output file error: %s\n", outfile);
88  exit(1);
89  }
90  new_vtxdist = (int *)calloc(pesize + 1, sizeof(int));
91  nvtxs = new_mesh->nn_internal;
92  if (mynode == 0) {
93  new_vtxdist[0] = 0;
94  new_vtxdist[1] = nvtxs;
95  tmp_sum = nvtxs;
96  for (i = 1; i < pesize; i++) {
97  MPI_Recv(&tmp_nvtxs, 1, MPI_INT, i, MPI_ANY_TAG, VIS_COMM, &stat);
98  tmp_sum += tmp_nvtxs;
99  new_vtxdist[i + 1] = tmp_sum;
100  }
101  for (i = 1; i < pesize; i++)
102  MPI_Send(new_vtxdist, pesize + 1, MPI_INT, i, 0, VIS_COMM);
103  } else {
104  MPI_Send(&nvtxs, 1, MPI_INT, 0, 0, VIS_COMM);
105  MPI_Recv(new_vtxdist, pesize + 1, MPI_INT, 0, MPI_ANY_TAG, VIS_COMM,
106  &stat);
107  }
108 
109  tn_component = 0;
110  for (i = 0; i < new_data->nn_component; i++)
111  tn_component += new_data->nn_dof[i];
112  }
113  ne_internal = 0;
114  for (i = 0; i < new_mesh->ne_internal; i++) {
115  if (new_mesh->adapt_type[new_mesh->elem_internal_list[i] - 1] == 0)
116  ne_internal++;
117  }
118  if (pesize > 1)
119  MPI_Allreduce(&new_mesh->nn_internal, &n_node, 1, MPI_INT, MPI_SUM,
120  VIS_COMM);
121  else
122  n_node = mesh->nn_internal;
123  if (pesize > 1)
124  MPI_Allreduce(&ne_internal, &n_elem, 1, MPI_INT, MPI_SUM, VIS_COMM);
125  else
126  n_elem = ne_internal;
127 
128  if (mynode == 0) {
129  fprintf(fp, "%d %d %d %d %d\n", n_node, n_elem, tn_component, 0, 0);
130  for (i = 0; i < new_mesh->nn_internal; i++)
131  fprintf(fp, "%d %lf %lf %lf\n", i + 1, new_mesh->node[i * 3],
132  new_mesh->node[i * 3 + 1], new_mesh->node[i * 3 + 2]);
133  for (i = 1; i < pesize; i++) {
134  tmp_int = new_vtxdist[i] - new_vtxdist[i - 1];
135  tmp_data = (double *)calloc(tmp_int * 3, sizeof(double));
136  if (tmp_data == NULL) memory_exit("tmp_data");
137  MPI_Recv(tmp_data, tmp_int * 3, MPI_DOUBLE, i, MPI_ANY_TAG, VIS_COMM,
138  &stat);
139  for (j = 0; j < tmp_int; j++)
140  fprintf(fp, "%d %lf %lf %lf\n", new_vtxdist[i - 1] + j + 1,
141  tmp_data[j * 3], tmp_data[j * 3 + 1], tmp_data[j * 3 + 2]);
142  free(tmp_data);
143  }
144  } else if (mynode != 0) {
145  tmp_data = (double *)calloc(new_mesh->nn_internal * 3, sizeof(double));
146  if (tmp_data == NULL) memory_exit("tmp_data");
147  for (j = 0; j < new_mesh->nn_internal; j++) {
148  for (k = 0; k < 3; k++)
149  tmp_data[j*3+k]=new_mesh->node[j*3+k]);
150  }
151  MPI_Send(tmp_data, new_mesh->nn_internal * 3, MPI_DOUBLE, 0, 0, VIS_COMM);
152  free(tmp_data);
153  }
154 
155  tmp_count = 0;
156  for (i = 0; i < new_mesh->ne_internal; i++) {
157  if (new_mesh->adapt_type[new_mesh->elem_internal_list[i] - 1] == 0) {
158  tmp_count++;
159  fprintf(fp, "%d 1 ", tmp_count);
160  tmp_int = new_mesh->elem_internal_list[i] - 1;
161  if ((new_mesh->elem_node_index[tmp_int + 1] -
162  new_mesh->elem_node_index[tmp_int]) == 4)
163  fprintf(fp, " tet ");
164  else
165  fprintf(fp, " prism ");
166  {
167  long long jj;
168  for (jj = new_mesh->elem_node_index[tmp_int];
169  jj < new_mesh->elem_node_index[tmp_int + 1]; jj++)
170  fprintf(fp, "%d ", new_mesh->elem_node_item[jj]);
171  }
172  fprintf(fp, "\n");
173  }
174  }
175  fprintf(fp, "%d ", new_data->nn_component);
176  for (i = 0; i < new_data->nn_component; i++)
177  fprintf(fp, "%d ", new_data->nn_dof[i]);
178  fprintf(fp, "\n");
179  for (i = 0; i < new_data->nn_component; i++)
180  fprintf(fp, "%s,\n", new_data->node_label[i]);
181  for (i = 0; i < new_mesh->n_node; i++) {
182  fprintf(fp, "%d ", i + 1);
183  for (j = 0; j < tn_component; j++)
184  fprintf(fp, "%lf ", new_data->node_val_item[i * tn_component + j]);
185  fprintf(fp, "\n");
186  }
187  fclose(fp);
188  return;
189 }
190 */
struct hecmwST_result_data * new_data
Definition: hecmw_repart.h:76
struct hecmwST_local_mesh * new_mesh
Definition: hecmw_repart.h:72
#define NULL
void write_dist_mesh_display(char *outfile, struct hecmwST_local_mesh *new_mesh, struct hecmwST_result_data *new_data)
Definition: output_ucd_c.c:8
long long * elem_node_index
Definition: hecmw_struct.h:195
double * node_val_item
Definition: hecmw_result.h:22