#前提
- VirtualBoxとDEXCSを使ってOpenFOAMを実行していること。(それ以外の環境でも、多少読み替えれば以下を理解できなくもないが、初心者にはお勧めしない。それよりも、自分と同じ環境の人が作った解説ページを探すか、あるいはVirtualBoxとDEXCSを使ってOpenFOAMをインストールしなおすのがよいと思う。)
- 前節の「OpenFOAMのチュートリアル実施」を読んだか、またはOpenFOAMのチュートリアルの実行の仕方が分かること。
#まずはチュートリアルをそのまま実施
チュートリアルの「porousBlockage」を例に説明する。以下の命令は、(1) チュートリアルからporousBlockageフォルダをコピーし、(2) コピーしたporousBlockageフォルダの中に入り、(3) Allrunを実行し、(4) 結果を表示する、というもの。
run
cp -r $FOAM_TUTORIALS/incompressible/pisoFoam/laminar/porousBlockage .
cd porousBlockage
./Allrun
paraFoam
paraViewの画面になってから、Play(再生)ボタンを押すと、結果がアニメーション表示される。Time=60ぐらいでカルマン渦っぽいものが発生する。
確認出来たら、一度paraViewを終了する。つまり、paraView画面右上のクローズボタン(赤い×ボタン)をクリックする。)
#流路形状の小変更
まずは流路(周囲の形)を変える。この流路は、平面に見えるが、実際には薄い板である。つまり、8つの頂点がある。
上の図を見てわかるように、点0が、原点になっている。点6が原点から最も遠い。点6と、点6の下(xy平面の反対側)にある点2のX座標を、すこし増やしてみる。なお、上の図は、見やすいように実際より少し厚みを増やしてあります。
この座標の定義は、porousBlockageフォルダの中のsystemフォルダの中にある、blockMeshDictというファイルに書かれている。このファイルを編集するには、xdg-openというコマンドを使用する。
xdg-open system/blockMeshDict
開いたファイルの最初にvertics、blocksと書かれた箇所があり、これが流路の形状を表している。
verticsが、頂点の座標を意味する。一番上の(-2, -2, -0.1)が点0の座標、次の行の(6, -2, -0.1)が点1の座標である。以下、点2, 点3...と続き、最後が点7である。番号が0から始まることを覚えておくこと。blocksで、頂点同士のつながり(つまり立体形状)を定義しているが、今回はこれは変更しない。
前述したとおり、点2と点6の座標を変えてみる。点2の座標は、このファイルであれば23行目の(6, 2, -0.1)である。これを(7, 2, -0.1)に変える。点6の座標は、このファイルであれば27行目の(6, 2, 0.1)である。これを(7, 2, 0.1)に変える。ファイルを閉じてSaveする。その後に再びAllrunを実行する。
rm log*
./Allrun
paraFoam
最初の行の「rm log*」は、前回の実行結果の記録の削除コマンド。前回の記録が残っている場合は、削除しないとAllrunをした時にエラーになる。(チュートリアルによってはlogファイルを削除するだけでは不十分だが、porousBlockageの場合はlogを削除すれば大体問題ないと思う。)
paraFoamの結果は次の通り。
点2と6の座標が変わっていることが分かる。アニメーションで流れの変化を見てみると、元とは少し変わっており、左右対称形状でなくなっているためか、渦ができる時間が早くなる。
なお、OpenFOAMの全ての流路がblockMeshDictで定義されているわけではない。チュートリアルにblockMeshDictファイルがあっても、実際の流路は別のファイルで定義されている場合もある。単純な形状のチュートリアルは、blockMeshDictだけで定義されている場合が多い。
blockMeshDictの定義を大きく変えることで、もっと複雑な流路を作ることもできるが、少し話がややこしくなるので、これは少し後に説明する(予定)。
#初速の変更
(前の節でblockMeshDictを書き換えた場合は元に戻しておく)
初期条件の多くは「0」フォルダに保管されている。チュートリアル「porousBlockage」の場合は、「p」と「U」のファイルで定義されている。まずは初速を変えてみる。
xdg-open 0/U
入口の流速は「type fixedValue;」(27行目)、つまり時間が経っても変化しないと定義されている。この定義を変えて、例えば流速をだんだん早することもできるが、これをいじるのはもう少し勉強してからがよい。(定義を1か所だけ変えても大抵うまくいかないから。)まずは値だけを変えてみよう。値は、次の行「value $internalField;」となっている。この$internalFieldというのは、19行目で「internalField uniform (1 0 0);」と定義されている。(1 0 0)の値はx, y, z方向の速度を意味している。上のグラフでは、x軸が水平方向、y軸が上下方向になっているので、(1 0 0)だと水は右方向に流入することを意味する。これを(1 1 0)に変えたら、右上へ流入することになる。次の図で示す(色だけでは分からないので流線も加えている)。
この値を(2 0 0)にしたら、元の(1 0 0)と向きは同じだが倍速で流れることになる。この値を(0.5 0 0)にしたら、元よりも低速で流れることになる。なお、(2 0 0)に変えても、(0.5 0 0)に変えても、Time=100までの間に明瞭な渦は発生しなくなる。
#次のステップ
頂点の数を増やして、流路の形を変える方法を説明する(予定)