lduMatrix : 係数行列の格納と参照方法

解くべき偏微分方程式は,次のような代数方程式に離散化される.

A_{ii} \phi_i + \sum_j A_{ij} \phi_j = s_i

A_{ij} : 係数行列の ij 成分,€\phi_{i} : 未知ベクトルの第 i 成分,s_{i} : 既知ベクトルの第 i 成分

未知数の次元をNとすると,A_{ij}N×Nの行列になる.

A_{ij}は,j番のcellがi番のcellに及ぼす影響の大きさを表す係数であるため,隣り合うcell以外の組み合わせでは0となる.

したがって,A_{ij}のほとんどは0となる.

この係数を効率良く管理しているのが,lduMatrixクラスである.

lduMatrixクラスの特徴

1. 係数行列は,上三角行列(upper),下三角行列(lower),対角成分(diag)に分けて格納している

2. upper, lowerはface番号で,diagはcell番号でindexingされている

3. upper, lowerのindex(face番号)から,対応するcell番号を見つけるためのlduAdrresingを用いている

係数の格納方法

1. 注目するfaceを決める

2. 注目したfaceのowner cellとneighbour cellを決める (cell番号が多き方がowner cellとなる)

3. owed cellの係数は下三角行列に,neighbour cellの係数は上三角行列に格納する

例として,下図の赤線で示されたfaceを考える.owner cellは,5番, neighbour cellは2番のcellとなる.

2番のcellに対する5番のcellの影響を表すA_{25}青丸の場所に,5番のcellに対する2番のcellの影響を表すA_{52}は,緑丸の場所に格納される.

Coefficient Matrix

係数の参照方法

Reference

OpenFOAM Wiki:

Matrix coefficients

lduAddressing

Source code:

lduMatrix.H

lduMatrix.C

lduAddressing.H

lduAddressing.C

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

Thank you for comment!