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

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

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

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

paraViewの画面になってから、Play（再生）ボタンを押すと、結果がアニメーション表示される。Time=60ぐらいでカルマン渦っぽいものが発生する。
<img width="928" alt="無題4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/abde3baf-ef4a-b150-ab6e-e39885697b40.png">

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

#流路形状の小変更
まずは流路（周囲の形）を変える。この流路は、平面に見えるが、実際には薄い板である。つまり、8つの頂点がある。
<img width="377" alt="無題10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/cea8596f-2ace-80df-1014-b93d7bb9f84d.png">
上の図を見てわかるように、点0が、原点になっている。点6が原点から最も遠い。点6と、点6の下（xy平面の反対側）にある点2のX座標を、すこし増やしてみる。なお、上の図は、見やすいように実際より少し厚みを増やしてあります。

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

```linux:blockMeshDictの編集
xdg-open system/blockMeshDict
```

開いたファイルの最初にvertics、blocksと書かれた箇所があり、これが流路の形状を表している。
<img width="436" alt="無題11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/8165feee-1d4f-42e3-9b6a-df8eacf6ce5e.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を実行する。

```linux:ログの削除と再実行
rm log*
./Allrun
paraFoam
```
最初の行の「rm log*」は、前回の実行結果の記録の削除コマンド。前回の記録が残っている場合は、削除しないとAllrunをした時にエラーになる。（チュートリアルによってはlogファイルを削除するだけでは不十分だが、porousBlockageの場合はlogを削除すれば大体問題ないと思う。）

paraFoamの結果は次の通り。
<img width="923" alt="無題12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/3d86be58-6928-fafb-0b2b-f8feed20742f.png">
点2と6の座標が変わっていることが分かる。アニメーションで流れの変化を見てみると、元とは少し変わっており、左右対称形状でなくなっているためか、渦ができる時間が早くなる。

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

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

#初速の変更
（前の節でblockMeshDictを書き換えた場合は元に戻しておく）

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

```linux:0/Uの編集
xdg-open 0/U
```

<img width="437" alt="無題13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/b62a40b1-9c8b-427c-9720-130eec521cb9.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)に変えたら、右上へ流入することになる。次の図で示す（色だけでは分からないので流線も加えている）。
<img width="923" alt="無題14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/3a2c7623-e9ff-4c4a-5855-cf996f1befaa.png">
この値を(2 0 0)にしたら、元の(1 0 0)と向きは同じだが倍速で流れることになる。この値を(0.5 0 0)にしたら、元よりも低速で流れることになる。なお、(2 0 0)に変えても、(0.5 0 0)に変えても、Time=100までの間に明瞭な渦は発生しなくなる。

#次のステップ
頂点の数を増やして、流路の形を変える方法を説明する（予定）