18static void out_log(
const char* fmt, ...) {
21 vfprintf(
log_fp, fmt, arg);
29static int get_dist_fname(
char* name_ID,
char* fheader,
int* fg_single,
30 int* refine,
int irank) {
34 if (!files)
return -1;
44 out_log(
"refine number is %d\n", *refine);
54static int get_area_n(
char* fheader) {
60 sprintf(buff,
"%s.%d", fheader, area);
61 out_log(
"try open : %s ... ", buff);
62 fp = fopen(buff,
"r");
65 out_log(
"area number is %d\n", area);
89 if (get_dist_fname(name_ID, fheader, &fg_single, refine, 0))
return NULL;
92 out_log(
"mesh file type is NOT HECMW_DIST.\n");
94 out_log(
"area number is %d\n", area_n);
99 out_log(
"mesh file type is HECMW_DIST.\n");
101 area_n = get_area_n(fheader);
105 if (area_n == 0)
return NULL;
107 for (i = 0; i < area_n; i++) {
109 sprintf(fname,
"%s.%d", fheader, i);
111 get_dist_fname(name_ID, fheader, &fg_single, refine, i);
112 sprintf(fname,
"%s.%d", fheader, i);
114 out_log(
"loading dist mesh from %s\n", fname);
119 *area_number = area_n;
133 for (i = 0; i < area_n; i++) {
164 sprintf(fname,
"%s.0.%d", fheader, step);
165 out_log(
"try open : %s ... ", fname);
166 fp = fopen(fname,
"r");
169 out_log(
"step number is %d\n", step - 1);
172 out_log(
"success\n");
189 int i, j, k, count, num,
nnode,
nelem, flag, fg_text;
190 int *node_gid, *elem_gid;
191 int refine_nnode = 0;
200 if (!res)
return NULL;
202 for (i = 0; i < area_n; i++) {
204 if (!res[i])
return NULL;
208 name_ID, step,
nrank, i, &fg_text)) ==
NULL)
211 sprintf(fname,
"%s.%d.%d", fheader, i, step);
216 if (!node_gid)
return NULL;
220 if (!elem_gid)
return NULL;
225 if (!res[i]->result)
return NULL;
229 if (!res[i]->result->ng_dof)
return NULL;
232 if (!res[i]->result->global_label)
return NULL;
233 for (j = 0; j <
data->ng_component; j++) {
240 if (!res[i]->result->nn_dof)
return NULL;
243 if (!res[i]->result->node_label)
return NULL;
245 for (j = 0; j <
data->nn_component; j++) {
248 num +=
data->nn_dof[j];
253 for (j = 1; j <
nnode; j++) {
254 if (flag == refine)
break;
256 if (node_gid[j] > 0 && node_gid[j - 1] < 0) flag++;
257 if (node_gid[j] < 0 && node_gid[j] > node_gid[j - 1]) flag++;
260 out_log(
"\narea:%d -- refined_nn_internal:%d", i, count);
261 refine_nnode += count;
264 for (j = 0; j <
nnode; j++)
265 if (node_gid[j] > 0) count++;
269 if (!res[i]->result->node_val_item)
return NULL;
271 for (j = 0; j <
nnode; j++) {
272 if (node_gid[j] > 0) {
273 for (k = 0; k < num; k++) {
275 data->node_val_item[num * j + k];
282 if (!res[i]->result->ne_dof)
return NULL;
285 if (!res[i]->result->elem_label)
return NULL;
287 for (j = 0; j <
data->ne_component; j++) {
290 num +=
data->ne_dof[j];
294 for (j = 0; j <
nelem; j++)
295 if (elem_gid[j] > 0) count++;
296 out_log(
"\narea:%d -- ne_original from result:%d", i, count);
300 if (!res[i]->result->elem_val_item)
return NULL;
302 for (j = 0; j <
nelem; j++) {
303 if (elem_gid[j] > 0) {
304 for (k = 0; k < num; k++) {
306 data->elem_val_item[num * j + k];
316 if (!res[i]->node_gid)
return NULL;
318 for (j = 0; j <
nnode; j++) {
319 if (node_gid[j] > 0) res[i]->
node_gid[count++] = node_gid[j];
324 if (!res[i]->elem_gid)
return NULL;
326 for (j = 0; j <
nelem; j++) {
327 if (elem_gid[j] > 0) res[i]->
elem_gid[count++] = elem_gid[j];
339 if (refine) out_log(
"\ntotal refined_nn_internal:%d\n", refine_nnode);
350 int i, j, k, l_id, area;
351 int gitem, nitem, eitem, count, irec;
356 gitem += res[0]->result->ng_dof[i];
359 nitem += res[0]->result->nn_dof[i];
362 eitem += res[0]->result->ne_dof[i];
366 data->global_label =
HECMW_malloc(res[0]->result->ng_component *
sizeof(
char*));
369 data->node_label =
HECMW_malloc(res[0]->result->nn_component *
sizeof(
char*));
372 data->elem_label =
HECMW_malloc(res[0]->result->ne_component *
sizeof(
char*));
380 for (i = 0; i < gitem; i++) {
384 for (i = 0; i < glt->
node_n; i++) {
401 for (i = 0; i < glt->
elem_n; i++) {
408 data->elem_val_item[count++] = 0.0;
410 data->elem_val_item[count++] =
434 for (i = 0; i < area_n; i++) {
455 int i, j, k, eid, count;
461 int* area_etype_list;
464 for (i = 0; i < area_n; i++) {
465 out_log(
"area:%d -- nn_internal:%d\n", i,
mesh[i]->nn_internal);
468 out_log(
"total nn_internal:%d\n", all_n);
471 if (!nrec)
return NULL;
474 for (i = 0; i < area_n; i++) {
477 nrec[count].
local = j;
478 nrec[count].
area = i;
486 for (i = 0; i < area_n; i++) {
503 out_log(
"area:%d -- ne_internal:%d\n", i, area_e);
505 out_log(
"total ne_internal:%d\n", all_e);
508 if (!erec)
return NULL;
511 for (i = 0; i < area_n; i++) {
526 erec[count].
local = eid;
527 erec[count].
area = i;
537 if (!glt)
return NULL;
571 for (i = 0; i < glt->
node_n; i++) {
576 for (i = 0; i < glt->
elem_n; i++) {
fstr_res_info ** fstr_get_all_result(char *name_ID, int step, int area_n, int refine)
ステップの全領域データの読み込み
fstr_glt * fstr_create_glt(struct hecmwST_local_mesh **mesh, int area_n)
テーブル fstr_glt の作成
int fstr_get_step_n(char *name_ID)
ステップ数を調べる(ファイルの存在を調べる)
struct hecmwST_local_mesh ** fstr_get_all_local_mesh(char *name_ID, int *area_number, int *refine)
全分散メッシュの読込み
void fstr_free_glmesh(struct hecmwST_local_mesh *mesh)
単一領域メッシュの削除
void fstr_free_glt(fstr_glt *glt)
fstr_glt の削除
FILE * log_fp
並列計算された結果を読込み処理するためのユーティリティ
struct hecmwST_local_mesh * fstr_create_glmesh(fstr_glt *glt)
単一領域メッシュの作成
void fstr_free_result(fstr_res_info **res, int area_n)
fstr_res_info の削除
struct hecmwST_result_data * fstr_all_result(fstr_glt *glt, fstr_res_info **res, int refine)
ステップの全領域データの結合
int(* cmp_func)(const void *, const void *)
void fstr_free_mesh(struct hecmwST_local_mesh **mesh, int area_n)
メッシュの削除
#define HECMW_FILENAME_LEN
char * HECMW_ctrl_get_result_fileheader(char *name_ID, int istep, int *fg_text)
void HECMW_ctrl_free_meshfiles(struct hecmw_ctrl_meshfiles *meshfiles)
char * HECMW_ctrl_get_result_fileheader_sub(char *name_ID, int istep, int n_rank, int i_rank, int *fg_text)
struct hecmw_ctrl_meshfiles * HECMW_ctrl_get_meshfiles_header_sub(char *name_ID, int n_rank, int i_rank)
#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_nnode(void)
void HECMW_result_free_nodeID(void)
int * HECMW_result_get_elemID(int *buff)
int HECMW_result_get_nelem(void)
struct hecmwST_result_data * HECMW_result_read_by_fname(char *filename)
void HECMW_result_free(struct hecmwST_result_data *result)
int * HECMW_result_get_nodeID(int *buff)
void HECMW_result_free_elemID(void)
分散で計算された結果を読込み処理するためのユーティリティ
struct hecmwST_result_data * result
struct hecmw_ctrl_meshfile * meshfiles