Help us understand the problem. What is going on with this article?

OpenFOAMのチュートリアル改変1 - 流路の小変更、初速の変更

前提

  • VirtualBoxとDEXCSを使ってOpenFOAMを実行していること。(それ以外の環境でも、多少読み替えれば以下を理解できなくもないが、初心者にはお勧めしない。それよりも、自分と同じ環境の人が作った解説ページを探すか、あるいはVirtualBoxとDEXCSを使ってOpenFOAMをインストールしなおすのがよいと思う。)
  • 前節の「OpenFOAMのチュートリアル実施」を読んだか、またはOpenFOAMのチュートリアルの実行の仕方が分かること。

まずはチュートリアルをそのまま実施

チュートリアルの「porousBlockage」を例に説明する。以下の命令は、(1) チュートリアルからporousBlockageフォルダをコピーし、(2) コピーしたporousBlockageフォルダの中に入り、(3) Allrunを実行し、(4) 結果を表示する、というもの。

チュートリアルporousBlockageをそのまま実施
run
cp -r $FOAM_TUTORIALS/incompressible/pisoFoam/laminar/porousBlockage .
cd porousBlockage
./Allrun
paraFoam

paraViewの画面になってから、Play(再生)ボタンを押すと、結果がアニメーション表示される。Time=60ぐらいでカルマン渦っぽいものが発生する。
無題4.png

確認出来たら、一度paraViewを終了する。つまり、paraView画面右上のクローズボタン(赤い×ボタン)をクリックする。)

流路形状の小変更

まずは流路(周囲の形)を変える。この流路は、平面に見えるが、実際には薄い板である。つまり、8つの頂点がある。
無題10.png
上の図を見てわかるように、点0が、原点になっている。点6が原点から最も遠い。点6と、点6の下(xy平面の反対側)にある点2のX座標を、すこし増やしてみる。なお、上の図は、見やすいように実際より少し厚みを増やしてあります。

この座標の定義は、porousBlockageフォルダの中のsystemフォルダの中にある、blockMeshDictというファイルに書かれている。このファイルを編集するには、xdg-openというコマンドを使用する。

blockMeshDictの編集
xdg-open system/blockMeshDict

開いたファイルの最初にvertics、blocksと書かれた箇所があり、これが流路の形状を表している。
無題11.png
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の結果は次の通り。
無題12.png
点2と6の座標が変わっていることが分かる。アニメーションで流れの変化を見てみると、元とは少し変わっており、左右対称形状でなくなっているためか、渦ができる時間が早くなる。

なお、OpenFOAMの全ての流路がblockMeshDictで定義されているわけではない。チュートリアルにblockMeshDictファイルがあっても、実際の流路は別のファイルで定義されている場合もある。単純な形状のチュートリアルは、blockMeshDictだけで定義されている場合が多い。

blockMeshDictの定義を大きく変えることで、もっと複雑な流路を作ることもできるが、少し話がややこしくなるので、これは少し後に説明する(予定)。

初速の変更

(前の節でblockMeshDictを書き換えた場合は元に戻しておく)

初期条件の多くは「0」フォルダに保管されている。チュートリアル「porousBlockage」の場合は、「p」と「U」のファイルで定義されている。まずは初速を変えてみる。

0/Uの編集
xdg-open 0/U

無題13.png
上のファイルで「inlet」で定義されているのが入口の流速である。なお、「inlet」が「入口」であることは別のファイル(porousBlockageの場合は先ほどのblockMeshDict)で定義されている。

入口の流速は「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)に変えたら、右上へ流入することになる。次の図で示す(色だけでは分からないので流線も加えている)。
無題14.png
この値を(2 0 0)にしたら、元の(1 0 0)と向きは同じだが倍速で流れることになる。この値を(0.5 0 0)にしたら、元よりも低速で流れることになる。なお、(2 0 0)に変えても、(0.5 0 0)に変えても、Time=100までの間に明瞭な渦は発生しなくなる。

次のステップ

頂点の数を増やして、流路の形を変える方法を説明する(予定)

holdingtomato
プログラマーではありませんが、プログラム歴は30年以上です。今はVisual Basic for Application専門ですが、昔はC, Pascal, Delphiなどを主に数値計算に使っていました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away