---
# System prepended metadata

title: HPC app - OpenFOAM

---

HPC app - OpenFOAM
==

### 1.Openfoam hardware
### 2.Openfoam real case
### 3.Openfoam GPU-accelerated issue


<br>
<br>
<br>
<br>
<br>

##  Openfoam hardware

#### [Hardware for CFD, 2021, May <br>  Lubos Pirkl Enabler, Storyteller at CFDSUPPORT, Indiana Jones in the Jungle of CAE](https://www.linkedin.com/pulse/hardware-cfd-lubos-pirkl/)

* 每一個simulation所需要的size，可以看做是core*hours。
  A simulation need 1 core 100 hours = 2 cores 50 hours.

* 在CFD中影響simulation size關鍵因素為：
  1.**Mesh size**   2.Time method   3.Physical model complexity

* Hardware 元件最重要的是：**CPU 處理器**。
  **主機板**檢查相容性即可，**記憶體**有一個黃金法則：「每一百萬網格需要2GB RAM」。
  **螢幕**適當大小即可，**顯示卡**可以讓放大、縮小、旋轉、渲染的過程更加滑順。
  
* 作者以OpenFOAM motorBike為例子的實驗數據
![image](https://hackmd.io/_uploads/rkVjV9zk0.png)

  若是碩博士生需要5 core * hours來完成論文實驗；
  若是設計師或工程師需要500 core * hours來完成工程；
  若是專業CFD使用者需要超過500 core * hours並建立模擬集群。

<br>
<br>

#### [Hardware Recommendation for CFD <br> SimFlow  ](https://sim-flow.com/hardware-recommendation-for-cfd/) 

* 對於CFD simulation挑選**CPU**的幾個要點
  1. **記憶體頻寬 Memory Bandwidth (memory channels)**, CFD不會進行複雜的計算，而是會面對大量的資料處理，記憶體頻寬和允許平行資料傳輸的記憶體通道直接相關。
  2. **快取大小 CPU cache size**, 大的cache可以減少檢所資料的時間，加速CFD計算。
  3. **核心數量 Number of cores**, 核心和記憶體通道要保持一致避免無法充分利用，通常建議的準則是每個記憶體通道2~4個CPU cores。超執行緒對CFD計算沒有好處。
  4. **時脈速度 High clock speed**, 影響較小，通常CFD計算瓶頸在於 information flow : 訊息的傳遞、收集、檢索、儲存等等。
  
  
* 推薦的CPU處理器範例(長時間運算CFD計算推薦AMD EPYC系列)
  > **AMD EPYC 4th Generation**
  > 
  > 
  > 12 Memory Channels and up to 460 GB/s Memory Bandwidth
  > 
  > In this generation, we recommend:
  > 
  > AMD EPYC™ 9354 (32 cores and 256 MB L3 Cache) ~ 3500$
  > 
  > AMD EPYC™ 9384X (32 cores and 768 MB L3 Cache) ~ 5000$
  > 
  > **AMD EPYC 3rd Generation**
  > 
  > 8 Memory Channels and up to 204 GB/s Memory Bandwidth
  > 
  > In this generation, we recommend:
  > 
  > AMD EPYC™ 7373X (16 cores) or AMD EPYC™ 7473X (24 cores) ~4000$
  > 
  > AMD EPYC™ 74F3 ~3000$
  > 
  > The AMD EPYC 3rd generation has a worse performance but is   compatible with older and more affordable components, such as AM4 motherboards and DDR4 memory.
  
  
* RAM記憶體

  **低於** 10M 網格的模擬計算32gb RAM就足夠。
  **小於** 10M 網格的simulation = 32GB RAM
  **等於** 10M 網格的simulation且在一台PC上執行多項分析 = 64GB RAM
  **大於** 10M 網格的simulation = 每1M節點使用2GB RAM

  不論RAM總量為何，建議每個記憶體通道配置一個RAM module
  ex.4 記憶體通道 需要 64gb RAM
  
<br>
<br>

#### [Hardware for CFD simulations <br> CFDSUPPORT  ](https://www.cfdsupport.com/hardware-for-cfd.html) 
 * Laptop, PC, Cluster - Server, Storage - Server

<br>
<br>

#### [AMD EPYC 7002 SERIES PROCESSORS AND OPENFOAM FOR COMPUTATIONAL FLUID DYNAMICS, 2020, Feb](https://www.amd.com/content/dam/amd/en/documents/epyc-business-docs/solution-briefs/AMD-EPYC-7002-OpenFOAM.pdf)

* OpenFOAM motorBike為例子，測試160,000網格和351,520網格

![image](https://hackmd.io/_uploads/SJC7Gsz1R.png)

![image](https://hackmd.io/_uploads/H13NzjzyR.png)



<br>
<br>
<br>
<br>

##  Openfoam real case

<br>



| case | institution | abstract | cell | link |
| -------- | -------- | -------- | -------- | -------- |
| motorBike     | CFDSUPPORT     | 摩托車幾何形狀的外部空氣動力學。     | 1,280 | [link](https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node133.html) |
| cavity     | CFDSUPPORT     | 在二維正方形腔體中模擬簡單流動，包括層流和湍流。     | 400 | [link](https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node39.html) |
| Backward-Facing-Step     | CFDSUPPORT     | 測試湍流模型的準確性，通過模擬流體在台階處的分離和重新附著來評估模型。  | 400 | [link](https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node39.html) |
| External Aerodynamics of a Car     | CFDSUPPORT     | 汽車外部空氣動力學，包括不同幾何形狀的車身流動和發動機艙內的熱交換效應。  | 13,500 | [link](https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node256.html) |
| roomWithRadiator     | CFDSUPPORT     | 散熱器內的熱水通過傳導和輻射加熱房間，並通過自然對流傳播熱空氣。 |  | [link](https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node246.html) |
| Wind Turbine     | CFDSUPPORT     | 風力渦輪建構高級網格，評估其扭矩和功率     |  | [link](https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node276.html) |
| Verification and Validation of aerospike designs in supersonic flow (2023) | CFD FOSSEE   | 利用 OpenFOAM 模擬高速飛行器上的減阻裝置，旨在通過降低空氣阻力來提高飛行效率，並確保設計的可靠性和準確性     | approximately 790k cells | [link](https://cfd.fossee.in/case-study-project/case-study-run/236) |
| 3D modelling of Porcupine River Training Works (2021)     | CFD FOSSEE | 通過 OpenFOAM 模擬分析砥礪結構在減緩河流流速和防止河岸侵蝕方面的效果，並將模擬結果與實驗數據進行比較。     | approximately 560k cells | [link](https://cfd.fossee.in/case-study-project/case-study-run/195) |
| Wind analysis around tall buildings (2019)     | CFD FOSSEE | 使用 OpenFOAM 研究高層建築在風力作用下的影響，以指導安全施工和提高建築耐久性。     | approximately 125k cells | [link](https://cfd.fossee.in/case-study-project/case-study-run/209) |
| Pollutant Dispersion Modelling using CFD: A walkthrough of solver development in OpenFOAM (2022)     | CFD FOSSEE | 使用 OpenFOAM 對城市污染物擴散進行建模，通過開發湍流穩態求解器並與實驗對比來優化預測。     | 182,249 | [link](https://cfd.fossee.in/case-study-project/case-study-run/209) |
| Thermal Simulation of Electric Vehicle Battery (2021)     | CFD FOSSEE | 通過熱模擬分析電動車鋰離子電池的溫度變化，並使用強制對流冷卻技術來驗證電池的實時性能。     | 15,300 | [link](https://cfd.fossee.in/case-study-project/case-study-run/168) |
| Multiphase simulation using OpenFOAM for calculating ship hull resistance (2022)   | CFD FOSSEE | 使用 OpenFOAM 對船體在水中航行時的阻力進行多相模擬，並通過不同求解器和方案進行比較驗證。 | 570,000~2,000,000 (570k~2M)  | [link](https://cfd.fossee.in/case-study-project/case-study-run/225) |

<br>
<br>



---


### motorBike case :
主要目標：觀察摩托車幾何形狀的外部空氣動力學結果
![image](https://hackmd.io/_uploads/Bywrz2MkC.png)

```
##Copy *motorBike* tutorial:##
 
 
cd $FOAM_RUN
 
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ./  # solver = simpleFoam
 
cd motorBike
```

<br>

### step1.調整範例

**1.1 根據需求從初始化文件中調整物理參數。**

相關物理參數：

- 入口速度 Inlet velocity: U = 20 m/s
- 摩托車長度約 Motorbike length: L = 2 m
- 雷諾平均納維-斯托克斯 (RANS) 湍流建模 Reynolds Averaged Navier-Stokes (RANS) turbulence modeling
- 湍流參數 Turbulence parameters
- 不可壓縮流體流動 Incompressible fluid flow
- 穩態解 Steady-state solution


<br>
<br>
<br>

### step2.網格生成

**2.1 一般而言，針對湍流 RANS 流動的網格設計和選擇** https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node136.html

<br>
<br>

**2.2 分析在流體與固體接觸壁面處的網格限制情況** https://www.cfdsupport.com/OpenFOAM-Training-by-CFD-Support/node137.html

<br>
<br>

**2.3 準備OBJ模型**


**motorBike.obj.gz** 是一個壓縮的 OBJ 文件，它包含了一個摩托車模型的三維表面幾何訊息。

*(OBJ 是一種標準的 3D 模型文件格式，可以被許多 3D 建模軟體和渲染引擎識別。)*
```
## resources/geometry/motorBike.obj.gz ##

gzip -d motorBike.obj.gz  ⇒  motorBike.obj
```

解壓縮後的.obj檔案：

- 可以透過**3D建模軟體**(ex. **Blender**)或**可視化工具**(ex. **ParaView**)查看或編輯。
```
  paraview - -data=motorBike.obj
```
![Untitled](https://hackmd.io/_uploads/r1tAm3GyA.png)
- 可以做為流體流動模擬的幾何邊界進行計算。

<br>
<br>

**2.4 網格生成 Meshing**

透過編輯 *blockMeshDict* 檔案，設置適當的 域邊界 以及 背景網格。

![Untitled2](https://hackmd.io/_uploads/SyeXV2fJ0.png)
![Untitled2-1](https://hackmd.io/_uploads/SJBQNhGJA.png)

透過指令”blockMesh”生成背景網格。
```
  blockMesh
```

<br>
<br>

**2.5 執行 snappyHexMesh**

```
snappyHexMesh -overwrite #(overwrite可以保證覆蓋過去舊的網格)
```


使用上述blockMesh生成的背景網格，根據幾何模型細化網格，生成出更複雜的網格。

![Untitled3](https://hackmd.io/_uploads/rJUKE2zy0.png)


<br>
<br>
<br>

### step3.開始模擬計算

**3.1複製存放初始參數資料夾**

```
cp -r 0.orig/* 0
```

<br>
<br>

**3.2.1 run : 單核運行**
```
simpleFoam > log.simpleFoam &
```

<br>
<br>

**3.2.2 run : 平行運行**

> ##修改system/decomposeParDict的”numberOfSubdomains”數量##
numberOfSubdomains 1 ; ⇒ numberOfSubdomains 2

分割網格
```
decomposePar
```
開始平行運算
```
mpiexec -np 2 simpleFoam -parallel > log.simpleFoam &
```
使用*reconstructPar*重建網格並且使用paraview功能來查看
```
reconstructPar
paraFoam
```

![Untitled4](https://hackmd.io/_uploads/H19JS3zJA.png)


<br>
<br>

### **面對任何openfoam case running大致流程：**

**挑選模擬案例 => 
設置初始條件 => 
準備幾何模型 =>
網格生成 (背景網格設置 + 細化網格生成) => 
單核或平行運行計算 => 
後處理分析。**

<br>
<br>
<br>
<br>

##  Openfoam GPU-accelerated issue

<br>

官方openfoam並不支援GPU。

<br>


SimFlow團隊 開源套件 **[RapidCFD](https://github.com/SimFlowCFD/RapidCFD-dev)**

https://sim-flow.com/rapid-cfd-gpu/

https://github.com/SimFlowCFD/RapidCFD-dev

<br>
<br>

NTNU 使用 RapidCFD

https://www.hpc.ntnu.no/vilje/software/a-benchmark-test-for-openfoam-using-gpu-cards-flow-past-a-centrifugal-pump/

<br>
<br>

GPU Acceleration of CFD Simulations in OpenFOAM 2023 Sep 

https://www.mdpi.com/2226-4310/10/9/792

<br>
<br>
GPU-accelerated OpenFOAM simulations using PETSc4FOAM 2020 Oct

https://www.esi-group.com/sites/default/files/resource/other/1806/8th_OpenFOAM_Conference_Cineca_Spisso_2_0.pdf

<br>
<br>

QA. GPU Parallelization in OpenFoam

https://www.cfd-online.com/Forums/openfoam-programming-development/214050-gpu-parallelization-openfoam.html

