FreeCAD-CFD Workbench チュートリアル 1: エルボー

# はじめに

南アフリカの[OpenSim](https://www.opensim.co.za/training.html)というサイトでFreeCADのCfdOF Workbenchのチュートリアル、CADファイル、マクロがNon-commercial useで公開されてますので機械翻訳にかけ、現在のFreeCADとCfdOF Workbenchに合わせて修正しました。
Windows10環境でFreeCAD19とOpenCFD-OpenFOAM-v20121で確認しています。

# CFDワークベンチ

## ワークベンチ

このワークベンチは、ユーザーによるCFD解析のセットアップと実行を支援することを目的としています。
これは、シミュレーションを実行する前に、材料プロパティを指定、メッシュを生成、境界条件と設定を指定、ソルバー設定を設定することによって、関連物理を選択することをユーザーに指示します。
ソルバーの安定性を向上させるために、可能な限りベスト・プラクティスを盛り込んでいます。

## インストール

### WINDOWS:

-   https://www.freecadweb.org/wiki/Download
-   ツール | アドオンマネージャーからCfdOFをインストールします。[^1]
[^1]: 私の環境ではアドオンマネージャーではインストールができませんでしたので、https://github.com/jaheyns/CfdOF からダウンロードしたZIPファイルをC:\Users\（ユーザー名）\AppData\Roaming\FreeCAD\Modに直接、解凍して配置しました。残差の確認のためアドオンマネージャーでPlotを追加しています。
-   編集 | 設定 | CfdOFで依存関係を確認し、インストールします。

### LINUX:

-   https://www.freecadweb.org/wiki/Install_on_Unix
-   ツール | アドオンマネージャーからCfdOFをインストールします。
-   OpenFOAMのインストール（https://openfoam.com/download/）
-   Paraviewのインストール
-   編集 | 設定 | CfdOFで依存関係を確認し、インストールします。

## 最新情報

最新の情報はCfdOFのREADMEファイルをご覧ください。

## 主な開発者

Johan Heyns (CSIR, 2016-2018) jaheyns@gmail.com
Oliver Oxtoby (CSIR, 2016-2018) oliveroxtoby@gmail.com
Alfred Bogaers (CSIR, 2016-2018) alfredbogaers@gmail.com

---

# 背景

-   ここでは、2つの流入口を持つ単純な配管エルボでCFDワークベンチの基本機能を紹介することを目的としています。
-   パイプフローのベンチマーク問題は通常2Dでモデル化されます。残念ながら、CFDワークベンチは現在、3D問題のみに限定されています。
そこで、この問題を薄い断片としてモデル化し、表裏の面をスリップ条件で処理します。
-   ユーザがFreeCADでの形状作成に慣れていることを前提としています。

![fig03-01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/fefe579c-b60b-3605-bcdc-5450fca49bd1.jpeg)

---

# エルボー設計
## Part Design

---

# 新しいスケッチの開始

FreeCADのスケッチ環境にある程度慣れていることを想定しています。
スケッチと部品設計の詳細については、以下を参照してください。

https://www.freecadweb.org/wiki/Sketcher_tutorial
https://www.freecadweb.org/wiki/Basic_Part_Design_Tutorial

![fi05-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/4109210f-90f2-8613-fdd4-06935c2bd15e.png)
![fig05-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/3436b65b-0c89-e140-8a81-c41b817c0b59.png)
![fig05-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c6d66514-8fe6-ae4e-86ce-b34c50886b18.png)
![fig05-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/ad393163-1c11-a5a1-9bb5-d3e0bdb15440.png)
![fig05-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/ec845862-6b62-068f-1244-381d607ebb1b.png)

---

# スケッチ

-   指定した寸法セットを使用して、右側にスケッチを作成します。
-   スケッチは、最初にプリミティブを相互接続された線と円弧の形式で構成することによって簡単に作成できます。
次に、さまざまな拘束ツールを使用して、適切に水平、垂直、長さ、半径拘束を挿入します。
-   アイコンの上にマウスポインターを置くと、各機能の説明がツールチップで表示されます。
スケッチ作成のための基本的なツールバーは以下の通りです。

基本的なプリミティブツールバー
![fig06-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/8ad5a880-a9ab-de95-2fef-d3fff7856af0.png)

拘束ツールバー
![fig06-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c29d19e7-4e51-389b-74d4-dbc0dc115c86.png)
![fig06-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/14a5eade-9f02-3f0a-09c8-55152b9ca721.jpeg)

---

# スケッチをパッドします

-   スケッチが完成したら、スケッチ作成を閉じます。
-   "Part Design"ワークベンチ内で、"パッド"アイコンをクリックします。
-   タイプ"寸法"の長さを1m(1000mm)に設定します。
-   パッド機能は、スケッチを取り込んで第3の方向に押し出す機能です。
-   "OK"をクリック

![fig07-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/8605b1c1-99ad-b466-ac21-8a2843d0d6f1.png)
![fig07-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/514f2441-4df9-b37c-c1f2-353245a6bdae.png)
![fig07-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/938187db-8754-71b1-c213-b5b67aa4c52e.jpeg)

---

# 流体
## 解析ケースの設定

---

# CFDワークベンチの起動

-   Cfdワークベンチを起動するには、タスクバーのドロップダウンメニューをクリックし、"CfdOF"を選択します。
-   起動すると、CFDタスクバーが表示されます。

![fig09-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/3f675878-e435-86a0-9004-a0b572dc2f64.png)
![fig09-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/7ad1cc2a-fede-5c6c-c69c-3f1a15b3a951.png)
CFDタスクバー：
![fig09-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/4c22a5bb-5fbf-7c64-6dba-6d8f50593c4b.png)

---

# 新しいCFD解析

-   新しい解析を作成するには、"CFD"アイコンボタンをクリックします（または"CFD"のドロップダウンメニューから「Analysis Container」を選択します）。
-   "CfdAnalysis"オブジェクトとともに、次のオブジェクトが自動的に作成され、既定値のセットが割り当てられます。
これからシミュレーション用に修正します。
    -   PhyshicsModel
    -   FludProperites
    -   IntialiseFields
    -   CfdSolver

![fig10-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/370bc14e-b6bf-cd47-ba7c-557e2d27e7d3.png)
![fig10-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/d8c7aa77-5002-9955-76c8-4beb52ef7fdc.png)

---

# 物理モデルの選択

-   物理モデルの選択では、ユーザーが希望するシミュレーションタイプを指定します。
-   新規解析の作成時には、PhysicsModelオブジェクトにデフォルト値が適用されます。
    -   Steady（定常）、Single phase（単層）、Incompressible（非圧縮性）
    -   "Viscous（粘性）"をチェックし、"Laminar（層流）"を選択します。
-   まだサポートされていないシミュレーションタイプはグレーアウトされています。
-   現在のシミュレーションでは、図に示すようにデフォルト値が保持されます。
-   "OK"をクリックして保存します。

![fig11-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/78fc62b6-015b-6b9e-ee26-6f8c908cb39b.png)
![fig11-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/cc31bac3-6891-ffa5-eae2-fe37f4ba44c1.png)

---

# 流体プロパティの選択

-   マテリアルアイコンをクリックします（または、"FluidProperties"オブジェクトをダブルクリックするか、Cfdのドロップダウンメニューから"Add fluid properties"を選択します）。
-   メカニカルマテリアルタブが表示されます。
-   プロパティの設定は、定義済みのライブラリから項目を選択するか、手動で必要な値を入力して行います。
-   定義済みのライブラリから "Air"を選択します。
-   "OK"をクリックして保存します。

![fig12-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/29d119f3-77e1-0442-a55a-92e88b5a714c.png)
![fig12-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/6efa993c-0e86-aff0-5d4e-0bba81ba67f8.png)
![fig12-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/bc985e8b-9068-3a0f-7830-7fb668997a3a.png)

:::note info
FreeCADで使用される単位を変更したり、表示される有効数字の数を増やすには、「編集」->「設定」->「標準」の「単位」タブを参照してください。
:::

---

# 内部フロー変数を初期化

-   シミュレーションを開始する前に、内部流れの変数を初期化する必要があります。
-   初期化アイコンをクリック（または "InitialiseFields"オブジェクトをダブルクリック、またはCFDドロップダウンメニューから"Initialise"を選択）してください。
-   内部流れ変数は、PotentialFoamを使用するか、または初期流量変数を個別に入力することによって初期化できます。
-   現在のチュートリアルでは、"Potential flow"を選択します。
-   "OK"をクリックして保存します。

![fig13-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/89e27bcf-fd80-cdb1-c79b-ab7d126e47d7.png)
![fig13-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/353f90a5-45ea-f331-0343-f910544694e4.png)

:::note info
ポテンシャルフローでは、OpenFOAMのPotentialFoamソルバーを使用して、非圧縮性のポテンシャルフロー方程式を解くことで、内部の流れの変数を自動的に初期化します。
:::

---

# メッシュの作成

-   3Dオブジェクト"Pad"をクリックしてハイライトしてください。これにより、メッシュのアイコンがアクティブになります。
-   メッシュアイコンをクリックします。
-   Element dimensionは「2D」を選択します。
-   CFD Meshタスクパネルで、メッシングユーティリティーとして「cfMesh」を選択します。
-   Base element sizeに800mmを入力します（最初に1500mmと設定することで、より粗いメッシュを作成できます）。
-   "Run mesher"ボタンをクリックします。

:::note info
メッシュ作成時には、できるだけ粗いメッシュから始めてください。
メッシュが正常に作成された場合にのみ、メッシュを細分割することが推奨されます。
高度に洗練されたメッシュを作成するには、非常に長い時間がかかる場合があります。
:::

![fig14-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/5da02c54-f115-99e0-2778-6a8421547300.png)
![fig14-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/4fadafc1-b43b-c7ba-51c9-ffb954c7d358.png)
![fig14-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/3f6f4471-c6ce-0991-b53a-e3f3a8c91dd7.png)
![fig14-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/bd62b265-f647-7b02-f699-c32a005c1cdc.png)

:::note info
後続のチュートリアルでは、異なる細分割領域を持つメッシュを生成する方法について説明します。
ここでは、一定サイズのメッシュを使用します。
:::

---

# 境界条件の追加:流入口 1

-   新しい境界条件を追加するには、境界条件アイコンをクリックします。
-   最初の流入口境界条件を追加します。
  -   最初の流入口面をクリックして、"Add"ボタンをクリックします。
  - "Boundary（境界）"を"Inlet（流入口）"に変更します。
  - "subtype"を"Uniform velocity"に変更します。
  - 直交座標速度成分をU=(1m/s,0m/s,0m/s)に指定します。
  （これは、"Magnitude and normal"を指定しても可能です）。
  - オブジェクト名を"Inlet1"に変更します。
  オブジェクト名の変更は、オブジェクトリスト上で"F2"を押すか、右クリックして"Rename"を選択することで行うことができます。

![fig15-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/d39ffadc-996b-2a88-f3bb-d3111ccc8455.png)
![fig15-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/bbbf11a9-c671-e7ad-d76a-8f3453310b4c.png)
![fig15-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/9b53cecd-fbdf-c026-fedf-d2602b1e1054.jpeg)
![fig15-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/85f196a6-e943-aebd-e531-8ae699c804db.jpeg)

---

# 境界条件の追加:流入口 2

-   "Inlet1"と同様に、対応する面を選択し、"Add"ボタンをクリックします。
-   境界の選択:"Inlet"
-   サブタイプの選択:"Uniform velocity"
-   U=(0m/s,3m/s,0m/s)に対応する速度を入力します。
-   オブジェクトの名前を"Inlet2"に変更します。

![fig15-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/d39ffadc-996b-2a88-f3bb-d3111ccc8455.png)
![fig16-02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/4f721141-95b9-abba-62fb-21fe8cc501a7.jpeg)
![fig16-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/f08e0e80-5ebd-3370-2220-e4a67f0f4378.png)
![fig16-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c87ff127-6c5c-8021-553f-83daaff2f24c.jpeg)

:::note info
流入口の境界条件は青色で表示されます。
:::

---

# 境界条件の追加:流出口

-   正しい面を選択して、"Add"ボタンをクリックします。
-   境界の変更:"Outlet"
-   サブタイプの変更:"Static pressure（静圧）"
-   設定圧力:0m/kg/s^2。
-   オブジェクト名を"Outlet"に変更します。

![fig15-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/d39ffadc-996b-2a88-f3bb-d3111ccc8455.png)
![fig17-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/cbb1a78a-6312-2031-ee75-4372da28b17e.png)
![fig17-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/851dfe62-8a3a-e8a6-670e-07ab83f9d1ce.jpeg)
![fig17-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/194d32b0-dd79-3402-bec3-27de90a29ebc.jpeg)

:::note info
出力面は赤色で表示されます。
:::

:::note info
非圧縮性のシミュレーションでは、圧力は相対的な値（「ゲージ圧」）として扱われます。
:::

---

# 境界条件の追加：パイプの壁

-   すべての壁の面を追加し、壁をBoundary:"wall",Subtype:"slip"に設定します。
-   複数の面を追加するには、以下の2つの方法があります:
    1.  面を選択しない状態で"Add"ボタンをクリックします。
    すべての面を1つずつ追加していくことができます。
    目的の面をすべて選択したら、"Add"ボタンをもう一度クリックして、ボタンの選択を解除します。
    2.  "Ctrl"ボタンを押しながら複数の面をクリックすると、複数の面を同時にハイライト／選択できます。

![fig15-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/d39ffadc-996b-2a88-f3bb-d3111ccc8455.png)
![fig18-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/10bfd933-f327-1e86-0ced-ad30dea68fab.png)
![fig18-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/5dc6207d-c720-c735-fc6a-bc81687dae56.jpeg)

:::note info
壁は濃い灰色で表示されます。
:::

---

# 境界条件の追加 前面と背面のスリップ

-   最後に、前面と背面の境界条件を追加します。
-   2Dシミュレーションを3Dでエミュレートするために、前面と背面の境界条件を"slip"に設定します。

![fig15-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/d39ffadc-996b-2a88-f3bb-d3111ccc8455.png)
![fig19-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/fe468af3-56cb-a7e5-5eed-77ac0d3f9d76.png)
![fig19-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/34866a6d-2102-b956-174b-b2c87e23c72c.jpeg)

:::note info
指定されていない境界面は、既定で"slip"になります。
:::

---

# 最終的なプロパティの設定

-   正しく設定されていれば、CfdAnalysisには以下の項目が含まれているはずです。
-   すべての境界条件が正しく割り当てられていることを確認するために、最終的なチェックとして、すべてのオブジェクトを非表示にして、それぞれの境界を1つずつ表示できます。項目をクリックしてを"スペースバー"を押すか、右クリックして "toggle visibility（表示/非表示を切り替え）"を選択してください。
-   これでCFDシミュレーションを実行する準備ができました。

![fig20-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/80d0e0b6-9538-50c1-9171-231786e5cfcb.png)

---

# ソルバー制御設定

-   ソルバーの設定は以下の方法で変更できます。
    -   "OpenFOAM"オブジェクトをハイライトします。
    -   下部にある"Data"タブを選択します。
-   以下の設定を変更できます。
    -   Parallel: True/False
    -   並列コア数:Parallel=Trueの場合、使用するコア数を設定します。
    -   終了時間:
        -   定常状態:最大収束計算回数
        -   非定常:終了時間
    -   時間ステップ：非定常シミュレーションの時間ステップサイズ（デフォルト=定常状態の場合は1、非定常の場合は0.001）。
    -   書き込み間隔:後処理のために情報がハード・ディスクに保存する頻度。
    -   収束基準:既定=1e-4。

![fig21-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/4d0ee15c-bd44-d2b5-b701-b1191ac45d11.png)


:::note info
非定常な流れの構造が存在する場合、残差がゼロ以外の値で平坦になるため、収束基準は必ずしも達成できません。疑わしい場合は、計算される量（揚力など）の収束を確認する必要があります。
:::

---

# ケースをディレクトリに書き込む

-   ソルバーアイコンをクリック（または "OpenFOAM"をダブルクリック、またはCFDドロップダウンメニューから "Solver job control（ソルバージョブ制御）"を選択）します。
-   "Working Directory（作業ディレクトリ）"は、シミュレーションが一時的に保存されるディレクトリです。

:::note warn
ディレクトリ内のケースがすでに存在している場合は、上書きされます。
:::

-   "Write（書き込み）"ボタンをクリックします。
-   メッシュサイズによっては、ケースディレクトリの書き込みに時間がかかる場合があります。
-   成功した場合、出力メッセージにはその旨が表示されます。
-   "Edit"ボタンをクリックすると、ケースディレクトリが開き、手動で編集できます。

![fig22-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/7ff977fa-3622-2659-989d-e3a48a40a70a.png)
![fig22-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c7caa3f4-2476-5706-95d3-b42bb29600d1.png)
![fig22-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/91545e15-eaa9-d9cb-9529-d211a8d9d9ac.png)

---

# CFDシミュレーションの実行

-   ケースの作成に成功した場合、"Run"ボタンが有効になります。
-   "Run"をクリックするとシミュレーションが開始され、"Stop"をクリックするといつでも終了できます。
-   動的残差プロットが表示されます。
-   ソルバーは、収束基準を満たすか、反復回数が最大値に達すると自然に停止します。
Ux、Uy、Uz、圧力に対して1e-4です。
-   結果を表示するには、"Paraview"ボタンをクリックします。

![fig23-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c34f5cf1-1f1a-6cfb-5dfd-36da924c07b2.png)
![fig23-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/32573060-43b6-f302-5bfc-9c8bdcad2fc0.png)

---

# 後処理:Paraview

グリフ、流線、断面、等高線のプロットなどを描画するためのさまざまな後処理ツール。

更新ボタン:シミュレーションがまだ実行中の場合、更新すると新しい情報が読み込まれます。

![fig24-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/6a51dd5d-64d6-563e-ed01-6dc979cee73d.png)


詳細はこちらをご覧ください：
http://www.paraview.org/Wiki/The_ParaView_Tutorial

---

# 参考文献

https://qiita.com/norisionori/items/4ee851f3322018662dd7

坪田　遼. 基礎からのFreeCAD［三訂版］. 工学社, 2021. https://ci.nii.ac.jp/ncid/BC08159054, (accessed 2021-08-01).

オープンCAE 学会. OpenFOAM による熱移動と流れの数値解析（第2版）. 森北出版, 2021. https://ci.nii.ac.jp/ncid/BC06499244, (accessed 2021-08-01).