FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
fstr_rmerge_util.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 
10 #include "fstr_rmerge_util.h"
11 
12 #include <stdio.h>
13 #include <string.h>
14 #include <stdlib.h>
15 
16 #include "hecmw_util.h"
17 #include "hecmw_dist_free.h"
18 #include "hecmw_io_dist.h"
19 #include "hecmw_io_get_mesh.h"
20 #include "hecmw_etype.h"
21 
22 static FILE* Log_FP;
23 
27 void fstr_set_log_fp(FILE *log_fp) {
28  Log_FP = log_fp;
29 }
30 
34 void fstr_out_log(const char* fmt, ...) {
35  va_list arg;
36  va_start(arg, fmt);
37  vfprintf(Log_FP, fmt, arg);
38  va_end(arg);
39 }
40 
45 static int get_dist_fname(char* name_ID, char* fheader, int* fg_single,
46  int* refine, int nrank, int irank) {
47  struct hecmw_ctrl_meshfiles* files;
48 
49  files = HECMW_ctrl_get_meshfiles_header_sub(name_ID, nrank, irank);
50  if (!files) return -1;
51 
52  if (files->n_mesh == 1) {
53  strcpy(fheader, files->meshfiles[0].filename);
54  if (files->meshfiles[0].type == HECMW_CTRL_FTYPE_HECMW_DIST) {
55  *fg_single = 0;
56  } else {
57  *fg_single = 1;
58  }
59  *refine = files->meshfiles[0].refine;
60  fstr_out_log("refine number is %d\n", *refine);
61  } else {
63  return -1;
64  }
65 
67  return 0;
68 }
69 
70 static int get_area_n(char* fheader) {
71  FILE* fp;
72  char buff[HECMW_FILENAME_LEN + 1];
73  int area = 0;
74 
75  while (1) {
76  sprintf(buff, "%s.%d", fheader, area);
77  fstr_out_log("try open : %s ... ", buff);
78  fp = fopen(buff, "r");
79  if (!fp) {
80  fstr_out_log("fail\n");
81  fstr_out_log("area number is %d\n", area);
82  return area;
83  } else {
84  fstr_out_log("success\n");
85  fclose(fp);
86  }
87  area++;
88  }
89 }
90 
96  int nrank,
97  int* area_number,
98  int* refine) {
99  int i;
100  int area_n;
101  int fg_single;
102  char fheader[HECMW_HEADER_LEN + 1];
103  char fname[HECMW_FILENAME_LEN + 1];
104  struct hecmwST_local_mesh** mesh;
105 
106  if (get_dist_fname(name_ID, fheader, &fg_single, refine, nrank, 0)) return NULL;
107 
108  if (fg_single) {
109  fstr_out_log("mesh file type is NOT HECMW_DIST.\n");
110  area_n = 1;
111  fstr_out_log("area number is %d\n", area_n);
112  mesh = HECMW_malloc(area_n * sizeof(struct hecmwST_local_mesh*));
113  mesh[0] = HECMW_get_mesh(name_ID);
114  if (!mesh[0]) return NULL;
115  } else {
116  fstr_out_log("mesh file type is HECMW_DIST.\n");
117  if (nrank == 0) {
118  area_n = get_area_n(fheader);
119  } else {
120  area_n = nrank;
121  }
122  if (area_n == 0) return NULL;
123  mesh = HECMW_malloc(area_n * sizeof(struct hecmwST_local_mesh*));
124  for (i = 0; i < area_n; i++) {
125  if (nrank == 0) {
126  sprintf(fname, "%s.%d", fheader, i);
127  } else {
128  get_dist_fname(name_ID, fheader, &fg_single, refine, nrank, i);
129  sprintf(fname, "%s.%d", fheader, i);
130  }
131  fstr_out_log("loading dist mesh from %s\n", fname);
132  mesh[i] = HECMW_get_dist_mesh(fname);
133  if (!mesh[i]) return NULL;
134  }
135  }
136  *area_number = area_n;
137 
138  return mesh;
139 }
140 
145 void fstr_free_mesh(struct hecmwST_local_mesh** mesh, int area_n) {
146  int i;
147 
148  if (!mesh) return;
149 
150  for (i = 0; i < area_n; i++) {
151  HECMW_dist_free(mesh[i]);
152  }
153  HECMW_free(mesh);
154  return;
155 }
156 
161 int fstr_get_step_n(char* name_ID, int nrank) {
162  FILE* fp;
163  int step, fg_text;
164  char* fheader;
165  char fname[HECMW_FILENAME_LEN + 1];
166 
167  if (nrank == 0) {
168  if ((fheader = HECMW_ctrl_get_result_fileheader(name_ID, 1, &fg_text)) ==
169  NULL)
170  return 0;
171  } else {
172  if ((fheader = HECMW_ctrl_get_result_fileheader_sub(name_ID, 1, nrank, 0,
173  &fg_text)) == NULL)
174  return 0;
175  }
176 
177  step = 1;
178  while (1) {
179  sprintf(fname, "%s.0.%d", fheader, step);
180  fstr_out_log("try open : %s ... ", fname);
181  fp = fopen(fname, "r");
182  if (!fp) {
183  fstr_out_log("fail\n");
184  fstr_out_log("step number is %d\n", step - 1);
185  return step - 1;
186  } else {
187  fstr_out_log("success\n");
188  fclose(fp);
189  }
190  step++;
191  }
192 }
193 
198 fstr_res_info** fstr_get_all_result(char* name_ID, int step, int area_n,
199  int refine, int nrank) {
200  char* fheader;
201  char fname[HECMW_FILENAME_LEN + 1];
202  fstr_res_info** res;
203  struct hecmwST_result_data* data;
204  int i, j, k, count, num, nnode, nelem, flag, fg_text;
205  int *node_gid, *elem_gid;
206  int refine_nnode = 0;
207 
208  if (nrank == 0) {
209  if ((fheader = HECMW_ctrl_get_result_fileheader(name_ID, step,
210  &fg_text)) == NULL)
211  return 0;
212  }
213 
214  res = HECMW_malloc(area_n * sizeof(fstr_res_info*));
215  if (!res) return NULL;
216 
217  for (i = 0; i < area_n; i++) {
218  res[i] = HECMW_malloc(sizeof(fstr_res_info));
219  if (!res[i]) return NULL;
220 
221  if (nrank != 0) {
223  name_ID, step, nrank, i, &fg_text)) == NULL)
224  return 0;
225  }
226  sprintf(fname, "%s.%d.%d", fheader, i, step);
228  if (!data) return NULL;
229  nnode = HECMW_result_get_nnode();
230  node_gid = HECMW_malloc(nnode * sizeof(int));
231  if (!node_gid) return NULL;
232  HECMW_result_get_nodeID(node_gid);
233  nelem = HECMW_result_get_nelem();
234  elem_gid = HECMW_malloc(nelem * sizeof(int));
235  if (!elem_gid) return NULL;
236  if (data->ne_component) HECMW_result_get_elemID(elem_gid);
237 
238  if (refine) {
239  res[i]->result = HECMW_malloc(sizeof(struct hecmwST_result_data));
240  if (!res[i]->result) return NULL;
241 
242  res[i]->result->ng_component = data->ng_component;
243  res[i]->result->ng_dof = HECMW_malloc(data->ng_component * sizeof(int));
244  if (!res[i]->result->ng_dof) return NULL;
245  res[i]->result->global_label =
246  HECMW_malloc(data->ng_component * sizeof(char*));
247  if (!res[i]->result->global_label) return NULL;
248  for (j = 0; j < data->ng_component; j++) {
249  res[i]->result->ng_dof[j] = data->ng_dof[j];
250  res[i]->result->global_label[j] = HECMW_strdup(data->global_label[j]);
251  if (!res[i]->result->global_label[j]) return NULL;
252  }
253 
254  res[i]->result->nn_component = data->nn_component;
255  res[i]->result->nn_dof = HECMW_malloc(data->nn_component * sizeof(int));
256  if (!res[i]->result->nn_dof) return NULL;
257  res[i]->result->node_label =
258  HECMW_malloc(data->nn_component * sizeof(char*));
259  if (!res[i]->result->node_label) return NULL;
260  num = 0;
261  for (j = 0; j < data->nn_component; j++) {
262  res[i]->result->nn_dof[j] = data->nn_dof[j];
263  res[i]->result->node_label[j] = HECMW_strdup(data->node_label[j]);
264  if (!res[i]->result->node_label[j]) return NULL;
265  num += data->nn_dof[j];
266  }
267 
268  count = 1;
269  flag = 0;
270  for (j = 1; j < nnode; j++) {
271  if (flag == refine) break;
272  count++;
273  if (node_gid[j] > 0 && node_gid[j - 1] < 0) flag++;
274  if (node_gid[j] < 0 && node_gid[j] > node_gid[j - 1]) flag++;
275  }
276  count--;
277  fstr_out_log("\narea:%d -- refined_nn_internal:%d", i, count);
278  refine_nnode += count;
279 
280  count = 0;
281  for (j = 0; j < nnode; j++)
282  if (node_gid[j] > 0) count++;
283  res[i]->nnode_gid = count;
284  res[i]->result->node_val_item =
285  HECMW_malloc(num * count * sizeof(double));
286  if (!res[i]->result->node_val_item) return NULL;
287  count = 0;
288  for (j = 0; j < nnode; j++) {
289  if (node_gid[j] > 0) {
290  for (k = 0; k < num; k++) {
291  res[i]->result->node_val_item[count++] =
292  data->node_val_item[num * j + k];
293  }
294  }
295  }
296 
297  res[i]->result->ne_component = data->ne_component;
298  res[i]->result->ne_dof = HECMW_malloc(data->ne_component * sizeof(int));
299  if (!res[i]->result->ne_dof) return NULL;
300  res[i]->result->elem_label =
301  HECMW_malloc(data->ne_component * sizeof(char*));
302  if (!res[i]->result->elem_label) return NULL;
303  num = 0;
304  for (j = 0; j < data->ne_component; j++) {
305  res[i]->result->ne_dof[j] = data->ne_dof[j];
306  res[i]->result->elem_label[j] = HECMW_strdup(data->elem_label[j]);
307  if (!res[i]->result->elem_label[j]) return NULL;
308  num += data->ne_dof[j];
309  }
310 
311  count = 0;
312  for (j = 0; j < nelem; j++)
313  if (elem_gid[j] > 0) count++;
314  fstr_out_log("\narea:%d -- ne_original from result:%d", i, count);
315  res[i]->nelem_gid = count;
316  res[i]->result->elem_val_item =
317  HECMW_malloc(num * count * sizeof(double));
318  if (!res[i]->result->elem_val_item) return NULL;
319  count = 0;
320  for (j = 0; j < nelem; j++) {
321  if (elem_gid[j] > 0) {
322  for (k = 0; k < num; k++) {
323  res[i]->result->elem_val_item[count++] =
324  data->elem_val_item[num * j + k];
325  }
326  }
327  }
328 
332 
333  res[i]->node_gid = HECMW_malloc(res[i]->nnode_gid * sizeof(int));
334  if (!res[i]->node_gid) return NULL;
335  count = 0;
336  for (j = 0; j < nnode; j++) {
337  if (node_gid[j] > 0) res[i]->node_gid[count++] = node_gid[j];
338  }
339  free(node_gid);
340 
341  res[i]->elem_gid = HECMW_malloc(res[i]->nelem_gid * sizeof(int));
342  if (!res[i]->elem_gid) return NULL;
343  count = 0;
344  for (j = 0; j < nelem; j++) {
345  if (elem_gid[j] > 0) res[i]->elem_gid[count++] = elem_gid[j];
346  }
347  free(elem_gid);
348  } else {
349  res[i]->result = data;
350  res[i]->nnode_gid = nnode;
351  res[i]->node_gid = node_gid;
352  res[i]->nelem_gid = nelem;
353  res[i]->elem_gid = elem_gid;
354  }
355  }
356 
357  if (refine) fstr_out_log("\ntotal refined_nn_internal:%d\n", refine_nnode);
358 
359  return res;
360 }
361 
367  int refine) {
368  int i, j, k, l_id, area;
369  int gitem, nitem, eitem, count, irec;
370  struct hecmwST_result_data* data;
371 
372  gitem = 0;
373  for (i = 0; i < res[0]->result->ng_component; i++)
374  gitem += res[0]->result->ng_dof[i];
375  nitem = 0;
376  for (i = 0; i < res[0]->result->nn_component; i++)
377  nitem += res[0]->result->nn_dof[i];
378  eitem = 0;
379  for (i = 0; i < res[0]->result->ne_component; i++)
380  eitem += res[0]->result->ne_dof[i];
381 
382  data = HECMW_malloc(sizeof(struct hecmwST_result_data));
383  if (!data) return NULL;
384  data->ng_dof = HECMW_malloc(res[0]->result->ng_component * sizeof(int));
385  if (!data->ng_dof) return NULL;
386  data->global_label = HECMW_malloc(res[0]->result->ng_component * sizeof(char*));
387  if (!data->global_label) return NULL;
388  data->global_val_item = HECMW_malloc(gitem * sizeof(double));
389  if (!data->global_val_item) return NULL;
390  data->nn_dof = HECMW_malloc(res[0]->result->nn_component * sizeof(int));
391  if (!data->nn_dof) return NULL;
392  data->node_label = HECMW_malloc(res[0]->result->nn_component * sizeof(char*));
393  if (!data->node_label) return NULL;
394  data->node_val_item = HECMW_malloc(nitem * glt->node_n * sizeof(double));
395  if (!data->node_val_item) return NULL;
396  data->ne_dof = HECMW_malloc(res[0]->result->ne_component * sizeof(int));
397  if (!data->ne_dof) return NULL;
398  data->elem_label = HECMW_malloc(res[0]->result->ne_component * sizeof(char*));
399  if (!data->elem_label) return NULL;
400  data->elem_val_item = HECMW_malloc(eitem * glt->elem_n * sizeof(double));
401  if (!data->elem_val_item) return NULL;
402 
403  data->ng_component = res[0]->result->ng_component;
404  for (i = 0; i < res[0]->result->ng_component; i++) {
405  data->ng_dof[i] = res[0]->result->ng_dof[i];
406  data->global_label[i] = HECMW_strdup(res[0]->result->global_label[i]);
407  if (!data->global_label[i]) return NULL;
408  }
409  for (i = 0; i < gitem; i++) {
410  data->global_val_item[i] = res[0]->result->global_val_item[i];
411  }
412  count = 0;
413  for (i = 0; i < glt->node_n; i++) {
414  l_id = glt->nrec[i].local;
415  area = glt->nrec[i].area;
416  irec = nitem * l_id;
417  for (j = 0; j < res[0]->result->nn_component; j++) {
418  for (k = 0; k < res[0]->result->nn_dof[j]; k++) {
419  data->node_val_item[count++] = res[area]->result->node_val_item[irec++];
420  }
421  }
422  }
423  data->nn_component = res[0]->result->nn_component;
424  for (i = 0; i < res[0]->result->nn_component; i++) {
425  data->nn_dof[i] = res[0]->result->nn_dof[i];
426  data->node_label[i] = HECMW_strdup(res[0]->result->node_label[i]);
427  if (!data->node_label[i]) return NULL;
428  }
429 
430  count = 0;
431  for (i = 0; i < glt->elem_n; i++) {
432  l_id = glt->erec[i].local;
433  area = glt->erec[i].area;
434  irec = eitem * l_id;
435  for (j = 0; j < res[0]->result->ne_component; j++) {
436  for (k = 0; k < res[0]->result->ne_dof[j]; k++) {
437  if (refine) {
438  data->elem_val_item[count++] = 0.0;
439  } else {
440  data->elem_val_item[count++] =
441  res[area]->result->elem_val_item[irec++];
442  }
443  }
444  }
445  }
446  data->ne_component = res[0]->result->ne_component;
447  for (i = 0; i < res[0]->result->ne_component; i++) {
448  data->ne_dof[i] = res[0]->result->ne_dof[i];
449  data->elem_label[i] = HECMW_strdup(res[0]->result->elem_label[i]);
450  if (!data->elem_label[i]) return NULL;
451  }
452 
453  return data;
454 }
455 
460 void fstr_free_result(fstr_res_info** res, int area_n) {
461  int i;
462 
463  if (!res) return;
464 
465  for (i = 0; i < area_n; i++) {
466  HECMW_result_free(res[i]->result);
467  HECMW_free(res[i]->node_gid);
468  HECMW_free(res[i]->elem_gid);
469  HECMW_free(res[i]);
470  }
471  HECMW_free(res);
472  return;
473 }
474 
479 static int cmp_global_glt(const fstr_gl_rec* g1, const fstr_gl_rec* g2) {
480  return (g1->global - g2->global);
481 }
482 
483 typedef int (*cmp_func)(const void*, const void*);
484 
485 fstr_glt* fstr_create_glt(struct hecmwST_local_mesh** mesh, int area_n) {
486  int i, j, k, eid, count;
487  int all_n, all_e;
488  int area_e;
489  fstr_gl_rec* nrec;
490  fstr_gl_rec* erec;
491  fstr_glt* glt;
492  int* area_etype_list;
493 
494  all_n = 0;
495  for (i = 0; i < area_n; i++) {
496  fstr_out_log("area:%d -- nn_internal:%d\n", i, mesh[i]->nn_internal);
497  all_n += mesh[i]->nn_internal;
498  }
499  fstr_out_log("total nn_internal:%d\n", all_n);
500 
501  nrec = HECMW_malloc(sizeof(fstr_gl_rec) * all_n);
502  if (!nrec) return NULL;
503 
504  count = 0;
505  for (i = 0; i < area_n; i++) {
506  for (j = 0; j < mesh[i]->nn_internal; j++) {
507  nrec[count].global = mesh[i]->global_node_ID[j];
508  nrec[count].local = j;
509  nrec[count].area = i;
510  count++;
511  }
512  }
513 
514  qsort(nrec, all_n, sizeof(fstr_gl_rec), (cmp_func)cmp_global_glt);
515 
516  all_e = 0;
517  for (i = 0; i < area_n; i++) {
518  area_e = 0;
519  area_etype_list = HECMW_malloc(sizeof(int) * mesh[i]->n_elem);
520  for (j = 0; j < mesh[i]->n_elem_type; j++) {
521  for (k = mesh[i]->elem_type_index[j]; k < mesh[i]->elem_type_index[j+1]; k++) {
522  area_etype_list[k] = mesh[i]->elem_type_item[j];
523  }
524  }
525 
526  for (j = 0; j < mesh[i]->ne_internal; j++) {
527  eid = mesh[i]->elem_internal_list[j] - 1;
528  if ( HECMW_is_etype_patch(area_etype_list[eid]) ) continue;
529  if ( HECMW_is_etype_link(area_etype_list[eid]) ) continue;
530  area_e++;
531  }
532 
533  HECMW_free(area_etype_list);
534  all_e += area_e;
535  fstr_out_log("area:%d -- ne_internal:%d\n", i, area_e);
536  }
537  fstr_out_log("total ne_internal:%d\n", all_e);
538 
539  erec = HECMW_malloc(sizeof(fstr_gl_rec) * all_e);
540  if (!erec) return NULL;
541 
542  count = 0;
543  for (i = 0; i < area_n; i++) {
544 
545  area_etype_list = HECMW_malloc(sizeof(int) * mesh[i]->n_elem);
546  for (j = 0; j < mesh[i]->n_elem_type; j++) {
547  for (k = mesh[i]->elem_type_index[j]; k < mesh[i]->elem_type_index[j+1]; k++) {
548  area_etype_list[k] = mesh[i]->elem_type_item[j];
549  }
550  }
551 
552  for (j = 0; j < mesh[i]->ne_internal; j++) {
553  eid = mesh[i]->elem_internal_list[j] - 1;
554  if ( HECMW_is_etype_patch(area_etype_list[eid]) ) continue;
555  if ( HECMW_is_etype_link(area_etype_list[eid]) ) continue;
556 
557  erec[count].global = mesh[i]->global_elem_ID[eid];
558  erec[count].local = eid;
559  erec[count].area = i;
560  count++;
561  }
562 
563  HECMW_free(area_etype_list);
564  }
565 
566  qsort(erec, all_e, sizeof(fstr_gl_rec), (cmp_func)cmp_global_glt);
567 
568  glt = HECMW_malloc(sizeof(fstr_glt));
569  if (!glt) return NULL;
570  glt->nrec = nrec;
571  glt->erec = erec;
572  glt->node_n = all_n;
573  glt->elem_n = all_e;
574 
575  return glt;
576 }
577 
583  if (!glt) return;
584 
585  HECMW_free(glt->nrec);
586  HECMW_free(glt->erec);
587  HECMW_free(glt);
588  return;
589 }
590 
596  struct hecmwST_local_mesh* mesh;
597  int i;
598 
599  mesh = HECMW_calloc(1, sizeof(struct hecmwST_local_mesh));
600  mesh->global_node_ID = HECMW_malloc(glt->node_n * sizeof(int));
601  mesh->global_elem_ID = HECMW_malloc(glt->elem_n * sizeof(int));
602 
603  for (i = 0; i < glt->node_n; i++) {
604  mesh->global_node_ID[i] = glt->nrec[i].global;
605  }
606  mesh->n_node = glt->node_n;
607 
608  for (i = 0; i < glt->elem_n; i++) {
609  mesh->global_elem_ID[i] = glt->erec[i].global;
610  }
611  mesh->n_elem = glt->elem_n;
612 
613  return mesh;
614 }
615 
621  if (!mesh) return;
622 
625  HECMW_free(mesh);
626  return;
627 }
struct hecmwST_local_mesh * fstr_create_glmesh(fstr_glt *glt)
Create a single region mesh.
struct hecmwST_local_mesh ** fstr_get_all_local_mesh(char *name_ID, int nrank, int *area_number, int *refine)
Read all distributed meshes.
void fstr_set_log_fp(FILE *log_fp)
Set file pointer for log output.
void fstr_free_glmesh(struct hecmwST_local_mesh *mesh)
Delete a single region mesh.
fstr_glt * fstr_create_glt(struct hecmwST_local_mesh **mesh, int area_n)
Create table for global ID, local ID and belonging area records fstr_glt.
void fstr_free_glt(fstr_glt *glt)
Delete fstr_glt.
fstr_res_info ** fstr_get_all_result(char *name_ID, int step, int area_n, int refine, int nrank)
Read all area data of step.
void fstr_out_log(const char *fmt,...)
Log output.
int fstr_get_step_n(char *name_ID, int nrank)
Check the number of steps (check for the existence of files)
struct hecmwST_result_data * fstr_all_result(fstr_glt *glt, fstr_res_info **res, int refine)
Combine data in all areas of the step.
void fstr_free_result(fstr_res_info **res, int area_n)
int(* cmp_func)(const void *, const void *)
void fstr_free_mesh(struct hecmwST_local_mesh **mesh, int area_n)
Delete mesh.
#define HECMW_FILENAME_LEN
Definition: hecmw_config.h:74
#define HECMW_HEADER_LEN
Definition: hecmw_config.h:70
void HECMW_ctrl_free_meshfiles(struct hecmw_ctrl_meshfiles *meshfiles)
struct hecmw_ctrl_meshfiles * HECMW_ctrl_get_meshfiles_header_sub(char *name_ID, int n_rank, int i_rank)
char * HECMW_ctrl_get_result_fileheader_sub(char *name_ID, int istep, int n_rank, int i_rank, int *fg_text)
char * HECMW_ctrl_get_result_fileheader(char *name_ID, int istep, int *fg_text)
#define HECMW_CTRL_FTYPE_HECMW_DIST
Definition: hecmw_control.h:14
void HECMW_dist_free(struct hecmwST_local_mesh *mesh)
struct hecmwST_local_mesh * mesh
Definition: hecmw_repart.h:71
int HECMW_is_etype_link(int etype)
Definition: hecmw_etype.c:1987
int HECMW_is_etype_patch(int etype)
Definition: hecmw_etype.c:2048
struct hecmwST_local_mesh * HECMW_get_dist_mesh(char *fname)
struct hecmwST_local_mesh * HECMW_get_mesh(char *name_ID)
#define NULL
#define HECMW_calloc(nmemb, size)
Definition: hecmw_malloc.h:21
#define HECMW_free(ptr)
Definition: hecmw_malloc.h:24
#define HECMW_strdup(s)
Definition: hecmw_malloc.h:23
#define HECMW_malloc(size)
Definition: hecmw_malloc.h:20
int * HECMW_result_get_nodeID(int *buff)
Definition: hecmw_result.c:214
int HECMW_result_get_nnode(void)
Definition: hecmw_result.c:200
void HECMW_result_free_nodeID(void)
Definition: hecmw_result.c:230
int HECMW_result_get_nelem(void)
Definition: hecmw_result.c:202
void HECMW_result_free(struct hecmwST_result_data *result)
Definition: hecmw_result.c:21
struct hecmwST_result_data * HECMW_result_read_by_fname(char *filename)
Definition: hecmw_result.c:165
int * HECMW_result_get_elemID(int *buff)
Definition: hecmw_result.c:222
void HECMW_result_free_elemID(void)
Definition: hecmw_result.c:235
CNFData data
Global ID, local ID and belonging area record.
Table for global ID, local ID and belonging area records.
fstr_gl_rec * nrec
fstr_gl_rec * erec
Utility for reading and processing results computed in parallel.
struct hecmwST_result_data * result
struct hecmw_ctrl_meshfile * meshfiles
Definition: hecmw_control.h:42
double * elem_val_item
Definition: hecmw_result.h:23
double * global_val_item
Definition: hecmw_result.h:21
double * node_val_item
Definition: hecmw_result.h:22