Skip to content

This is a conjugate gradient method program for solving simultaneous linear equations.

License

Notifications You must be signed in to change notification settings

KEMSHlM/CRS_CGsolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CRS_CGsolver

This is a conjugate gradient method program for solving simultaneous linear equations.

1. 概要

流体解析(CFD)や構造解析(CAE)で解くべき行列は,大規模かつ疎(スパース)である.そこでCRS(CSR)形式でデータを格納することでメモリ消費を節約できる.CRS形式の行列は,その特殊なデータ格納形態から行列の演算が複雑になる.そこで,本プログラムではCRS形式の行列の基本演算に加え,不完全LU分解(ILU(0))と不完全コレスキー分解(IC(0))の前処理行列生成を実装した.これら基本演算と前処理行列を組み合わせることで,共役勾配法を構築することが可能である.
使用可能な関数の説明は,各ヘッダーファイルに記載している.

URL : CRSについて
URL : 不完全コレスキー分解
URL : 不完全LU分解

2. コンパイル

コンパイルには,Makefileを用いる.Makefileには,デバッグ,リリース,並列のオプションを実装した.

3. テストプログラム

テストプログラムに,Bi-CGstab法を実装した.従来のCG法は,正定値対称行列のみ適用可能であった.そこで,広い適用範囲と,より強固に収束する性質を持つBi-CGstab法が開発された.
テストプログラムは,前処理行列に不完全コレスキー分解を用いたIC0_bicgstab.cと前処理行列に不完全LU分解を用いたILU0_bicgstab.cの二つを用意した.使い分けには,Makefile$(MAIN)を変更してほしい. どちらも初期設定では,二次元の楕円方程式(ex. 二次元平板の熱伝導方程式)を解くことを仮定している.

URL : Bi-CGstab法

4. 今後の実装について

本プログラムは,流体解析に用いるために開発した.今後は,fillinを考慮した前処理行列や,不完全LU分解や不完全コレスキー分解の並列化を実装したく思う.

About

This is a conjugate gradient method program for solving simultaneous linear equations.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published