OpenFOAMのチュートリアル実施

#前提
この解説は、VirtualBoxおよびDEXCSを使ってOpenFOAMを実行する人向けです。次の作業が終わっているものとします。

* VirtualBoxとDEXCSをインストールし終わっている。DEXCSを起動できる。
* DEXCSで共有フォルダを設定している。
* DEXCS上で、OF-v1906Terminalを起動できる。
* OF-v1906Terminal上で、Linuxのコマンド（例えばls）を実行できる。

#実行したいチュートリアルを探す
チュートリアルとは、OpenFOAMの事例紹介である。

ネット上には、OpenFOAMチュートリアルの紹介がいくつもあるので、まずは自分が興味を持てそうなページをGoogleなどで探す。キーワードは「OpenFOAM チュートリアル一覧」など。
例えば次のサイト：
https://www.xsim.info/articles/OpenFOAM/Tutorials.html

#チュートリアルの予備知識

チュートリアルは、FOAM_TUTORIALSというフォルダにまとめられている。1つのフォルダに1つの事例が保管されている。

多くのチュートリアルフォルダには「Allrun」というファイルがある。このファイルはチュートリアルの自動実行ファイルなので、まずはこのファイルがある事例を実施してみると良い。


なお、チュートリアルのファイル構成、フォルダ構成は、バージョンによって大きく変わっているので、実行したいチュートリアルのフォルダがどこにあるのか探す必要がある場合もある。

#チュートリアルの実行例
まずは実行したいチュートリアルのフォルダを、WindowsとVirtualBoxの共有フォルダにコピーしてから実行するのが便利。OpenFOAMを実行すると、フォルダの中に新しいフォルダやファイルが作成されるので、必ずコピーしたフォルダで実行すること。

私の場合は/media/sf_OpenFOAMというフォルダを共有フォルダにしているので、次のようにしてショートカットを作成しておくと便利。そして、共有フォルダに移動する。

```linux:共有フォルダへのパスの設定と移動
export myhome=/media/sf_OpenFOAM
cd $myhome
```

この共有フォルダにチュートリアルファイルの一つをコピーする。次の例は、porousBlockageというチュートリアルをコピーする例。末尾の「.」を忘れないこと。このピリオドは、カレントフォルダを意味する。

```linux:共有フォルダへの事例コピー
cp -r $FOAM_TUTORIALS/incompressible/pisoFoam/laminar/porousBlockage .
cd porousBlockage
```

このとき、「そのようなファイルやディレクトリはありません」というエラーが出たら、チュートリアルのフォルダの位置が間違っている（参照したWebサイトとあなたの環境とでフォルダ構成が異なる）ので、まずは次の方法で、そのフォルダを探す。（「porousBlockage」の箇所は、探したい事例に置き換える。）

```linux:チュートリアルフォルダを探す例
cd $FOAM_TUTORIALS
find -name porousBlockage
```

私の環境下では、次のような結果が表示された。
./incompressible/pisoFoam/laminar/porousBlockage

ちなみに、これをpitzDailyにした場合には次の結果が表示される。
./basic/potentialFoam/pitzDaily
./basic/scalarTransportFoam/pitzDaily
./compressible/rhoPimpleFoam/LES/pitzDaily
./incompressible/adjointShapeOptimizationFoam/pitzDaily
./incompressible/pimpleFoam/RAS/pitzDaily
./incompressible/simpleFoam/pitzDaily
./incompressible/pisoFoam/LES/pitzDaily
この中から、最も近いものを探してコピーする。（これらは、ほぼ同じ流路条件で、それぞれ別の解法あるいは別の条件での事例フォルダである。）

コピーが終わったら、lsコマンドを実行して、「Allrun」のファイルがあることを確認する。

```linux:lsの実行
ls
```

私の環境では、次のファイルが表示された。

```linux:lsの実行
custom@custom-VirtualBox /media/sf_OpenFOAM/porousBlockage $ ls
0  Allrun  constant  system
```

チュートリアルにAllrunが入っていれば、それを実行すれば結果が得られる。ただし、最初に「./」を付ける。

```linux:Allrunの実行
./Allrun
```

私の環境では、次のような結果が得られる。

```linux:Allrunの実行結果
custom@custom-VirtualBox /media/sf_OpenFOAM/porousBlockage $ ./Allrun
Running blockMesh on /media/sf_OpenFOAM/porousBlockage
Running topoSet on /media/sf_OpenFOAM/porousBlockage
Running pisoFoam on /media/sf_OpenFOAM/porousBlockage
custom@custom-VirtualBox /media/sf_OpenFOAM/porousBlockage $
```
#チュートリアルの実行結果表示
結果を表示するにはparaFoamというコマンドを実行する。

```linux:paraFoamの実行
paraFoam
```

するとparaViewというアプリケーションが起動される。左中央付近にある「Apply」というボタンをクリックする。
<img width="927" alt="無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/7a115823-8d4b-5c50-55ce-e08fbeb1ae8a.png">

すると、真ん中の画面に立体っぽい画像が出る。続いて、速度分布をみるために、上の方にある「Solid Color」というボタン（リストボックス）から「・U」を選ぶ。（ここで「・T」を選ぶと温度が、「・p」を選ぶと圧力が見られる。チュートリアルによっては、どれかが無い場合もある。）

<img width="927" alt="無題2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/1cabbf9a-7c2f-1bd1-7e98-341789d9d65e.png">

すると、初期の速度分布が色で表示される。続いて「Play」（再生）ボタンをクリックすると、速度の経時変化がアニメーションで表示される。
<img width="923" alt="無題3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/4841c748-2f72-ebf2-5e48-f37e9809434f.png">

しばらく待つと（Time 60ぐらいまで）、カルマン渦っぽいものも観察できる。
<img width="928" alt="無題4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/5415dcb6-7947-a48e-c183-736b9b8416e7.png">

#もう少しだけ高度なParaFoamの使い方。
ParaFoamで、立体の断面を見たり、流線を書いたりもできる。

事例として、「ビル街の風の流れのシミュレーション」を見る。

実行フォルダに移動して、

```linux:ビルディング
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/windAroundBuildings Buildings
cd Buildings
./Allrun
```

を実行して計算完了するまで待つ。（私のパソコンだと15分ぐらい。）
最後にparaFoamを実行して、「Apply」→「・U」を表示すると、
<img width="930" alt="無題5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/57575cf5-e3fd-391f-ba4e-9e9bae36cc3f.png">
「ビル群」の上空（地上から70m）の気流が表示される。これだとよくわからないので、地上から10mの位置の気流を見たい。

##断面の表示
その場合、左上の「slice」のアイコンをクリックすると（前図の赤矢印、マウスポインタを合わせて1秒ほど待つと、sliceの文字が表示されるからわかる。）、sliceの設定画面になるので、
<img width="928" alt="無題6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/9d11cd33-d402-a380-3916-a9921fd35b7e.png">
さらに、「Z normal」をクリックし、Originを（70.0025から）10に変えて、「Apply」ボタンを押すと（上図の赤矢印）、
<img width="928" alt="無題7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/69a0760a-3885-b8e2-2eb0-9ba1cada9437.png">
地上から10mの位置の気流が表示される。この断面画像は「Play」ボタンでアニメーション表示もできる。
##流線の表示
さらに、左上のGlyphボタンをクリックすると（上図の赤矢印）、
<img width="927" alt="無題9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/21c888da-292a-fcf2-0c12-f431f7721685.png">
Glyphの設定画面になるので、「Glyph Type」を「2D Glyph」に、「Orientation Array」を「・U」に、「Maximum Number Of Sample Points」を「500」ぐらいに設定して、「Apply」をクリックすると（上図の赤矢印）、
<img width="926" alt="無題10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672686/2436836c-072c-b512-dbd1-ad3bc01d4b70.png">
流線が表示される。ただし、Glyphはアニメーションでは更新されないので、流線を引きたい画面にしてから設定する必要がある。
#おすすめのチュートリアル
個人的（アニメーション的）にお勧めなのは、次のチュートリアル。
「実行時間」はIntel Core i5-7300U CPU @ 2.60GHz 2.70GHzを使っての結果。

## Allrunがあるもの

- $FOAM_TUTORIALS/compressible/rhoPimpleFoam/RAS/mixerVessel2D
    - 実行時間：31秒
    - 内容：丸い水槽の中でプロペラが回る。ただし見た目にはプロペラではなく水が回る。
- $FOAM_TUTORIALS/compressible/sonicLiquidFoam
    - 実行時間：3分50秒
    - 内容：タンクの下のノズルから水が出る。
    - 注意：./Allrunの後、cd decompressionTankで下位フォルダに移ってからparaFoamを実行する必要がある。
- $FOAM_TUTORIALS/incompressible/simpleFoam/mixerVessel2D
    - 実行時間：6秒
    - 内容：邪魔板が付いた水槽の中でプロペラが回る。
- $FOAM_TUTORIALS/incompressible/simpleFoam/windAroundBuildings
    - 実行時間：14分29秒
    - 内容：ビル街の風の流れのシミュレーション。
    - 注意：z=10ぐらいでsliceしないと結果がよく見られない。
- $FOAM_TUTORIALS/basic/laplacianFoam/flange
    - 実行時間：14秒
    - 内容：複雑な形状の金属部品の熱伝導。
- $FOAM_TUTORIALS/incompressible/icoFoam/elbow
    - 実行時間：5秒
    - 内容：曲がった2股配管の流れ。
- $FOAM_TUTORIALS/heatTransfer/buoyantSimpleFoam/circuitBoardCooling
    - 実行時間：20秒
    - 内容：回路基板の空冷。

#次のステップ
チュートリアルを何例か実行したら、次は、チュートリアルファイルの立体形状や初期条件を変えて、実行結果がどのように変化するか確かめてみるのがお勧め。その方法は別ページで解説する（予定）。