More Related Content
PDF
Citrix XenServer ® 5.6 Service Pack 2 管理者ガイド PDF
PostgreSQL 12 Beta 1 New Features with Examples (Japanese) PDF
PDF
PDF
LexADV_TryDDM Ver. 0.1bの概要 PDF
ADVENTURE_Mates Ver. 0.5bの概要 PDF
ADVENTUREの他のモジュール・関連プロジェクトの紹介 PPTX
ADVENTURE_Mates Ver.0.5b データ生成 More from ADVENTURE Project
PDF
ADVENTURE_MATES専用ビューア AdvMatesViewerについて PDF
ADVENTURE_Magnetic Ver.1.5.0の概要 PDF
PDF
ADVENTURE_Solid Ver.2.0の概要 PPT
ADVENTURE_BCtool Ver.2.の概要と実際[デモ] PDF
ADVENTUREの他のモジュール・関連プロジェクトの紹介 PDF
大規模並列解析用可視化モジュール ADVENTURE_POSTtool PPT
Linuxにおけるコマンドとエディタの使用方法の紹介 PDF
ADVENTUREの他のモジュール・関連プロジェクトの紹介 PPT
PDF
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル PPT
ADVENTURE_Solid Ver.1.2の概要 PPT
PDF
PDF
ADVENTUREの他のモジュール・関連プロジェクトの紹介 PDF
ADVENTURE_Magnetic Ver.1.3の解説 PDF
PPT
Stationary Incompressible Viscous Flow Analysis by a Domain Decomposition Method PPT
PDF
ADVENTURE_Solid-1.1 構造体リファレンス 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 では以下の関数が定義されています.
DMatrixNewDMatrix(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 実非対称行列
実装されていません.