SlideShare a Scribd company logo
1
ADVENTURE_Solid 線形代数関数群 advlas リファレンスマニュアル
作者: 荻野正雄, 九州大学
文書バージョン: Ver. 0.1
文書作成日: 2008 年 9 月 25 日
文書公開日: 2008 年 9 月 29 日
—A—
advlas_add_diag_to_vec.....................................................................................................................7
advlas_assemble_elmk........................................................................................................................5
advlas_assemble_spring_support ......................................................................................................5
advlas_copy_condensed_matrix ........................................................................................................6
advlas_copy_gk2inv............................................................................................................................6
advlas_cpmat_sky2nz .........................................................................................................................7
advlas_generalized_ldl_decomposite.................................................................................................8
advlas_get_diag_of..............................................................................................................................7
advlas_ldl_decomposite......................................................................................................................7
advlas_ldl_solve...................................................................................................................................7
advlas_make_condensed_index .........................................................................................................6
advlas_matmult_vec_add...................................................................................................................7
advlas_mkindex...................................................................................................................................5
advlas_mkreducedindex.....................................................................................................................6
advlas_qsort.......................................................................................................................................10
advlas_sym_copy_index_nz2sky_condensed_ddm ........................................................................13
advlas_sym_copy_index_nz2sky_ddm............................................................................................12
advlas_sym_copy_index_nz2sky_nobcdisp ....................................................................................12
advlas_sym_copy_index_sky2sky_condensed_ddm.......................................................................12
advlas_sym_copy_index_sky2sky_ddm ..........................................................................................11
advlas_sym_copy_index_sky2sky_nobcdisp...................................................................................11
advlas_sym_copy_matrix_nz2sky_condensed_ddm ......................................................................13
advlas_sym_copy_matrix_nz2sky_condensed_nobcdisp...............................................................14
advlas_sym_copy_matrix_nz2sky_ddm..........................................................................................12
advlas_sym_copy_matrix_nz2sky_nobcdisp ..................................................................................12
advlas_sym_copy_matrix_sky2nz ...................................................................................................14
advlas_sym_copy_matrix_sky2sky_condensed_ddm ....................................................................13
advlas_sym_copy_matrix_sky2sky_condensed_nobcdisp.............................................................13
2
advlas_sym_copy_matrix_sky2sky_ddm........................................................................................11
advlas_sym_copy_matrix_sky2sky_nobcdisp ................................................................................11
advlas_sym_nzmat_add_diag_to_vec_part ....................................................................................10
advlas_sym_nzmat_assemble_elmk ..................................................................................................9
advlas_sym_nzmat_matmult_vec_add............................................................................................10
advlas_sym_nzmat_mkindex .............................................................................................................9
advlas_sym_skyline_add_diag_to_vec_part.....................................................................................8
advlas_sym_skyline_add_factor_to_diag........................................................................................10
advlas_sym_skyline_assemble_elmk.................................................................................................8
advlas_sym_skyline_find_diag_max ...............................................................................................10
advlas_sym_skyline_generalized_ldl_decomposite..........................................................................9
advlas_sym_skyline_ldl_decomposite ...............................................................................................9
advlas_sym_skyline_ldl_solve............................................................................................................9
advlas_sym_skyline_matmult_vec_add ............................................................................................8
advlas_sym_skyline_mkindex............................................................................................................8
ADVLAS_TUNED..............................................................................................................................3
—D—
DDM_BDINFO_EXTERNAL ...........................................................................................................4
DDM_BDINFO_NONE......................................................................................................................4
DeleteDMatrix.....................................................................................................................................5
DMatrix ...............................................................................................................................................4
—M—
MATRIX_NONZERO_ASYMMETRIC..........................................................................................3
MATRIX_NONZERO_SYMMETRIC.............................................................................................3
MATRIX_SKYLINE_ASYMMETRIC............................................................................................3
MATRIX_SKYLINE_SYMMETRIC...............................................................................................3
MATRIX_UNKNOWN ......................................................................................................................3
—N—
NewDMatrix........................................................................................................................................5
3
1. 環境変数リファレンス
advlas では以下の環境変数が設定されています.
MATRIX_SKYLINE_SYMMETRIC
定義: advlas_matop.h
設定値: 1
説明: 行列形式として,実対称行列及びスカイライン記憶を表す.
MATRIX_NONZERO_SYMMETRIC
定義: advlas_matop.h
設定値: 2
説明: 行列形式として,実対称行列及び非零記憶を表す.
MATRIX_SKYLINE_ASYMMETRIC
定義: advlas_matop.h
設定値: 3
説明: 行列形式として,実非対称行列及びスカイライン記憶を表す.
MATRIX_NONZERO_ASYMMETRIC
定義: advlas_matop.h
設定値: 4
説明: 行列形式として,実非対称行列及び非零記憶を表す.
MATRIX_UNKNOWN
定義: advlas_matop.h
設定値: -1
説明: 行列形式として,正式対応してないことを表す.
ADVLAS_TUNED
定義: advlas_matop.h
設定値: なし
説明: この環境変数が設定された場合,いくつかの関数がチューニングされた関数に置
き換えられる.正しい解が得られないときは,この環境変数を未定義にすることを試すと
良い.
4
DDM_BDINFO_EXTERNAL
定義: advlas_util.h
設定値: -1
説明: 配列 bcdisp_table において,配列の要素に対応する自由度が解析モデルの基本境界
上にある自由度であることを表す.環境変数 DOM_BDINFO_EXTERNAL と同じ値が設定さ
れていなければならない.
DDM_BDINFO_NONE
定義: advlas_util.h
設定値: -2
説明: 配列 bcdisp_table において,配列の要素に対応する自由度が部分領域内部にある自
由度であることを表す.環境変数 DOM_BDINFO_NONE と同じ値が設定されていなければ
ならない.
2. 構造体リファレンス
advlas では以下の構造体が定義されています.
DMatrix
定義: advlas_matop.h
機能: 行列のインデックスや値などを格納する.メンバー変数 type の設定値によって行
列の格納方式が異なる.
メンバー変数:
int type; 行列の対称性や格納方式
int ndim; 行列の次元数
int nlen; 1 次元化した行列を格納する配列 mat の大きさ
int* idx1; インデックス用配列 (詳細は 4 章を参照)
int* idx2; インデックス用配列 (詳細は 4 章を参照)
double* mat; 1 次元化された行列の値を格納する配列
5
3. 関数リファレンス
advlas では以下の関数が定義されています.
DMatrix NewDMatrix(int n, int type)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: DMatrix 変数を新規に作成する.行列形式が type,次元数が n に設定される.type
がスカイライン形式の場合は,インデックス用配列のメモリ確保も行う.
void DeleteDMatrix(DMatrix* mat)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: DMatrix 変数の内容を削除する.インデックス用配列と行列データはメモリから解
放される.
void advlas_mkindex(DomMesh dmesh, DMatrix* dmat)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 部分領域メッシュ情報 dmesh に基づいて,行列のインデックスを作成する.内部
では dmat->type に整合する関数が呼ばれる.
void advlas_assemble_elmk(double* ek, int* nop, int nd_elm, int node_dim, DMatrix dmat)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 下三角行列である要素剛性行列ekを全体剛性行列であるdmatに重ね合わせを行う.
内部で dmat.type に整合する関数が呼ばれる.
void advlas_assemble_spring_support(DomMesh dmesh, DMatrix dmat)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 部分領域メッシュ情報 dmesh に含まれる弾性ばね支持条件を全体剛性行列 dmat に
入力する.内部で dmat.type に整合する関数が呼ばれる.
6
void advlas_mkreducedindex(int solver_type, int* bcdisp_table, DMatrix gk, DMatrix* gk_inv)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,全体剛性行列 gk のインデッ
クス情報から Dirichlet 境界に関する自由度を消去した行列 gk_inv のインデックス情報を作
成する.現バージョンでは gk_inv の行列形式はスカイライン形式に自動設定される.内部
で solver_type と gk.type に整合する関数が呼ばれる.
void advlas_copy_gk2inv(int solver_type, DomMesh dmesh, int* bcdisp_table,
DMatrix gk, DMatrix gk_inv)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,全体剛性行列 gk を Dirichlet
境界に関する自由度を消去しながら行列 gk_inv に代入する.現バージョンでは gk_inv の行
列形式はスカイライン形式に自動設定される.内部で solver_type と gk.type に整合する関数
が呼ばれる.
void advlas_make_condensed_index(int solver_type, DMatrix gk, DMatrix* gk_inv,
int* gk_inv_map)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,全体剛性行列 gk のインデックス情報
から領域内部自由度に限定された行列 gk_inv のインデックス情報を作成する.現バージョ
ンでは gk_inv の行列形式はスカイライン形式に自動設定される.内部で gk.type に整合する
関数が呼ばれる.現バージョンでは solver_type には対応していない.
void advlas_copy_condensed_matrix(int solver_type, DomMesh dmesh, int* bcdisp_table,
DMatrix gk, DMatrix gk_inv, int* gk_inv_map)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,全体剛性行列 gk を領域内部自由度に
限定された行列 gk_inv に代入する.現バージョンでは gk_inv の行列形式はスカイライン形
式に自動設定される.内部で gk.type に整合する関数が呼ばれる.現バージョンでは
solver_type には対応していない.
7
void advlas_cpmat_sky2nz(DMatrix skymat, DMatrix nzmat)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: スカイライン形式行列 skymat の行列値を非零形式行列 nzmat に代入する.Skymat
と nzmat のインデックス情報は作成済みでなくてはならない.
double advlas_get_diag_of(DMatrix dmat, int i)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 行列 dmat の対角要素(i, i)の値を返す.
void advlas_add_diag_to_vec(int ninbd, int node_dim, Inbc *inbd, DMatrix dmat, double* vec)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: インターフェース情報 inbd に基づいて,インターフェース自由度に関する行列
dmat の対角要素をベクトル vec に加算する.内部で dmat.type に整合する関数が呼ばれる.
void advlas_matmult_vec_add(DMatrix dmat, double* disp, double* reac)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 行列 dmat とベクトル disp の積の結果をベクトル reac に加算する.内部で dmat.type
に整合する関数が呼ばれる.
void advlas_ldl_decomposite(DMatrix dmat, double* work)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 行列 dmat の修正コレスキー分解を行う.work は作業用配列である.dmat.type は
スカイライン形式のみに対応している.
void advlas_ldl_solve(DMatrix dmat, double* solution)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 修正コレスキー分解された行列 dmat と右辺項ベクトル solution を用いて,前進消
去及び後退代入によって連立方程式の求解を行う.結果は solution に上書きされる.
8
void advlas_generalized_ldl_decomposite(double factor, int* bcdisp_table,
DMatrix dmat, double* work)
ソース: advlas_matop.c
ヘッダー: advlas_matop.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,行列 dmat のインターフェー
ス自由度に関する対角成分に factor から求める付加項を加算した後に,修正コレスキー分解
を行う.work は作業用配列である.dmat.type はスカイライン形式のみに対応している.dmat
が非正則行列のときに破綻することなく分解計算を行える可能性があるが,得られた結果
は一般化逆行列となるため,用途には注意が必要である.AdvSolid では BDD ソルバにおけ
る Neumann-Neumann 前処理に用いている.
void advlas_sym_skyline_mkindex(int nNodes, int nElements,
int nElmNodes, int nNdDims, int* NodeId, int* Index_ii, int* Index_ij, int* nMatLen)
ソース: advlas_sym_skyline.c
ヘッダー: advlas_sym_skyline.h
機能: メッシュ情報に基づいて,実対称スカイライン行列のインデックス Index_ii と
Index_ij を作成する.nMatLen に 1 次元化された行列用ベクトルの大きさが出力される.
void advlas_sym_skyline_assemble_elmk(double* ek, int* NodeId, int nElmNodes,
int nNdDims, int* Index_ij, double* SMat)
ソース: advlas_sym_skyline.c
ヘッダー: advlas_sym_skyline.h
機能: 下三角行列である要素剛性行列 ek を実対称スカイライン行列に重ねあわせを行う.
void advlas_sym_skyline_add_diag_to_vec_part(int ndata, int* vec_dof_t, int* mat_dof_t,
int* Index_ij, double* SMat, double* vec)
ソース: advlas_sym_skyline.c
ヘッダー: advlas_sym_skyline.h
機能: 自由度対応情報 vec_dof_t と mat_dof_t に基づいて,インターフェース自由度に関
する実対称スカイライン行列の対角要素をベクトル vec に加算する.
void advlas_sym_skyline_matmult_vec_add(int nDofs, int* Index_ii, int* Index_ij,
double* SMat, double* disp, double* reac)
ソース: advlas_sym_skyline.c
ヘッダー: advlas_sym_skyline.h
機能: 実対称スカイライン行列とベクトル disp の積の結果をベクトル reac に加算する.
9
void advlas_sym_skyline_ldl_decomposite(int nDofs, int* Index_ii, int* Index_ij,
double* SMat, double* work)
ソース: advlas_sym_skyline_ldl.c
ヘッダー: advlas_sym_skyline_ldl.h
機能: 実対称スカイライン行列の修正コレスキー分解を行う.work は作業用配列である.
void advlas_sym_skyline_ldl_solve(int nDofs, int* Index_ii, int* Index_ij,
double* SMat, double* solution)
ソース: advlas_sym_skyline_ldl.c
ヘッダー: advlas_sym_skyline_ldl.h
機能: 修正コレスキー分解された実対称スカイライン行列と右辺項ベクトルsolutionを用
いて,前進消去及び後退代入によって連立方程式の求解を行う.結果は solution に上書きさ
れる.
void advlas_sym_skyline_generalized_ldl_decomposite(double factor, int* bcdisp_table,
int nDofs, int* Index_ii, int* Index_ij, double* SMat, double* work)
ソース: advlas_sym_skyline_ldl.c
ヘッダー: advlas_sym_skyline_ldl.h
機能: 非正則行列である実対称スカイライン行列の一般化逆行列を求める.
void advlas_sym_nzmat_mkindex(int nNodes, int nElements, int nElmNodes, int nNdDims,
int* NodeId, int** _Index_ia, int** _Index_jcn, int* _nMatLen)
ソース: advlas_sym_nzmat.c
ヘッダー: advlas_sym_nzmat.h
機能: メッシュ情報に基づいて,実対称非零行列のインデックス_Index_ia と_Index_jcnij
を作成する._nMatLen に 1 次元化された行列用ベクトルの大きさが出力される.
void advlas_sym_nzmat_assemble_elmk(double* ek, int* NodeId, int nElmNodes, int nNdDims,
int* Index_ia, int* Index_jcn, double* SMat)
ソース: advlas_sym_nzmat.c
ヘッダー: advlas_sym_nzmat.h
機能: 下三角行列である要素剛性行列 ek を実対称非零行列に重ねあわせを行う.
10
void advlas_sym_nzmat_add_diag_to_vec_part(int ndata, int* vec_dof_t, int* mat_dof_t,
int* Index_ia, int* Index_jcn, double* SMat, double* vec)
ソース: advlas_sym_nzmat.c
ヘッダー: advlas_sym_nzmat.h
機能: 自由度対応情報 vec_dof_t と mat_dof_t に基づいて,インターフェース自由度に関
する実対称非零行列の対角要素をベクトル vec に加算する.
void advlas_sym_nzmat_matmult_vec_add(int nDofs, int* Index_ia, int* Index_jcn,
double* SMat, double* disp, double* reac)
ソース: advlas_sym_nzmat.c
ヘッダー: advlas_sym_nzmat.h
機能: 実対称非零行列とベクトル disp の積の結果をベクトル reac に加算する.
double advlas_sym_skyline_find_diag_max(int* bcdisp_table, int nDofs, int* Index_ij,
double* SMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,インターフェース自由度に関
する実対称スカイライン行列の対角要素から絶対値の最大値を返す.
void advlas_sym_skyline_add_factor_to_diag(double factor, int* bcdisp_table,
int nDofs, int* Index_ij, double* SMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,インターフェース自由度に関
する実対称スカイライン行列の対角要素に factor から求める付加項を加算する.
void advlas_qsort(int* element, int first, int last)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 整数配列 element の first 番目から last 番目までの要素に対して,昇順で並び替えを
行う.
11
void advlas_sym_copy_index_sky2sky_ddm(int* bcdisp_table, int nDofs, int* Index_ii,
int* InvIndex_ii, int* InvIndex_ij, int* nInvMatLen)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン形式イン
デックスからインターフェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカ
イライン形式インデックスを作成する.
void advlas_sym_copy_index_sky2sky_nobcdisp(int* bcdisp_table, int nDofs, int* Index_ii,
int* InvIndex_ii, int* InvIndex_ij, int* nInvMatLen)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン形式イン
デックスから元の Dirichlet 境界上の自由度分を消去した実対称スカイライン形式インデッ
クスを作成する.
void advlas_sym_copy_matrix_sky2sky_ddm(int* bcdisp_table, int nDofs, int* Index_ii,
int* Index_ij, double* SMat, int* InvIndex_ii, int* InvIndex_ij, double* InvSMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン行列から
インターフェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列
を作成する.
void advlas_sym_copy_matrix_sky2sky_nobcdisp(int* bcdisp_table, int nDofs, int* Index_ii,
int* Index_ij, double* SMat, int* InvIndex_ii, int* InvIndex_ij, double* InvSMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン行列から
元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列を作成する.
12
void advlas_sym_copy_index_nz2sky_ddm(int* bcdisp_table, int nDofs, int* NzIdx_ia,
int* NzIdx_jcn, int* SkyIdx_ii, int* SkyIdx_ij, int* nSMatLen)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零形式インデックス
からインターフェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカイライン
形式インデックスを作成する.
void advlas_sym_copy_index_nz2sky_nobcdisp(int* bcdisp_table, int nDofs, int* NzIdx_ia,
int* NzIdx_jcn, int* SkyIdx_ii, int* SkyIdx_ij, int* nSMatLen)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零形式インデックス
から元の Dirichlet 境界上の自由度分を消去した実対称スカイライン形式インデックスを作
成する.
void advlas_sym_copy_matrix_nz2sky_ddm(int* bcdisp_table, int nDofs, int* NzIdx_ia,
int* NzIdx_jcn, double* NzMat, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零行列からインター
フェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列を作成す
る.
void advlas_sym_copy_matrix_nz2sky_nobcdisp(int* bcdisp_table, int nDofs, int* NzIdx_ia,
int* NzIdx_jcn, double* NzMat, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零行列から元の
Dirichlet 境界上の自由度分を消去した実対称スカイライン行列を作成する.
void advlas_sym_copy_index_sky2sky_condensed_ddm(int nDofs, int* Index_ii, int inv_nDofs,
int* inv_dofs_map, int* InvIndex_ii, int* InvIndex_ij, int* nInvMatLen)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称スカイライン形式インデック
13
スから領域内部自由度に限定された実対称スカイライン形式インデックスを作成する.
void advlas_sym_copy_matrix_sky2sky_condensed_ddm(int* bcdisp_table, int nDofs,
int* Index_ii, int* Index_ij, double* SMat, int inv_nDofs, int* inv_dofs_map,
int* InvIndex_ii, int* InvIndex_ij, double* InvSMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称スカイライン行列から領域内
部自由度に限定された実対称スカイライン行列を作成する.
void advlas_sym_copy_matrix_sky2sky_condensed_nobcdisp(int* bcdisp_table, int nDofs,
int* Index_ii, int* Index_ij, double* SMat, int inv_nDofs, int* inv_dofs_map,
int* InvIndex_ii, int* InvIndex_ij, double* InvSMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称スカイライン行列から領域内
部自由度とインタフェース自由度に限定された実対称スカイライン行列を作成する.
void advlas_sym_copy_index_nz2sky_condensed_ddm(int nDofs, int* NzIdx_ia,
int* NzIdx_jcn, int inv_nDofs, int* inv_dofs_map, int* SkyIdx_ii, int* SkyIdx_ij,
int* nSMatLen)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称非零形式インデックスから領
域内部自由度に限定された実対称スカイライン形式インデックスを作成する.
void advlas_sym_copy_matrix_nz2sky_condensed_ddm(int* bcdisp_table, int nDofs,
int* NzIdx_ia, int* NzIdx_jcn, double* NzMat, int inv_nDofs, int* inv_dofs_map,
int* SkyIdx_ii, int* SkyIdx_ij, double* SMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称非零行列から領域内部自由度
に限定された実対称スカイライン行列を作成する.
14
void advlas_sym_copy_matrix_nz2sky_condensed_nobcdisp(int* bcdisp_table, int nDofs,
int* NzIdx_ia, int* NzIdx_jcn, double* NzMat, int inv_nDofs, int* inv_dofs_map,
int* SkyIdx_ii, int* SkyIdx_ij, double* SMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称非零行列から領域内部自由度
とインタフェース自由度に限定された実対称スカイライン行列を作成する.
void advlas_sym_copy_matrix_sky2nz(int nDofs, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat,
int* NzIdx_ia, int* NzIdx_jcn, double* NzMat)
ソース: advlas_util.c
ヘッダー: advlas_util.h
機能: 実対称スカイライン行列の値を実対称非零行列に代入する.
4. 行列の格納方式
4.1 スカイライン形式
4.1.1 実対称行列
ここでは,実対称行列向けのスカイライン記憶について述べる.次の実対称行列を考え
る.
⎟
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎜
⎝
⎛
908
76
504
32
1
実対称スカイライン形式では,下三角行列における,各行の最初に非零要素が出現する
列番号を記憶するインデックスと,1 次元化された行列を格納する配列 mat において各行の
開始位置を記憶するインデックスを作成する.行列の値は,各行の最初の非零要素から対
角要素までを記憶する.このとき,ある程度の零要素を記憶する可能性があるが,例えば
修正コレスキー分解を行うときにフィルインが発生する可能性がある範囲を全て含むこと
になるため,インデックスの修正が必要にならないという利点がある.
上記例の行列を格納するとき,各メンバー変数は以下の通りとなる.
type: MATRIX_SKYLINE_SYMMETRIC
ndim: 5
idx1: int×(ndim+1),{ }22000
idx2: int×(ndim+1),{ }64310
15
nlen: idx2[ndim-1]+ndim,11
mat: double×nlen,{ }90876504321
4.1.2 実非対称行列
実装されていません.
4.2 非零形式
4.2.1 実対称行列
ここでは,実対称行列向けの非零記憶について述べる.次の実対称行列を考える.
⎟
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎜
⎝
⎛
908
76
504
32
1
実対称非零形式では,下三角行列における,各行における直前行までの非零要素数の総
和を記憶するインデックスと,各行の非零要素が出現する列番号を全て記憶する 1 次元イ
ンデックスを作成する.行列の値は,非零要素のみを記憶する.このとき,ある程度の零
要素を記憶する可能性があるが,例えば修正コレスキー分解を行うときにフィルインが発
生する可能性がある範囲を全て含むことになるため,インデックスの修正が必要にならな
いという利点がある.
上記例の行列を格納するとき,各メンバー変数は以下の通りとなる.
type: MATRIX_SKYLINE_SYMMETRIC
ndim: 5
idx1: int×(ndim+1),{ }975310
idx2: int×(nlen+1),{ }423220100
nlen: idx1[ndim],9
mat: double×nlen,{ }987654321
4.2.2 実非対称行列
実装されていません.

More Related Content

More from ADVENTURE Project

LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要
ADVENTURE Project
 
LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要
ADVENTURE Project
 
ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE Project
 
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについてADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE Project
 
ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE Project
 
ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向
ADVENTURE Project
 
ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要
ADVENTURE Project
 
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
ADVENTURE Project
 
Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」
ADVENTURE Project
 
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアルADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE Project
 
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE Project
 
DecisionMaker
DecisionMakerDecisionMaker
DecisionMaker
ADVENTURE Project
 
原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 

More from ADVENTURE Project (20)

LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要
 
LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要
 
ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成
 
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについてADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
 
ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要
 
ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向
 
ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要
 
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
 
Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」
 
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアルADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
 
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
 
DecisionMaker
DecisionMakerDecisionMaker
DecisionMaker
 
原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 

ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル

  • 1. 1 ADVENTURE_Solid 線形代数関数群 advlas リファレンスマニュアル 作者: 荻野正雄, 九州大学 文書バージョン: Ver. 0.1 文書作成日: 2008 年 9 月 25 日 文書公開日: 2008 年 9 月 29 日 —A— advlas_add_diag_to_vec.....................................................................................................................7 advlas_assemble_elmk........................................................................................................................5 advlas_assemble_spring_support ......................................................................................................5 advlas_copy_condensed_matrix ........................................................................................................6 advlas_copy_gk2inv............................................................................................................................6 advlas_cpmat_sky2nz .........................................................................................................................7 advlas_generalized_ldl_decomposite.................................................................................................8 advlas_get_diag_of..............................................................................................................................7 advlas_ldl_decomposite......................................................................................................................7 advlas_ldl_solve...................................................................................................................................7 advlas_make_condensed_index .........................................................................................................6 advlas_matmult_vec_add...................................................................................................................7 advlas_mkindex...................................................................................................................................5 advlas_mkreducedindex.....................................................................................................................6 advlas_qsort.......................................................................................................................................10 advlas_sym_copy_index_nz2sky_condensed_ddm ........................................................................13 advlas_sym_copy_index_nz2sky_ddm............................................................................................12 advlas_sym_copy_index_nz2sky_nobcdisp ....................................................................................12 advlas_sym_copy_index_sky2sky_condensed_ddm.......................................................................12 advlas_sym_copy_index_sky2sky_ddm ..........................................................................................11 advlas_sym_copy_index_sky2sky_nobcdisp...................................................................................11 advlas_sym_copy_matrix_nz2sky_condensed_ddm ......................................................................13 advlas_sym_copy_matrix_nz2sky_condensed_nobcdisp...............................................................14 advlas_sym_copy_matrix_nz2sky_ddm..........................................................................................12 advlas_sym_copy_matrix_nz2sky_nobcdisp ..................................................................................12 advlas_sym_copy_matrix_sky2nz ...................................................................................................14 advlas_sym_copy_matrix_sky2sky_condensed_ddm ....................................................................13 advlas_sym_copy_matrix_sky2sky_condensed_nobcdisp.............................................................13
  • 2. 2 advlas_sym_copy_matrix_sky2sky_ddm........................................................................................11 advlas_sym_copy_matrix_sky2sky_nobcdisp ................................................................................11 advlas_sym_nzmat_add_diag_to_vec_part ....................................................................................10 advlas_sym_nzmat_assemble_elmk ..................................................................................................9 advlas_sym_nzmat_matmult_vec_add............................................................................................10 advlas_sym_nzmat_mkindex .............................................................................................................9 advlas_sym_skyline_add_diag_to_vec_part.....................................................................................8 advlas_sym_skyline_add_factor_to_diag........................................................................................10 advlas_sym_skyline_assemble_elmk.................................................................................................8 advlas_sym_skyline_find_diag_max ...............................................................................................10 advlas_sym_skyline_generalized_ldl_decomposite..........................................................................9 advlas_sym_skyline_ldl_decomposite ...............................................................................................9 advlas_sym_skyline_ldl_solve............................................................................................................9 advlas_sym_skyline_matmult_vec_add ............................................................................................8 advlas_sym_skyline_mkindex............................................................................................................8 ADVLAS_TUNED..............................................................................................................................3 —D— DDM_BDINFO_EXTERNAL ...........................................................................................................4 DDM_BDINFO_NONE......................................................................................................................4 DeleteDMatrix.....................................................................................................................................5 DMatrix ...............................................................................................................................................4 —M— MATRIX_NONZERO_ASYMMETRIC..........................................................................................3 MATRIX_NONZERO_SYMMETRIC.............................................................................................3 MATRIX_SKYLINE_ASYMMETRIC............................................................................................3 MATRIX_SKYLINE_SYMMETRIC...............................................................................................3 MATRIX_UNKNOWN ......................................................................................................................3 —N— NewDMatrix........................................................................................................................................5
  • 3. 3 1. 環境変数リファレンス advlas では以下の環境変数が設定されています. MATRIX_SKYLINE_SYMMETRIC 定義: advlas_matop.h 設定値: 1 説明: 行列形式として,実対称行列及びスカイライン記憶を表す. MATRIX_NONZERO_SYMMETRIC 定義: advlas_matop.h 設定値: 2 説明: 行列形式として,実対称行列及び非零記憶を表す. MATRIX_SKYLINE_ASYMMETRIC 定義: advlas_matop.h 設定値: 3 説明: 行列形式として,実非対称行列及びスカイライン記憶を表す. MATRIX_NONZERO_ASYMMETRIC 定義: advlas_matop.h 設定値: 4 説明: 行列形式として,実非対称行列及び非零記憶を表す. MATRIX_UNKNOWN 定義: advlas_matop.h 設定値: -1 説明: 行列形式として,正式対応してないことを表す. ADVLAS_TUNED 定義: advlas_matop.h 設定値: なし 説明: この環境変数が設定された場合,いくつかの関数がチューニングされた関数に置 き換えられる.正しい解が得られないときは,この環境変数を未定義にすることを試すと 良い.
  • 4. 4 DDM_BDINFO_EXTERNAL 定義: advlas_util.h 設定値: -1 説明: 配列 bcdisp_table において,配列の要素に対応する自由度が解析モデルの基本境界 上にある自由度であることを表す.環境変数 DOM_BDINFO_EXTERNAL と同じ値が設定さ れていなければならない. DDM_BDINFO_NONE 定義: advlas_util.h 設定値: -2 説明: 配列 bcdisp_table において,配列の要素に対応する自由度が部分領域内部にある自 由度であることを表す.環境変数 DOM_BDINFO_NONE と同じ値が設定されていなければ ならない. 2. 構造体リファレンス advlas では以下の構造体が定義されています. DMatrix 定義: advlas_matop.h 機能: 行列のインデックスや値などを格納する.メンバー変数 type の設定値によって行 列の格納方式が異なる. メンバー変数: int type; 行列の対称性や格納方式 int ndim; 行列の次元数 int nlen; 1 次元化した行列を格納する配列 mat の大きさ int* idx1; インデックス用配列 (詳細は 4 章を参照) int* idx2; インデックス用配列 (詳細は 4 章を参照) double* mat; 1 次元化された行列の値を格納する配列
  • 5. 5 3. 関数リファレンス advlas では以下の関数が定義されています. DMatrix NewDMatrix(int n, int type) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: DMatrix 変数を新規に作成する.行列形式が type,次元数が n に設定される.type がスカイライン形式の場合は,インデックス用配列のメモリ確保も行う. void DeleteDMatrix(DMatrix* mat) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: DMatrix 変数の内容を削除する.インデックス用配列と行列データはメモリから解 放される. void advlas_mkindex(DomMesh dmesh, DMatrix* dmat) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 部分領域メッシュ情報 dmesh に基づいて,行列のインデックスを作成する.内部 では dmat->type に整合する関数が呼ばれる. void advlas_assemble_elmk(double* ek, int* nop, int nd_elm, int node_dim, DMatrix dmat) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 下三角行列である要素剛性行列ekを全体剛性行列であるdmatに重ね合わせを行う. 内部で dmat.type に整合する関数が呼ばれる. void advlas_assemble_spring_support(DomMesh dmesh, DMatrix dmat) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 部分領域メッシュ情報 dmesh に含まれる弾性ばね支持条件を全体剛性行列 dmat に 入力する.内部で dmat.type に整合する関数が呼ばれる.
  • 6. 6 void advlas_mkreducedindex(int solver_type, int* bcdisp_table, DMatrix gk, DMatrix* gk_inv) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,全体剛性行列 gk のインデッ クス情報から Dirichlet 境界に関する自由度を消去した行列 gk_inv のインデックス情報を作 成する.現バージョンでは gk_inv の行列形式はスカイライン形式に自動設定される.内部 で solver_type と gk.type に整合する関数が呼ばれる. void advlas_copy_gk2inv(int solver_type, DomMesh dmesh, int* bcdisp_table, DMatrix gk, DMatrix gk_inv) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,全体剛性行列 gk を Dirichlet 境界に関する自由度を消去しながら行列 gk_inv に代入する.現バージョンでは gk_inv の行 列形式はスカイライン形式に自動設定される.内部で solver_type と gk.type に整合する関数 が呼ばれる. void advlas_make_condensed_index(int solver_type, DMatrix gk, DMatrix* gk_inv, int* gk_inv_map) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,全体剛性行列 gk のインデックス情報 から領域内部自由度に限定された行列 gk_inv のインデックス情報を作成する.現バージョ ンでは gk_inv の行列形式はスカイライン形式に自動設定される.内部で gk.type に整合する 関数が呼ばれる.現バージョンでは solver_type には対応していない. void advlas_copy_condensed_matrix(int solver_type, DomMesh dmesh, int* bcdisp_table, DMatrix gk, DMatrix gk_inv, int* gk_inv_map) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,全体剛性行列 gk を領域内部自由度に 限定された行列 gk_inv に代入する.現バージョンでは gk_inv の行列形式はスカイライン形 式に自動設定される.内部で gk.type に整合する関数が呼ばれる.現バージョンでは solver_type には対応していない.
  • 7. 7 void advlas_cpmat_sky2nz(DMatrix skymat, DMatrix nzmat) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: スカイライン形式行列 skymat の行列値を非零形式行列 nzmat に代入する.Skymat と nzmat のインデックス情報は作成済みでなくてはならない. double advlas_get_diag_of(DMatrix dmat, int i) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 行列 dmat の対角要素(i, i)の値を返す. void advlas_add_diag_to_vec(int ninbd, int node_dim, Inbc *inbd, DMatrix dmat, double* vec) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: インターフェース情報 inbd に基づいて,インターフェース自由度に関する行列 dmat の対角要素をベクトル vec に加算する.内部で dmat.type に整合する関数が呼ばれる. void advlas_matmult_vec_add(DMatrix dmat, double* disp, double* reac) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 行列 dmat とベクトル disp の積の結果をベクトル reac に加算する.内部で dmat.type に整合する関数が呼ばれる. void advlas_ldl_decomposite(DMatrix dmat, double* work) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 行列 dmat の修正コレスキー分解を行う.work は作業用配列である.dmat.type は スカイライン形式のみに対応している. void advlas_ldl_solve(DMatrix dmat, double* solution) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 修正コレスキー分解された行列 dmat と右辺項ベクトル solution を用いて,前進消 去及び後退代入によって連立方程式の求解を行う.結果は solution に上書きされる.
  • 8. 8 void advlas_generalized_ldl_decomposite(double factor, int* bcdisp_table, DMatrix dmat, double* work) ソース: advlas_matop.c ヘッダー: advlas_matop.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,行列 dmat のインターフェー ス自由度に関する対角成分に factor から求める付加項を加算した後に,修正コレスキー分解 を行う.work は作業用配列である.dmat.type はスカイライン形式のみに対応している.dmat が非正則行列のときに破綻することなく分解計算を行える可能性があるが,得られた結果 は一般化逆行列となるため,用途には注意が必要である.AdvSolid では BDD ソルバにおけ る Neumann-Neumann 前処理に用いている. void advlas_sym_skyline_mkindex(int nNodes, int nElements, int nElmNodes, int nNdDims, int* NodeId, int* Index_ii, int* Index_ij, int* nMatLen) ソース: advlas_sym_skyline.c ヘッダー: advlas_sym_skyline.h 機能: メッシュ情報に基づいて,実対称スカイライン行列のインデックス Index_ii と Index_ij を作成する.nMatLen に 1 次元化された行列用ベクトルの大きさが出力される. void advlas_sym_skyline_assemble_elmk(double* ek, int* NodeId, int nElmNodes, int nNdDims, int* Index_ij, double* SMat) ソース: advlas_sym_skyline.c ヘッダー: advlas_sym_skyline.h 機能: 下三角行列である要素剛性行列 ek を実対称スカイライン行列に重ねあわせを行う. void advlas_sym_skyline_add_diag_to_vec_part(int ndata, int* vec_dof_t, int* mat_dof_t, int* Index_ij, double* SMat, double* vec) ソース: advlas_sym_skyline.c ヘッダー: advlas_sym_skyline.h 機能: 自由度対応情報 vec_dof_t と mat_dof_t に基づいて,インターフェース自由度に関 する実対称スカイライン行列の対角要素をベクトル vec に加算する. void advlas_sym_skyline_matmult_vec_add(int nDofs, int* Index_ii, int* Index_ij, double* SMat, double* disp, double* reac) ソース: advlas_sym_skyline.c ヘッダー: advlas_sym_skyline.h 機能: 実対称スカイライン行列とベクトル disp の積の結果をベクトル reac に加算する.
  • 9. 9 void advlas_sym_skyline_ldl_decomposite(int nDofs, int* Index_ii, int* Index_ij, double* SMat, double* work) ソース: advlas_sym_skyline_ldl.c ヘッダー: advlas_sym_skyline_ldl.h 機能: 実対称スカイライン行列の修正コレスキー分解を行う.work は作業用配列である. void advlas_sym_skyline_ldl_solve(int nDofs, int* Index_ii, int* Index_ij, double* SMat, double* solution) ソース: advlas_sym_skyline_ldl.c ヘッダー: advlas_sym_skyline_ldl.h 機能: 修正コレスキー分解された実対称スカイライン行列と右辺項ベクトルsolutionを用 いて,前進消去及び後退代入によって連立方程式の求解を行う.結果は solution に上書きさ れる. void advlas_sym_skyline_generalized_ldl_decomposite(double factor, int* bcdisp_table, int nDofs, int* Index_ii, int* Index_ij, double* SMat, double* work) ソース: advlas_sym_skyline_ldl.c ヘッダー: advlas_sym_skyline_ldl.h 機能: 非正則行列である実対称スカイライン行列の一般化逆行列を求める. void advlas_sym_nzmat_mkindex(int nNodes, int nElements, int nElmNodes, int nNdDims, int* NodeId, int** _Index_ia, int** _Index_jcn, int* _nMatLen) ソース: advlas_sym_nzmat.c ヘッダー: advlas_sym_nzmat.h 機能: メッシュ情報に基づいて,実対称非零行列のインデックス_Index_ia と_Index_jcnij を作成する._nMatLen に 1 次元化された行列用ベクトルの大きさが出力される. void advlas_sym_nzmat_assemble_elmk(double* ek, int* NodeId, int nElmNodes, int nNdDims, int* Index_ia, int* Index_jcn, double* SMat) ソース: advlas_sym_nzmat.c ヘッダー: advlas_sym_nzmat.h 機能: 下三角行列である要素剛性行列 ek を実対称非零行列に重ねあわせを行う.
  • 10. 10 void advlas_sym_nzmat_add_diag_to_vec_part(int ndata, int* vec_dof_t, int* mat_dof_t, int* Index_ia, int* Index_jcn, double* SMat, double* vec) ソース: advlas_sym_nzmat.c ヘッダー: advlas_sym_nzmat.h 機能: 自由度対応情報 vec_dof_t と mat_dof_t に基づいて,インターフェース自由度に関 する実対称非零行列の対角要素をベクトル vec に加算する. void advlas_sym_nzmat_matmult_vec_add(int nDofs, int* Index_ia, int* Index_jcn, double* SMat, double* disp, double* reac) ソース: advlas_sym_nzmat.c ヘッダー: advlas_sym_nzmat.h 機能: 実対称非零行列とベクトル disp の積の結果をベクトル reac に加算する. double advlas_sym_skyline_find_diag_max(int* bcdisp_table, int nDofs, int* Index_ij, double* SMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,インターフェース自由度に関 する実対称スカイライン行列の対角要素から絶対値の最大値を返す. void advlas_sym_skyline_add_factor_to_diag(double factor, int* bcdisp_table, int nDofs, int* Index_ij, double* SMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,インターフェース自由度に関 する実対称スカイライン行列の対角要素に factor から求める付加項を加算する. void advlas_qsort(int* element, int first, int last) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 整数配列 element の first 番目から last 番目までの要素に対して,昇順で並び替えを 行う.
  • 11. 11 void advlas_sym_copy_index_sky2sky_ddm(int* bcdisp_table, int nDofs, int* Index_ii, int* InvIndex_ii, int* InvIndex_ij, int* nInvMatLen) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン形式イン デックスからインターフェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカ イライン形式インデックスを作成する. void advlas_sym_copy_index_sky2sky_nobcdisp(int* bcdisp_table, int nDofs, int* Index_ii, int* InvIndex_ii, int* InvIndex_ij, int* nInvMatLen) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン形式イン デックスから元の Dirichlet 境界上の自由度分を消去した実対称スカイライン形式インデッ クスを作成する. void advlas_sym_copy_matrix_sky2sky_ddm(int* bcdisp_table, int nDofs, int* Index_ii, int* Index_ij, double* SMat, int* InvIndex_ii, int* InvIndex_ij, double* InvSMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン行列から インターフェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列 を作成する. void advlas_sym_copy_matrix_sky2sky_nobcdisp(int* bcdisp_table, int nDofs, int* Index_ii, int* Index_ij, double* SMat, int* InvIndex_ii, int* InvIndex_ij, double* InvSMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称スカイライン行列から 元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列を作成する.
  • 12. 12 void advlas_sym_copy_index_nz2sky_ddm(int* bcdisp_table, int nDofs, int* NzIdx_ia, int* NzIdx_jcn, int* SkyIdx_ii, int* SkyIdx_ij, int* nSMatLen) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零形式インデックス からインターフェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカイライン 形式インデックスを作成する. void advlas_sym_copy_index_nz2sky_nobcdisp(int* bcdisp_table, int nDofs, int* NzIdx_ia, int* NzIdx_jcn, int* SkyIdx_ii, int* SkyIdx_ij, int* nSMatLen) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零形式インデックス から元の Dirichlet 境界上の自由度分を消去した実対称スカイライン形式インデックスを作 成する. void advlas_sym_copy_matrix_nz2sky_ddm(int* bcdisp_table, int nDofs, int* NzIdx_ia, int* NzIdx_jcn, double* NzMat, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零行列からインター フェース上と元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列を作成す る. void advlas_sym_copy_matrix_nz2sky_nobcdisp(int* bcdisp_table, int nDofs, int* NzIdx_ia, int* NzIdx_jcn, double* NzMat, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度の Dirichlet 境界情報 bcdisp_table に基づいて,実対称非零行列から元の Dirichlet 境界上の自由度分を消去した実対称スカイライン行列を作成する. void advlas_sym_copy_index_sky2sky_condensed_ddm(int nDofs, int* Index_ii, int inv_nDofs, int* inv_dofs_map, int* InvIndex_ii, int* InvIndex_ij, int* nInvMatLen) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称スカイライン形式インデック
  • 13. 13 スから領域内部自由度に限定された実対称スカイライン形式インデックスを作成する. void advlas_sym_copy_matrix_sky2sky_condensed_ddm(int* bcdisp_table, int nDofs, int* Index_ii, int* Index_ij, double* SMat, int inv_nDofs, int* inv_dofs_map, int* InvIndex_ii, int* InvIndex_ij, double* InvSMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称スカイライン行列から領域内 部自由度に限定された実対称スカイライン行列を作成する. void advlas_sym_copy_matrix_sky2sky_condensed_nobcdisp(int* bcdisp_table, int nDofs, int* Index_ii, int* Index_ij, double* SMat, int inv_nDofs, int* inv_dofs_map, int* InvIndex_ii, int* InvIndex_ij, double* InvSMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称スカイライン行列から領域内 部自由度とインタフェース自由度に限定された実対称スカイライン行列を作成する. void advlas_sym_copy_index_nz2sky_condensed_ddm(int nDofs, int* NzIdx_ia, int* NzIdx_jcn, int inv_nDofs, int* inv_dofs_map, int* SkyIdx_ii, int* SkyIdx_ij, int* nSMatLen) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称非零形式インデックスから領 域内部自由度に限定された実対称スカイライン形式インデックスを作成する. void advlas_sym_copy_matrix_nz2sky_condensed_ddm(int* bcdisp_table, int nDofs, int* NzIdx_ia, int* NzIdx_jcn, double* NzMat, int inv_nDofs, int* inv_dofs_map, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称非零行列から領域内部自由度 に限定された実対称スカイライン行列を作成する.
  • 14. 14 void advlas_sym_copy_matrix_nz2sky_condensed_nobcdisp(int* bcdisp_table, int nDofs, int* NzIdx_ia, int* NzIdx_jcn, double* NzMat, int inv_nDofs, int* inv_dofs_map, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 自由度 ID 変換情報 gk_inv_map に基づいて,実対称非零行列から領域内部自由度 とインタフェース自由度に限定された実対称スカイライン行列を作成する. void advlas_sym_copy_matrix_sky2nz(int nDofs, int* SkyIdx_ii, int* SkyIdx_ij, double* SMat, int* NzIdx_ia, int* NzIdx_jcn, double* NzMat) ソース: advlas_util.c ヘッダー: advlas_util.h 機能: 実対称スカイライン行列の値を実対称非零行列に代入する. 4. 行列の格納方式 4.1 スカイライン形式 4.1.1 実対称行列 ここでは,実対称行列向けのスカイライン記憶について述べる.次の実対称行列を考え る. ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 908 76 504 32 1 実対称スカイライン形式では,下三角行列における,各行の最初に非零要素が出現する 列番号を記憶するインデックスと,1 次元化された行列を格納する配列 mat において各行の 開始位置を記憶するインデックスを作成する.行列の値は,各行の最初の非零要素から対 角要素までを記憶する.このとき,ある程度の零要素を記憶する可能性があるが,例えば 修正コレスキー分解を行うときにフィルインが発生する可能性がある範囲を全て含むこと になるため,インデックスの修正が必要にならないという利点がある. 上記例の行列を格納するとき,各メンバー変数は以下の通りとなる. type: MATRIX_SKYLINE_SYMMETRIC ndim: 5 idx1: int×(ndim+1),{ }22000 idx2: int×(ndim+1),{ }64310
  • 15. 15 nlen: idx2[ndim-1]+ndim,11 mat: double×nlen,{ }90876504321 4.1.2 実非対称行列 実装されていません. 4.2 非零形式 4.2.1 実対称行列 ここでは,実対称行列向けの非零記憶について述べる.次の実対称行列を考える. ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ ⎛ 908 76 504 32 1 実対称非零形式では,下三角行列における,各行における直前行までの非零要素数の総 和を記憶するインデックスと,各行の非零要素が出現する列番号を全て記憶する 1 次元イ ンデックスを作成する.行列の値は,非零要素のみを記憶する.このとき,ある程度の零 要素を記憶する可能性があるが,例えば修正コレスキー分解を行うときにフィルインが発 生する可能性がある範囲を全て含むことになるため,インデックスの修正が必要にならな いという利点がある. 上記例の行列を格納するとき,各メンバー変数は以下の通りとなる. type: MATRIX_SKYLINE_SYMMETRIC ndim: 5 idx1: int×(ndim+1),{ }975310 idx2: int×(nlen+1),{ }423220100 nlen: idx1[ndim],9 mat: double×nlen,{ }987654321 4.2.2 実非対称行列 実装されていません.