37 vfprintf(Log_FP, fmt, arg);
45 static int get_dist_fname(
char* name_ID,
char* fheader,
int* fg_single,
46 int* refine,
int nrank,
int irank) {
50 if (!files)
return -1;
70 static int get_area_n(
char* fheader) {
76 sprintf(buff,
"%s.%d", fheader, area);
78 fp = fopen(buff,
"r");
106 if (get_dist_fname(name_ID, fheader, &fg_single, refine, nrank, 0))
return NULL;
118 area_n = get_area_n(fheader);
122 if (area_n == 0)
return NULL;
124 for (i = 0; i < area_n; i++) {
126 sprintf(fname,
"%s.%d", fheader, i);
128 get_dist_fname(name_ID, fheader, &fg_single, refine, nrank, i);
129 sprintf(fname,
"%s.%d", fheader, i);
136 *area_number = area_n;
150 for (i = 0; i < area_n; i++) {
179 sprintf(fname,
"%s.0.%d", fheader, step);
181 fp = fopen(fname,
"r");
199 int refine,
int nrank) {
204 int i, j, k, count, num, nnode, nelem, flag, fg_text;
205 int *node_gid, *elem_gid;
206 int refine_nnode = 0;
215 if (!res)
return NULL;
217 for (i = 0; i < area_n; i++) {
219 if (!res[i])
return NULL;
223 name_ID, step, nrank, i, &fg_text)) ==
NULL)
226 sprintf(fname,
"%s.%d.%d", fheader, i, step);
231 if (!node_gid)
return NULL;
235 if (!elem_gid)
return NULL;
240 if (!res[i]->result)
return NULL;
244 if (!res[i]->result->ng_dof)
return NULL;
247 if (!res[i]->result->global_label)
return NULL;
248 for (j = 0; j <
data->ng_component; j++) {
251 if (!res[i]->result->global_label[j])
return NULL;
256 if (!res[i]->result->nn_dof)
return NULL;
259 if (!res[i]->result->node_label)
return NULL;
261 for (j = 0; j <
data->nn_component; j++) {
264 if (!res[i]->result->node_label[j])
return NULL;
265 num +=
data->nn_dof[j];
270 for (j = 1; j < nnode; j++) {
271 if (flag == refine)
break;
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++;
277 fstr_out_log(
"\narea:%d -- refined_nn_internal:%d", i, count);
278 refine_nnode += count;
281 for (j = 0; j < nnode; j++)
282 if (node_gid[j] > 0) count++;
286 if (!res[i]->result->node_val_item)
return NULL;
288 for (j = 0; j < nnode; j++) {
289 if (node_gid[j] > 0) {
290 for (k = 0; k < num; k++) {
292 data->node_val_item[num * j + k];
299 if (!res[i]->result->ne_dof)
return NULL;
302 if (!res[i]->result->elem_label)
return NULL;
304 for (j = 0; j <
data->ne_component; j++) {
307 if (!res[i]->result->elem_label[j])
return NULL;
308 num +=
data->ne_dof[j];
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);
318 if (!res[i]->result->elem_val_item)
return NULL;
320 for (j = 0; j < nelem; j++) {
321 if (elem_gid[j] > 0) {
322 for (k = 0; k < num; k++) {
324 data->elem_val_item[num * j + k];
334 if (!res[i]->node_gid)
return NULL;
336 for (j = 0; j < nnode; j++) {
337 if (node_gid[j] > 0) res[i]->
node_gid[count++] = node_gid[j];
342 if (!res[i]->elem_gid)
return NULL;
344 for (j = 0; j < nelem; j++) {
345 if (elem_gid[j] > 0) res[i]->
elem_gid[count++] = elem_gid[j];
357 if (refine)
fstr_out_log(
"\ntotal refined_nn_internal:%d\n", refine_nnode);
368 int i, j, k, l_id, area;
369 int gitem, nitem, eitem, count, irec;
374 gitem += res[0]->result->ng_dof[i];
377 nitem += res[0]->result->nn_dof[i];
380 eitem += res[0]->result->ne_dof[i];
386 data->global_label =
HECMW_malloc(res[0]->result->ng_component *
sizeof(
char*));
387 if (!
data->global_label)
return NULL;
389 if (!
data->global_val_item)
return NULL;
392 data->node_label =
HECMW_malloc(res[0]->result->nn_component *
sizeof(
char*));
395 if (!
data->node_val_item)
return NULL;
398 data->elem_label =
HECMW_malloc(res[0]->result->ne_component *
sizeof(
char*));
401 if (!
data->elem_val_item)
return NULL;
407 if (!
data->global_label[i])
return NULL;
409 for (i = 0; i < gitem; i++) {
413 for (i = 0; i < glt->
node_n; i++) {
427 if (!
data->node_label[i])
return NULL;
431 for (i = 0; i < glt->
elem_n; i++) {
438 data->elem_val_item[count++] = 0.0;
440 data->elem_val_item[count++] =
450 if (!
data->elem_label[i])
return NULL;
465 for (i = 0; i < area_n; i++) {
486 int i, j, k, eid, count;
492 int* area_etype_list;
495 for (i = 0; i < area_n; i++) {
502 if (!nrec)
return NULL;
505 for (i = 0; i < area_n; i++) {
508 nrec[count].
local = j;
509 nrec[count].
area = i;
517 for (i = 0; i < area_n; i++) {
540 if (!erec)
return NULL;
543 for (i = 0; i < area_n; i++) {
558 erec[count].
local = eid;
559 erec[count].
area = i;
569 if (!glt)
return NULL;
603 for (i = 0; i < glt->
node_n; i++) {
608 for (i = 0; i < glt->
elem_n; i++) {
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
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
void HECMW_dist_free(struct hecmwST_local_mesh *mesh)
struct hecmwST_local_mesh * mesh
int HECMW_is_etype_link(int etype)
int HECMW_is_etype_patch(int etype)
struct hecmwST_local_mesh * HECMW_get_dist_mesh(char *fname)
struct hecmwST_local_mesh * HECMW_get_mesh(char *name_ID)
#define HECMW_calloc(nmemb, size)
#define HECMW_malloc(size)
int * HECMW_result_get_nodeID(int *buff)
int HECMW_result_get_nnode(void)
void HECMW_result_free_nodeID(void)
int HECMW_result_get_nelem(void)
void HECMW_result_free(struct hecmwST_result_data *result)
struct hecmwST_result_data * HECMW_result_read_by_fname(char *filename)
int * HECMW_result_get_elemID(int *buff)
void HECMW_result_free_elemID(void)
Global ID, local ID and belonging area record.
Table for global ID, local ID and belonging area records.
Utility for reading and processing results computed in parallel.
struct hecmwST_result_data * result
struct hecmw_ctrl_meshfile * meshfiles