Loading
HECMW_LONG_LONG データ型の追加とビジュアライザの elem_node_index 型不整合修正
Closes #741 (closed)
概要
ビジュアライザの各関数で、hecmwST_local_mesh::elem_node_index (long long *) を int * として扱っていた型不整合を修正する。あわせて、修正に必要な HECMW_LONG_LONG データ型識別子をHEC-MW通信ラッパーに追加する。
変更の動機
hecmw_fstr_output_femap.c 内の femap_write_elem、avs_write_elem_conn 等の関数は、elem_node_index の引数を int * で宣言しており、long long * 型の構造体メンバとの間で型不整合が生じていた。受信バッファも int * として確保されており、MPI通信も HECMW_INT で行われていたため、大規模メッシュでのデータ破壊リスクがあった。
これを正しく修正するには、通信レイヤーで long long を直接扱えるようにする必要がある。
変更内容
1. 通信レイヤーへの HECMW_LONG_LONG 追加
hecmw1/src/common/hecmw_config.h:
-
HECMW_LONG_LONGを((HECMW_Datatype)10004)として定義
hecmw1/src/common/hecmw_comm.c:
- 全ラッパー関数 (
HECMW_Bcast,HECMW_Send,HECMW_Recv,HECMW_Isend,HECMW_Irecv,HECMW_Allreduce,HECMW_Allgather) にHECMW_LONG_LONG→MPI_LONG_LONGの分岐を追加
hecmw1/src/couple/hecmw_couple_comm.c:
-
HECMW_couple_inter_send_recv、HECMW_couple_intra_send_recv、HECMW_couple_bcastにHECMW_LONG_LONG分岐を追加
2. ビジュアライザの型不整合修正
hecmw1/src/visualizer/hecmw_fstr_output_femap.c:
- 関数引数の型修正:
femap_write_elem、avs_write_elem_connのelem_node_indexをint *→long long * - ローカル変数の型修正:
HECMW_fstr_output_femap、avs_output、HECMW_bin_avs_output内のtmp_elem_node_indexをint *→long long * - メモリ確保の修正:
HECMW_callocのsizeof(int)→sizeof(long long) - MPI通信の修正:
HECMW_Send/HECMW_Recvのデータ型をHECMW_INT→HECMW_LONG_LONG
変更ファイル一覧
| ファイル | 変更行数 | 概要 |
|---|---|---|
hecmw1/src/common/hecmw_config.h |
+2 |
HECMW_LONG_LONG 定義追加 |
hecmw1/src/common/hecmw_comm.c |
+52 | 全ラッパー関数に long long 分岐追加 |
hecmw1/src/couple/hecmw_couple_comm.c |
+56 | カプラ通信関数に long long 分岐追加 |
hecmw1/src/visualizer/hecmw_fstr_output_femap.c |
+16/-14 | 関数引数・変数・通信の型修正 |