OpenFOAMにおいて代数方程式を解く際のpreconditioningについて

64 views
Skip to first unread message

さめの

unread,
Mar 20, 2022, 10:44:59 PMMar 20
to OpenFOAM
初めまして

大学でOpenFOAMを用いて研究を行っているものです。

OpenFOAMの代数方程式のソルバー、前処理を勉強しています。

OpenFOAMでは
  • 対角ベース不完全 Cholesky 分解
  • 対角ベース不完全 LU 分解
等が使用されていると思います。

この "対角ベース" とはどういう意味でしょうか。
コレスキー分解、修正コレスキー分解、不完全コレスキー分解は調べると出てくるのですが、対角ベースという言葉を見つけることが出来ません。
OpenFOAMのみで利用されているように思います。

対角ベースとはどのような手法なのか、お教え頂ければ幸いです。
お忙しいところ恐縮ですが、ご確認よろしくお願い申し上げます。

moritam51

unread,
Mar 24, 2022, 4:06:53 PMMar 24
to OpenFOAM
moritam51です。
あまり詳しくないのですが、興味があったので以下の本をみてみました。

F.Moukalled, L.Mangani, M. Darwish
The Finite Volume Method in Computational Fluid Dynamics  (Springer)

Ax=bという行列計算を解く場合に、次のように何らかの行列Pの逆行列P-1を
オペレートして前処理をすると効率的にとける場合があります。答えは同じです。

P-1Ax=P-1b

Pの形はいろいろ提案されていますが、

Aを不完全LU分解して次のように記述します。
A=LU+R

L’はLの近似された下三角行列、L’Tは転置下三角行列とすると

P=L’L’T
は不完全LU分解ILUです。

そこで対角ILU分解(DILU)ですが、以下の前処理のことのようです。

P=(D*+L)D*-1(D*+U)

0でない要素を対角行列D*に集めることで、ストレージを節約できるようです。
Pommerellという人が導入したそうです。

対角ベースはこのD*に由来していると思います。
認識が間違っているかもしれませんが、よろしくお願いします。


2022年3月21日月曜日 11:44:59 UTC+9 さめの:

さめの

unread,
Apr 11, 2022, 2:57:31 AMApr 11
to OpenFOAM

moritam51様

ご回答ありがとうございます。
返信が遅くなり、申し訳ございません。

このようなことが行われていたのですね。
どこを探しても見当たらなかったので、非常に助かりました。

私もそちらの本を読んでみたいと思います。

今後とも宜しくお願い申し上げます。
2022年3月25日金曜日 5:06:53 UTC+9 moritam51:
Reply all
Reply to author
Forward
0 new messages