The document summarizes research on simulating hydrogen dispersion using the ADVENTURE_sFlow solver. It describes modeling hydrogen dispersion as an analogy to thermal convection problems. Two models are analyzed: a hallway model and a car garage model. The hallway model analyzes hydrogen dispersion from inlet, door, and roof vents in an empty volume. The car garage model analyzes hydrogen leakage from a fuel cell car in a full-scale garage. The objective is to demonstrate the feasibility of using the ADVENTURE_sFlow solver, which uses a hierarchical domain decomposition method, to efficiently solve large-scale problems like hydrogen dispersion in engineering facilities.
3. 3
Bcnd
定義: hddm_types.h
機能: ある節点の境界条件を格納する.
メンバー変数:
int node; Subdomain 内ローカル節点番号
int co; 軸方向(0=x, 1=y, 2=z)
double val; 境界条件値
SpringSupport
定義: hddm_types.h
機能: ある節点の弾性ばね支持条件を格納する.
メンバー変数:
int node; Subdomain 内ローカル節点番号
int spring_id; グローバルばね ID
double direction[3]; 各軸方向の係数
ElmFaceLoad
定義: hddm_types.h
機能: ある要素面の表面力や圧力条件を格納する.
メンバー変数:
int type; 表面力のタイプ
int elmid; Subdomain 内ローカル要素番号
int surfaceid; 要素内ローカル面番号
double* val; 境界条件値
Inbc
定義: hddm_types.h
機能: ある Subdomain が他 Subdomain と共有する,ある Interface 自由度情報を格納する.
メンバー変数:
int aspart; この自由度を担当する Part の ID
int mypart_ibid; この Subdomain が属する Part 内でのローカル Interface 自由度番号
int node; Subdomain 内ローカル節点番号
int co; 軸方向(0=x, 1=y, 2=z)
4. 4
Sharenode
定義: hddm_types.h
機能: ある Subdomain が他 Subdomain と共有する,ある Interface 節点情報を格納する.
メンバー変数:
int aspart; この節点を担当する Part の ID
int asdom; この節点を担当する Subdomain の ID
int asgdom; “asdom"のグローバル ID
int n_share_dom; この節点を共有する Subdomain 数
int* share_gdom; この節点を共有する Subdomain のグローバル ID を格納する int 配列
int mypart_snid; この Subdomain が属する Part 内でのローカル Interface 節点番号
int node; Subdomain 内ローカル節点番号
BCset
定義: hddm_types.h
機能: ある Subdomain が持つ境界条件の集合体.
メンバー変数:
int id; 境界条件の ID
int ndisp; 節点強制変位境界条件の数
int nload; 節点荷重境界条件の数
int num_elmfaceload[ELMFACELOAD_NUM_TYPE]; 実装されていません
int efl_onedatasize[ELMFACELOAD_NUM_TYPE]; 実装されていません
int num_spring_support; 弾性ばね条件の数
Bcnd* bcdisp; 節点強制変位境界条件を格納する Bcnd 配列
Bcnd* bcload; 節点荷重境界条件を格納する Bcnd 配列
ElmFaceLoad* elmfaceload[ELMFACELOAD_NUM_TYPE]; 実装されていません
SpringSupport* spring_support; 弾性ばね条件を格納する SpringSupport 配列
5. 5
DomMesh
定義: hddm_types.h
機能: 1 つの Subdomain のメッシュデータや境界条件を格納する.
メンバー変数:
int partid; Subdomain が属する Part の ID
int domid; Subdomain の属する Part 内でのローカル ID
int gdomid; Subdomain のグローバル ID
int elmtype; 有限要素の種類
int elm_dim; 要素の次元数
int nd_elm; 要素を構成する節点数
int elms; Subdomain 内の要素数
int* nop; Subdomain 内の要素コネクティビティを格納する int 配列
int nodes; Subdomain 内の節点数
int node_dim; 節点の次元数
int* ndindex; Subdomain 内節点の Part ローカル節点番号を格納する int 配列
double* crd; Subdomain 内の節点座標値を格納する double 配列
Slist* bclist; Subdomain の境界条件を格納する Slist ポインタ
int ndisp; 基本境界条件数
Bcnd* bcdisp; 基本境界条件を格納する Bcnd 配列
int nload; 荷重自然境界条件数
Bcnd* bcload; 荷重自然境界条件を格納する Bcnd 配列
int num_spring_support; 弾性ばね条件数
SpringSupport* spring_support; 弾性ばね条件を格納する SpringSupport 配列
int ninbd; 他 Subdomain と共有する Interface 自由度数
int ifn_dim; Interface 節点の自由度数
Inbc* inbd; 他 Subdomain との共有 Interface 自由度情報を格納する Inbc 配列
int nsharenode; 他 Subdomain と共有する Interface 節点数
Sharenode* sharenode; 他 Subdomain との共有節点情報を格納する Sharenode 配列
int with_temperature; この Subdomain 内節点の温度情報を持つかどうか
double* temperature; Subdomain 内節点の温度を格納する double 配列
int with_matid; 材料物性値 ID を持つかどうか(複数材料モデルかどうか)
int* matid; Subdomain 内要素の材料物性値 ID を格納する int 配列
6. 6
OPinfo
定義: hddm_types.h
機能: ある Part がある他 Part と共有する Interface 自由度情報を格納する.
メンバー変数:
int n_mofree; ある他 Part と共有する Interface 自由度数
int* mof_ibid; ある他 Part と共有する Part 内でのローカル Interface 自由度番号を格納す
る int 配列
OPSinfo
定義: hddm_types.h
機能: ある Part がある他 Part と共有する Interface 節点情報を格納する.
メンバー変数:
int n_moshare; ある他 Part と共有する Interface 節点数
int* mo_snnid; ある他 Part と共有する Part 内でのローカル Interface 節点番号を格納する
int 配列
PartMesh
定義: hddm_types.h
機能: 1 つの Part のメッシュデータや境界条件を格納する.
メンバー変数:
int n_part; 総 Part 数
int partid; Part の ID
int n_domain; Part 内の Subdomain 数
int t_nodes; Part 内の節点数
int node_dim; 節点自由度数
int t_infree; Part 内 Interface 自由度の中でこの Part が担当する Interface 自由度数
int t_outfree; Part 内 Interface 自由度の中で他 Part が担当する Interface 自由度数
int t_insnode; Part 内 Interface 節点の中でこの Part が担当する Interface 節点数
int t_outsnode; Part 内 Interface 節点の中で他 Part が担当する Interface 節点数
OPinfo* op; 他 Part との共有 Interface 自由度情報を格納する OPinfo 配列
OPSinfo* opsn; 他 Part との共有 Interface 節点情報を格納する OPSinfo 配列
double* crd; Part 内の節点座標値を格納する double 配列
double* crd2; Part 内の節点座標値(大変形解析 ULF に使用)を格納する double 配列
int* pndindex; Part 内節点の領域分割前グローバル節点番号を格納する int 配列
int global_t_nodes; 領域分割前の総節点数
int global_t_elms; 領域分割前の総要素数
7. 7
int global_t_domains; 全 Part の総計 Subdomain 数
DomMesh* dom; Part 内の各 Subdomain のメッシュデータを格納する DomMesh 配列
int* off_gdom; 各 Part の Subdomain のグローバル ID スタート番号を格納する int 配列
DomField
定義: hddm_types.h
機能: 1 つの Subdomain の物理量を格納する.
メンバー変数:
int partid; Subdomain の属する Part の ID
int domid; Subdomain の属する Part 内でのローカル ID
int nd_elm; 要素を構成する節点数
int ninteg; 要素の積分点数
int elms; Subdomain 内の要素数
int elm_dim; 要素の次元数
int nodes; Subdomain 内の節点数
int node_dim; 節点の自由度数
int str_dim; 応力の次元数
int have_cgdisp; 現バージョンでは特に使用しない
double* disp; 節点変位ベクトル
double* reac; 節点反力ベクトル
double* stress; 積分点応力テンソル
double* cgdisp; 現バージョンでは特に使用しない
double* ddisp; 増分型節点変位ベクトル
double* strain; 積分点歪みテンソル
double* pl_strain; 積分点塑性歪みテンソル
double* eq_pl_strain; 積分点相当塑性歪み
double* stress2; 前の増分ステップにおける積分点応力テンソル
double* force; 節点外力ベクトル
double* force2; 前の増分ステップにおける節点外力ベクトル
double* dforce; 増分型節点外力ベクトル
double* ystr; 積分点降伏応力
double* ystr2; 前の増分ステップにおける積分点降伏応力
int* elpl; 積分点降伏領域(弾性: ELASTIC, 塑性: PLASTIC, 塑性→弾性: PL_TO_EL)
8. 8
PartField
定義: hddm_types.h
機能: 1 つの Part 内の Subdomain 毎の物理量を格納する.
メンバー変数:
int n_part; 総 Part 数
int partid; Part の ID
int n_domain; Part 内の Subdomain 数
DomField* dom; Part 内の各 Subdomain の物理量を格納する DomField 配列
OptSolv
定義: hddm_types.h
機能: 有限要素法ソルバとしての各種オプションを格納する.
メンバー変数:
fe_Options feopt; 有限要素法解析タイプ
int solver_type; 線形方程式ソルバタイプ
int nonlinear; 1: 非線形問題, 0:線形問題
int total_nl_step; 本実行における総増分ステップ数
int first_nl_step; 本実行における初期増分ステップ番号(リスタート時に非零)
int max_newton; Newton-Raphson 法の反復回数上限(未収束判定値)
int cur_nl_step; 本実行における現在の増分ステップ番号
int cur_newton_step; 現在の Newton-Raphson 法の反復回数
double tol_newton; Newton-Raphson 法の収束判定値
int sw_gravity; 1:重力による自重を考慮する, 0:考慮しない
int have_intg_stra; 1:出力タイプに積分点歪みデータがある, 0: ない
int have_intg_pl_stra; 1:出力タイプに積分点塑性歪みデータがある, 0:ない
int have_intg_eq_pl_stra; 1:出力タイプに積分点相当塑性歪みデータがある, 0:ない
int use_tet10_5; 1:4 面体 2 次要素の要素積分は 5 点積分を用いる, 0:4 点積分
Slist* nlstep_set; 増分法をコントロールするオプションリスト
int unload_reset; 1:除荷発生時に非線形計算をリセットする, 0:リセットしない
int sw_thermal; 1:熱応力を考慮する, 0:考慮しない
OutputSW
定義: hddm_types.h
機能: 出力する解析結果タイプを格納する.出力する物理量のタイプはビットで管理し,
節点データは 1,要素データは 2,要素積分点データは 4 のビットをオン/オフする.
9. 9
メンバー変数:
int disp; 節点変位
int reac; 節点反力
int force; 節点外力(増分解析リスタートデータ出力時にオン)
int str; (節点/要素/積分点)応力
int estr; (節点/要素/積分点)相当応力
int ystr; (節点/要素/積分点)降伏応力
int elpl; (要素/積分点)降伏領域
int stra; (節点/要素/積分点)歪み
int pl_stra; (節点/要素/積分点)塑性歪み
int eq_pl_stra; (節点/要素/積分点)相当塑性歪み
int prstr; (節点/要素/積分点)主応力 3 成分とその固有値ベクトル
int prstra; (節点/要素/積分点)主歪み 3 成分とその固有値ベクトル
char* data_dir; 出力する結果ファイルの置かれる親ディレクトリ名
char* subdir; 出力する結果ファイルの置かれるサブディレクトリ名
char* filename; 出力する結果ファイルの Part ID や拡張子を除いたファイル名
int filename_have_step; 1:出力結果ファイル名に増分ステップ番号をつける, 0:つけない
InputSW
定義: hddm_types.h
機能: 入力するデータファイルの情報を格納する.
メンバー変数:
char* data_dir; 入力するモデルファイルが置かれている親ディレクトリ名
char* indata_subdir; 入力するモデルファイルが置かれているサブディレクトリ名
char* indata_filename; 入力するモデルファイルの Part ID や拡張子を除いたファイル名
char* nl_resin_subdir; 入力する非線形反復リスタートファイルの置かれているサブデ
ィレクトリ名
char* nl_resin_filename; 非線形反復リスタートファイルの Part ID,増分ステップ番号や
拡張子を除いたファイル名
int use_nl_resin; 正数 n:非線形反復リスタートファイルとして増分ステップ番号
n のデータを読み込む,0:読み込まない
int indata_filename_have_step; 現バージョンでは特に使用しない
int nl_resin_filename_have_step; 1:入力する非線形反復リスタートファイル名に増分ス
テップ番号をつける,0:つけない
10. 10
CGOpts
定義: hddm_types.h
機能: Interface 問題を前処理つき CG 法で解くための各種オプションを格納する.
メンバー変数:
double tol; CG 法のための収束判定値
int loop_max; CG 法の反復回数上限(未収束判定値)
int resout_interval; CG 法リスタートファイルを出力する CG 反復回数の間隔
int resout_last; 1:CG 法終了時にリスタートファイルを出力する,0:出力しない
int use_resin; 1:CG 法リスタートファイルを読み込む,0:読み込まない
int sw_mat_keep; 1:CG 法反復間で線形方程式の係数行列を保持する,0:保持しない
int sw_precon; CG 法のための前処理タイプ
int watch_cg_history; 1:CG 法の収束履歴を出力する,0:出力しない
char* data_dir; 入出力する CG 法リスタートファイルの置かれる親ディレクト
リ名
char* resin_subdir; 入力する CG 法リスタートファイルが置かれているサブディレ
クトリ名
char* resin_filename; 入力 CG 法リスタートファイルの Part ID や拡張子を除いたファ
イル名
char* resout_subdir; 出力する CG 法リスタートファイルの置かれるサブディレクト
リ名
char* resout_filename; 出力 CG 法リスタートファイルの Part ID や拡張子を除いたファ
イル名
int resin_filename_have_step; 現バージョンでは特に使用しない
int resout_filename_have_step; 現バージョンでは特に使用しない
int resout_bddcmat; 1:BDD ソルバリスタートファイルを出力する,0:出力しない
int use_bddcmat; 1:BDD ソルバリスタートファイルを読み込む,0:読み込まない
char* bdd_subdir; BDD リスタートファイルの置かれるサブディレクトリ名
char* bddcmat_filename;BDD リスタートファイルの Part ID や拡張子を除いたファイル名
CGVector
定義: hddm_types.h
機能: Interface 問題を前処理つき CG 法で解くための各種ベクトルを格納する.
メンバー変数:
int t_infree; Part 内 Interface 自由度の中でこの Part が担当する Interface 自由度数
int t_outfree; Part 内 Interface 自由度の中で他 Part が担当する Interface 自由度数
int t_free; Part 内 Interface 自由度 ( = t_infree + t_outfree )
14. 14
IDlist
定義: idlist.h
機能: ID 付き連結リストを格納する.
メンバー変数:
int size; リスト内のノード数
IDlist_node* root; リスト内の最初のノードの場所を指す IDlist_node ポインタ
IDlist_node* last; リスト内の最後のノードの場所を指す IDlist_node ポインタ
Node_intbintree, _intbintree
定義: tree.h
機能: 2 分木データ IntBinTree のノード.
メンバー変数:
int data; ノードの整数データ
struct _intbintree* left; ノードから左側ツリーの場所を指す_intbintree ポインタ
struct _intbintree* right; ノードから左側ツリーの場所を指す_intbintree ポインタ
IntBinTree
定義: tree.h
機能: int 変数の 2 分木データを格納する.
メンバー変数:
int num; ツリー内のノード数
Node_intbintree* root; ツリー内の最上部ノードの場所を指す Node_intbintree ポインタ
IntAry
定義: tree.h
機能: int 変数の配列データを格納する.
メンバー変数:
int num; 配列のサイズ
int* d; サイズ num の int 配列を格納する
15. 15
COM_GRP_ID
定義: comm_mpi.h
機能: プロセッサグループ用 MPI コミュニケータ MPI_GroupID_me の情報を格納する.
メンバー変数:
int group; MPI グループ ID
int mygprocid; グループ内におけるプロセッサ番号
int nparent; Parent グループのプロセッサ数,入力データの部分数に等しい
int nchild; Child グループのプロセッサ数
int nparts; 入力データの部分数
int gpid; Grand Parent プロセッサ番号
int* parid; Parent グループを構成するプロセッサ番号を格納する int 配列
int* chiid; Child グループを構成するプロセッサ番号を格納する int 配列
COM_WLD_ID
定義: comm_mpi.h
機能: プロセッサ全体用 MPI コミュニケータ MPI_COMM_WORLD の情報を格納する.
メンバー変数:
int nproc; MPI プロセッサ数
int myprocid; プロセッサ番号
int* allid; プロセッサ全体の番号を格納するサイズ nproc の int 配列
ACG_Indx
定義: acg_solver.h
機能:
メンバー変数:
int size; 行列の次元数
int nfree; 自由度数
int noutfree; Part 内自由度の中で他 Part が担当する自由度数
int ninfree; Part 内自由度の中でこの Part が担当する自由度数
int ndisp; 基本境界条件数
int* indx; 行列の各次元の情報を格納するサイズ size の int 配列
16. 16
ACG_Matvec
定義: acg_solver.h
機能: ある行の非零データを格納する.
メンバー変数:
int size; 行の全非零要素数
int idig; 全非零要素データにおける対角要素位置
int nfree; 全非零要素数から基本境界条件数を除いた自由度数
int* indx; 行の全非零要素に対応する自由度番号を格納するサイズ size の int 配列
double* d; 行の非零要素を格納するサイズ size の double 配列
ACG_Matrix
定義: acg_solver.h
機能: 非零要素のみを記憶した行列を格納する.
メンバー変数:
int size; 行列の次元数
int nfree; 問題の自由度数
int ndisp; 基本境界条件数
ACG_Matvec* matvec; 行列の非零データを格納するサイズ size の ACG_Matvec 配列
Nodegraph
定義: acg_solver.h
機能: ある Part 内の各節点が有限要素で接続をもつ節点を格納する.
メンバー変数:
int size; Part 内の節点数
IntAry* node; Part 内の節点が接続する節点情報を格納する IntAry 配列
AdjDom
定義: bdd_domfunc.h
機能: ある Subdomain に接してる Subdomain の情報を格納する.
メンバー変数:
int partid; 接する Subdomain の属する Part の ID
int domid; 接する Subdomain の属する Part 内でのローカル ID
int ninbd; 共有する Interface 自由度数
int* ibid; 共有する Interface 自由度の Subdomain におけるローカル番号
int ndisp; 現バージョンでは特に使用しない
17. 17
AdjPart
定義: bdd_domfunc.h
機能: 現バージョンでは特に使用しない
メンバー変数:
int nadjdom;
int nadjinbc;
AdjDom* adjd;
DomAdjacency
定義: bdd_domfunc.h
機能: ある Subdomain に接する全 Subdomain の情報を格納する.
メンバー変数:
int n_share_dom; 接する Subdomain 数
AdjDom* adjd; 接する Subdomain 情報を格納するサイズ n_share_dom の AdjDom 配列
CoarseSpace
定義: bdd_domfunc.h
機能: ある Subdomain のローカルコーススペースを格納する.
メンバー変数:
int rigid_dof; Subdomain のもつ剛体自由度数,現バージョンでは 6(3 次元)に固定
int nf; Subdomain 内の Interface 自由度数
double* d; ローカルコーススペースを表す行列を格納するサイズ nf×rigid_dof の
double 配列
HBDD_LocalMatrix
定義: bdd_domfunc.h
機能: ある Subdomain のローカル Neumann-Neumann 前処理行列, ローカルコース
スペース,領域分割の重み行列など BDD ソルバに必要な情報を格納する.
メンバー変数:
int partid; Subdomain の属する Part の ID
int domid; Subdomain の属する Part 内でのローカル ID
int nodes; Subdomain 内の節点数
int node_dim; 節点の自由度数
int dim; Subdomain のローカル剛性行列の次元数
int ninbd; 他 Subdomain と共有する Interface 自由度数
int ndisp; 基本境界条件数
18. 18
int nload; 自然境界条件数
Bcnd* bcdisp; 基本境界条件を格納する Bcnd 配列
Bcnd* bcload; 自然境界条件を格納する Bcnd 配列
int state_glsc_inv; ローカル Neumann-Neumann 前処理行列を格納する glsc_inv の状態
DMatrix glsc_inv; Subdomain のローカル Neumann-Neumann 前処理行列を格納する
DMatrix 変数
DomAdjacency dadj; Subdomain が接する全 Subdomain 情報
double* weight; 領域分割による重み行列 D(i)を格納する double 配列
CoarseSpace Z; ローカルコーススペースを表す行列 Z(i)を格納する CoarseSpace 変数
ParMatrix
定義: bdd_coarse_parallel.h
機能: 実対称行列を並列プロセッサに分散記憶させ,ある 1 つのプロセッサが担当する
情報や分散行列を格納する.分散方法には列ブロック分割を用い,行列の記憶方法にはス
カイライン法を用いる.
メンバー変数:
int nblock; 使用するプロセッサ数
int myblockid; 担当する列ブロックの ID
int* allid; 使用するプロセッサのプロセッサ番号
int node_dim; 行列を構成する 1 点が持つ自由度数,現バージョンでは 6(3 次元)に固定
int grank; 分散前の行列の次元数
int file; 担当する列ブロック行列の行数
int rank; 担当する列ブロック行列の列数
int* allfile; 分散された各列ブロック行列の行数を格納する int 配列
int* allrank; 分散された各列ブロック行列の列数を格納する int 配列
int* st_nzline; 分散された各列ブロック行列において最初の非零要素が現れる列番号を
格納する int 配列
int* n_nzline; 分散された各列ブロック行列における非零要素が現れる列数を格納する
int 配列
int max_nzline; 全列ブロック行列における非零要素列数の最大値
int* ii; 担当する列ブロック行列のスカイライン形式インデックスを格納するサ
イズ file の int 配列
int* ij; 担当する列ブロック行列のスカイライン形式インデックスを格納するサ
イズ file×node_dim の int 配列
int slen; 1 次元化した担当する列ブロック行列を格納する配列 d の大きさ
double* d; 1 次元化した担当する列ブロック行列を格納するサイズ slen の double 配列