ANSYS FLUENTで都市の微小気候をシミュレーションする [2 : Pre-processing]

前回のつづきです。

https://qiita.com/suga3008/items/1fa82b6598bf3ff7d0e6



# 流体解析の流れ
流体解析は以下の流れで行う。
1. **Pre-processing**
    解析に用いる3Dデータを編集したり、空間をセルで分割し、メッシュファイルを作成したりする。
1. **Solving**
    物理モデルや境界条件などの設定をして、流体シミュレーションを実行する。
    
1. **Post-processing**
    シミュレーション結果を可視化する。

今回は、Pre-procceingについて述べる。Pre-processingは流体解析の中で特に根気と時間を要する段階だ。

# DiscoveryでOBJファイルを編集する
### 対象とする区画を含むOBJファイルを探す
`01100_indexmap_op.pdf`を確認し、解析したい区画が含まれる[標準地域メッシュ](https://www.esrij.com/gis-guide/gis-other/mesh/) を特定する。`bldg/lod1`から目的の標準地域メッシュのOBJファイル (例：`64414278_bldg_6680.obj`) を探す。

:::note info
lod1よりもlod2のほうがより詳細に建物の形状が表現されている。その代わり、データサイズは大きい。Ansys Studentではデータサイズの大きいオブジェクトファイルはメッシュ化の際に不都合なので、lod1を勧める。
:::

### DiscoveryにOBJファイルをインポート
Discoveryを起動する。「新規作成」を選択する。OBJファイル (例：`64414278_bldg_6680.obj`) をDiscoveryにドラッグアンドドロップすることでインポートできる。
y軸とz軸が入れ替わって表示される場合は、「ファセット＞リバースエンジニアリング＞ファセットの向き」で軸の方向を適切に設定する。

OBJファイルをインポートしたら、まずは**ファセットをチェック**する。「ファセット＞クリーンナップ＞ファセットをチェックする」をクリックし、モデルツリーの「ファセット」をクリックする。(左上にある階層構造の図をDiscovery上ではモデルツリーとよぶ)
「メッシュは自己交差しています」などのエラーメッセージが表示された場合は、ファセットを自動修正する。「ファセット＞クリーンナップ＞自動修復」をクリック。このときも先ほどと同様にモデルツリーの「ファセット」をクリックして選択する。再度ファセットをチェックして問題がないことを確認する。エラーが0になっていればOK。（「メッシュには複数のピースがあります」や「メッシュは折り返し部分を含む」などのメッセージは無視しても問題ない。）

次に、ファセットのままでは3Dデータの編集に向かないので、**ファセットをソリッドに変換**する。モデルツリーのファセットを右クリックし、「ソリッドに変換＞面をマージ」を選択する。データサイズが大きいと、それなりに時間がかかる。

![スクリーンショット 2024-01-19 183752.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/60b7aa5c-c809-aa17-3b83-182c0e76bf8a.png)
👆変換前

![スクリーンショット 2024-01-19 183813.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/90852409-df8e-b0b0-dc95-153b5240461d.png)
👆変換後

### DiscoveryでOBJファイルを編集

#### 建物の編集
解析に不要な建物は削除する。不要な建物をモデルツリーから選択するか、ドラッグやクリックによって直接建物を選択して削除する。
初めてANSYS Fluent (Student版) で流体解析を行う場合は、建物を2-3個だけ残して他は削除することを勧める。なぜなら、建物の数が多いほどメッシュ数が増大し、Student版のメッシュ数の制限を越えてしまうため。まずは、どれくらいの建物の量でメッシュ数がどれだけになるのかという感覚を掴むとよいと思う。

必要な建物だけ残したら、適宜構造を簡略化していく。
以下の図のような小さな突起はシミュレーションの精度に影響を与えるため、「デザイン＞編集＞プル」の機能を使って突起を除去する。地道な作業だが、一つずつ手作業でやっていく。
![スクリーンショット 2024-01-19 184650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/866d732d-9f90-cc0a-8d18-d7eb863dbff5.png)

![スクリーンショット 2024-01-23 101342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/ac448439-4cf0-2439-65c6-5f491ca1e9a4.png)
👆不要な建物を削除し、建物の構造を適宜簡略化した後の様子

#### 計算領域の作成
次に、建物を囲うボックスを作成する。このボックス内が流体解析を行う計算領域となる。
[都市の風環境予測のためのCFDガイドブック](https://www.aij.or.jp/jpn/publish/cfdguide/)によると、計算領域の条件として、
* 側面境界、上空境界の大きさは建物の外縁から5H (H：代表的な建物の高さ) 程離れていること
* 閉塞率 (風が吹き込んでくる方向から見て、建物の面積が占める面積の割合) が5%以下であること

が推奨されている。

![スクリーンショット 2024-01-23 103131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/f4ec7478-d3b7-c496-77df-1a221fe88701.png)
👆閉塞率（赤線で囲ったところ）

デザイン＞スケッチ の機能を使ってボックスを作成する。

![スクリーンショット 2024-01-23 104200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/64c02e0a-a3a3-0bb2-cce0-88967638ff0b.png)
👆風を吹かせる面 (inlet) と風が通り抜ける面 (outlet) は作らない

プリペア＞生成＞ボリュームの抽出 で計算領域を作成する。inletとoutletの枠をクリックし、「シード面」というボタンをクリックしたら、今度は内側の面 (地面など) をクリックする。「内側の面をプレビュー」し、内側の面が赤く塗りつぶされていることを確認する。問題なければチェックボタン:white_check_mark:をクリックする。すると、ボックス内を満たす「Volume」というパーツが新たに生成される。

![スクリーンショット 2024-01-23 104557.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/c2b5bd83-6ed9-83af-f710-6b6808ccb840.png)

最後に、計算領域に含まれる境界の名前をつける。画面右下あたりの「詳細選択」をクリックする。Volumeのinletの面をクリックした状態で、詳細選択の「＋選択」をクリックすると「Group1」が生成される。これを「inlet」に名前を変更する。同様にして、outlet、top (上空面)、lateral_boundary (側面x2)、ground (地面)、bldg (建物) の境界を作成する。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/f8cf9f46-4099-6902-973d-ae84f818ee66.png">
👈inlet <br>

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/ca733ae0-4a3c-3b9c-d5ec-f0cf6ce4a615.png">👈outlet <br>

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/fb66844d-99ab-eb8c-c06c-7728099ad4ec.png">
👈top <br>

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/b40293ed-b32d-c4c8-bac6-b04e6de5d77d.png">
👈lateral_boundary <br>

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/fb0779cf-818c-8a23-1fa7-90180ab2b429.png">
👈ground <br>

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/0a05269d-f12e-c484-485c-9b482bdca361.png">
👈bldg <br>

#### シミュレーションに含めるパーツの選択
Volume以外のパーツはシミュレーションに含めないため、左上に表示されているモデルツリーで、アイコン (+/-のようなもの) をクリックして除外する。

![スクリーンショット 2024-01-23 125533.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/3c5b5fbd-26d7-282e-4e4a-db9dcd35c758.png)
👆Volume以外をシミュレーションから除外した様子

ここまで完了したら、Discoveryファイル (拡張子.dsco) として保存する。

# メッシュファイルを作成する
次に、Discoveryで作成したファイルからメッシュファイルを作成する。

### Fluentを起動する。
Fluentのアイコンをダブルクリックすると、Fluent Launcherが表示される。「Meshing (メッシュモード)」を選択し、Startボタンをクリックし、起動する。

### メッシュ化の設定
Workflow Typeは**Watertight Geometry**を選択する。
![スクリーンショット 2024-01-23 115250.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/2669b51e-119e-7400-de29-d9e4bed3bcb3.png)

表示されているWorkflowに従って進める。
#### Import Geometry
基本的にデフォルトのままで設定を変更する必要はない。File Nameの横にある「...」をクリックして、Discoveryで作成したファイルを選択する。

#### Add Local Sizing
以下のように設定する。
[Would you like to add local sizing?] --> [yes]
[Growth Rate] --> [1.2]
[Size Control Type] --> [Face Size]　*適宜適切なものを選択
[Target Mesh Size] -->  *何通りかメッシュファイルを作成して、適切なサイズを見つける。初めはとりあえずデフォルト値のままにする

解析したい区画周辺を詳細にメッシュで区切りたいので、bldgとgroundを選択して、local meshを作成する。

#### Generate the Surface Mesh
[Minimum Size] --> *何通りかメッシュファイルを作成して、適切なサイズを見つける。初めはとりあえずデフォルト値のままにする
[Maximum Size] --> *何通りかメッシュファイルを作成して、適切なサイズを見つける。初めはとりあえずデフォルト値のままにする

以降はデフォルト値のまま

#### Describe Geometry
[Geometry Type] --> [The geometry consists of both fluid and solid regions and/or voids]

以降はデフォルト値のまま

#### Update Boundaries
以下のように設定する。
| Boundary Name | Boundary Type |
|:-------------:|:-------------:|
| inlet         | velocity-inlet|
| outlet        |pressure-outlet|
| top           | symmetry      |
| lateral_boundary|   symmetry  |
| ground        | wall          |
| bldg          | wall          |

#### Create Regions
デフォルトのまま

#### Update Regions
デフォルトのまま

:::note info
**volume-volume**のRegion Typeが**fluid**になっているか確認する
:::

#### Add Boundary Layers
デフォルトのまま

#### Generate the Volume Mesh
[Solver] --> [Fluent]
[Fill With] --> [tetrahedral]　*目的のセルの形を選択する。都市の流体解析を行った文献では多くが**tetrahydral**を採用しているため、ここではそれに従った。

### 生成されたメッシュファイルを確認
Consoleにメッシュ化の結果が出力される。
まず、セルの数を確認する。

![スクリーンショット 2024-01-23 122908.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/2ef46cae-a516-9104-27c4-786e26da1a7d.png)

Ansys Studentでは、セル数が1,048,576を超えると、メッシュファイルが保存できないため、もしこの上限値を超えていたらセルサイズを大きくするなどによって、セル数を減らすことを試みる。

次に、minimum Orthogonal Qualityを確認する。この値は0.1以上が望ましい。
minimum Orthogonal Qualityが0.1を下回っているセルはMeshウィンドウで赤く塗りつぶして表示される。
解析したい区画 (ここでは、青線で囲った1ブロック) のシミュレーション精度に影響を与えそうであれば、minimum Orthogonal Qualityが0.1を下回っている部分をDiscoveryで修正する。

![スクリーンショット 2024-01-23 124102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015300/bee45146-c4c8-0e46-3a69-0c5aa43a3e83.png)

セル数やminimum Orthogonal Qualityの条件をクリアしたら、File＞Write＞Mesh でメッシュファイルを保存する。

### 参考文献
* [都市の風環境予測のためのCFDガイドブック](https://www.aij.or.jp/jpn/publish/cfdguide/)　
* [Geometry Prep for CFD Simulation Using Ansys Discovery](https://courses.ansys.com/index.php/courses/geometry-prep-for-cfd-using-ansys-discovery/)：Discovery上での操作について解説したAnsys公式動画
* [Mesh Generation using Ansys Fluent Watertight Workflow](https://courses.ansys.com/index.php/courses/mesh-generation-using-ansys-fluent-watertight-workflow/)：メッシュ作成について解説したAnsys公式動画