fvMatrixにおける境界条件の取り扱い

fvMatrixの係数行列とソース項に境界条件が反映されるのはsolverの実行中に限られる.

lduMatrix::solverを継承せずに,lduMatrix.Amulを利用したソルバを書こうとして,はまった自分への戒めとして赤字で記載しました.

百聞は一見にしかずということで,実験結果を示します.

x, y方向に3分割,z方向に1分割した領域で,Vに関するlaplace方程式を解くことを考えます.

境界条件は,y=0の面をV=0,y=1の面をV=1,それ以外の面は絶縁条件としました.

main関数

ソルバコード (PCG.*をkPCG.*としてコピーして,kPCG.C内のsolve関数内に以下の2行を追記しました)

実行結果

source@BEFORE
9(0 0 0 0 -2.77556e-16 0 -3.33067e-15 1.94289e-15 1.66533e-15)

source@solve
9(0 0 0 0 -2.77556e-16 0 -10 -10 -10)
DICkPCG: Solving for V, Initial residual = 1, Final residual = 2.17915e-07, No Iterations 5

source@AFTER
9(0 0 0 0 -2.77556e-16 0 -3.33067e-15 1.94289e-15 1.66533e-15)

この結果から次のことが分かります.

・fvm::laplacianでfvMatrixを生成しただけでは,境界条件は反映されない.

・solverを実行中に,source項に境界条件が反映される.

・solverを抜けると,source項に境界条件が反映されなくなる.

 

ソースコードを追っていくともう少し具体的に分かりますが,それは,次の機会に.

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

Thank you for comment!