This is a conjugate gradient method program for solving simultaneous linear equations.
流体解析(CFD)や構造解析(CAE)で解くべき行列は,大規模かつ疎(スパース)である.そこでCRS(CSR)形式でデータを格納することでメモリ消費を節約できる.CRS形式の行列は,その特殊なデータ格納形態から行列の演算が複雑になる.そこで,本プログラムではCRS形式の行列の基本演算に加え,不完全LU分解(ILU(0))と不完全コレスキー分解(IC(0))の前処理行列生成を実装した.これら基本演算と前処理行列を組み合わせることで,共役勾配法を構築することが可能である.
使用可能な関数の説明は,各ヘッダーファイルに記載している.
コンパイルには,Makefileを用いる.Makefileには,デバッグ,リリース,並列のオプションを実装した.
テストプログラムに,Bi-CGstab法を実装した.従来のCG法は,正定値対称行列のみ適用可能であった.そこで,広い適用範囲と,より強固に収束する性質を持つBi-CGstab法が開発された.
テストプログラムは,前処理行列に不完全コレスキー分解を用いたIC0_bicgstab.cと前処理行列に不完全LU分解を用いたILU0_bicgstab.cの二つを用意した.使い分けには,Makefile の$(MAIN)
を変更してほしい.
どちらも初期設定では,二次元の楕円方程式(ex. 二次元平板の熱伝導方程式)を解くことを仮定している.
本プログラムは,流体解析に用いるために開発した.今後は,fillinを考慮した前処理行列や,不完全LU分解や不完全コレスキー分解の並列化を実装したく思う.