OpenFOAMのsnappyHexMeshで境界層付き格子を作成する

# はじめに

OpenFOAMのsnappyHexMeshを使って格子を作成してみたいと思います。
境界層格子を狙い通りに設けることが目的です。

* [OpenFOAM (R) ] (https://www.openfoam.com/)

# 環境

OS : Windows 10
WSL : Ubuntu 18.04 LTS
OpenFOAM：openfoam2006

# TUTORIALの調整

下記様にチュートリアルをコピーし、もとのファイルのバックアップと経過の出力先を作成します。
snappyHexMeshDict では layerFields を出力するように設定しておきます。

```bash
cp $FOAM_TUTORIALS/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges .
cd iglooWithFridges
echo "writeFlags ( layerFields );" >> system/snappyHexMeshDict
cp system/snappyHexMeshDict system/snappyHexMeshDict.bak
mkdir result
```
次に```Allrun```を以下の様に書き換えて
差分の保存、格子作成、境界層作成結果の出力をするように設定にします。

```bash:Allrun
#!/bin/bash
cd "${0%/*}" || exit                                # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions        # Tutorial run functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase

FILENAME=`date +%Y%m%d%H%M%S`
log=result/${FILENAME}.snappyHexMeshDictDiff
diff -u  system/snappyHexMeshDict system/snappyHexMeshDict.bak > ${log}

grep "^- " ${log} -A 2

runApplication blockMesh
runApplication snappyHexMesh -overwrite

sed -n "/patch\s*faces\s*layers\s*over/, /Writing /p" log.snappyHexMesh|sed -n '$!p' > result/${FILENAME}.layer
cat result/${FILENAME}.layer

#touch t.foam
#sed -i 's/^pvsm.*/pvsm="showlayer.pvsm"/' saveimage.py
#pvpython saveimage.py
```

# 実施結果
上記で作成したスクリプトを```./Allrun```で実施してみます。

### デフォルト
この設定だと角に格子を作らない設定になっているようです。

![20220129_113224.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610414/f65b5393-4334-8229-8ef8-11ef163768dc.png)

```
patch                       faces    layers   overall thickness
                                              [m]       [%]
-----                       -----    ------   ---       ---
igloo                       1276     1        0.124     99.1    
twoFridgeFreezers_seal_0    800      2.1      0.0882    63.6    
twoFridgeFreezers_herring_1 592      2.1      0.112     65.9 
```
### featureAngle 変更
featureAngleの設定を変えてみると角も境界層を作るようになります。
![20220129144213.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610414/5087482f-3fcf-7042-92ce-f367dd6fff4b.png)

```bash
-    featureAngle 360;
+    featureAngle 60;

patch                       faces    layers   overall thickness
                                              [m]       [%]
-----                       -----    ------   ---       ---
igloo                       1276     1        0.124     99.1    
twoFridgeFreezers_seal_0    800      2.81     0.125     81.7    
twoFridgeFreezers_herring_1 592      2.93     0.159     85   
```
### maxNonOrtho の変更
更にmaxNonOrthoの設定を変えてみると角を微細化しているほうは全面に境界層を作るようになります。
＊メッシュの品質が悪くなるので流体計算などに適さないことも想定されます。
![20220129144336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610414/aba01e8e-4c59-7092-508a-346d7aa6cb74.png)

``` system/snappyHexMeshDict
-    maxNonOrtho 85;
patch                       faces    layers   overall thickness
                                              [m]       [%]
-----                       -----    ------   ---       ---
igloo                       1276     1        0.124     99.1    
twoFridgeFreezers_seal_0    800      3        0.131     87.2    
twoFridgeFreezers_herring_1 592      2.91     0.16      85.3    
```

この他更に設定を模索しましたが微細化せずに全面に境界層を設ける方法が見つかりませんでした。
適切な設定をご教示頂けると幸いです。

次回はgmshで格子を作ってから境界層を設けてみたいと思います。