OpenFOAM (C1) == <br> <br> ## **介紹** ##### 簡介 OpenFOAM(英文 Open Source Field Operation and Manipulation 的縮寫,意為開源的場運算和處理軟體)是對連續媒介力學問題進行數值計算的C++自由軟體工具包,其代碼遵守GNU通用公眾授權條款。它可進行資料預處理、後處理和自訂求解器,常用於計算流體力學(CFD)領域。[wiki](https://zh.wikipedia.org/zh-tw/OpenFOAM) ##### 當前版本 ESI-OpenCFD的2312版本。 ##### 應用領域 流體力學與多物理場景模擬。 ##### 總覽 *- MPI : **有*** *- OpenMP : **有*** *- GPU : **無*** *- 官方 Docker Image : **有*** [OpenFOAM Official Website](https://www.openfoam.com/) <br> --- ## **建議硬體配置** ##### 配置 - CPU : 建議使用多核心處理器,例如 AMD EPYC 或 Intel Xeon。 - Number of cores : 每個記憶體通道建議配置 2-4 個 CPU 核心。 - Memory : 對於少於 10M 網格的模擬,建議配置 32GB RAM。 對於等於 10M 網格的模擬,若在單一電腦上執行多項分析,則需 64GB RAM。 對於超過 10M 網格的模擬,每增加 1M 網格,建議增加 2GB RAM。 [Hardware for CFD](https://www.linkedin.com/pulse/hardware-cfd-lubos-pirkl/) [Hardware for CFD simulations CFDSUPPORT](https://www.cfdsupport.com/hardware-for-cfd.html) [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) <br> --- ## **安裝 & Docker Image** ##### 官方 docker image, singularity image 目前使用版本是[opencfd/openfoam-default:2312](https://hub.docker.com/layers/opencfd/openfoam-default/2312/images/sha256-280e6f45f7614086cb74c20a074f445900c1597ef339b609634f8aa03e8d3172?context=explore) ![image](https://hackmd.io/_uploads/H1placq8C.png) 透過singularity轉換成.sif作為主要使用image。 ``` singularity build openfoam-default-2312.sif docker://opencfd/openfoam-default ``` <br> --- ## **OpenFOAM基本用法** ##### OpenFOAM 基本指令說明 ``` singularity run "image.sif" blockMesh # 生成網格 singularity run "image.sif" checkMesh # 檢查網格 singularity run "image.sif" "foamExec" # 運行模擬,foamExec 如:simpleFoam, pisoFoam ... ``` [OpenFOAM v2312 Basic Usage](https://doc.openfoam.com/2312/fundamentals/command-line/) [Singularity Quick Start](https://apptainer.org/user-docs/master/quick_start.html) --- ## **OpenFOAM補充說明** ##### OpenFOAM 檔案說明 ``` 以 tutorials/incompressible/simpleFoam/simpleCar 為例子 - 0.orig # 初始條件檔案目錄,通常包含仿真初始的場景數據,通常需要複製一份"0"資料夾出來 - constant # 固定參數檔案目錄,包含網格,物理屬性和其他常量訊息 - system # 系統設置檔案目錄,以下詳細說明 Allclean # 清理腳本,通常用於刪除仿真過程中產生的臨時文件 Allrun # 運行腳本,通常用於提供自動化模擬步驟 README # 說明文件 /system底下常見重要系統檔案 blockMeshDict # 定義用於生成網格參數,網格尺寸、邊界和幾何尺寸 snappyHexMeshDict # 複雜幾何網格生成設定,定義網格劃分、細化和調整參數 controlDict # 仿真的控制設定,包含時間步長,寫出頻率和時間參數 fvSchemes # 數值計算方案,定義離散化方案,如時間、空間和插值方法 fvSolution # 求解器設定,定義各方程式的求解器,收斂標準和鬆弛因子 decomposeParDict # 域分解設定,通常分解數值要和mpirun -np值相同 surfaceFeatureExtractDict # 提取表面特徵設定,用格網格生成中的表面特徵提取 ``` <br> --- ## **相關平行運算的方法** ##### mpirun 運行mpirun指令需搭配**分割域**和**合併域**指令 ``` singularity run "image.sif" decomposePar -force ; # -force為強制分割 singularity run "image.sif" reconstructPar ; ``` decomposeParDict位在system目錄底下, 變數 : numberOfSubdomains設定的數值,必須和 mpirun -np "值" **相同** ``` system/decomposeParDict numberOfSubdomains <int>; ``` 主要運行mpirun指令 ``` mpirun --allow-run-as-root --host ${MPI_HOST} -np "num" singularity run "image.sif" "foamExec" -parallel 備註1.若使用者為root請代 "--allow-run-as-root" 備註2.${MPI_HOST}紀錄worker資訊,若在k8s volcano job上執行則會自動抓取,只需代入 "--host ${MPI_HOST}" ``` [更多相關詳細解釋](https://doc.openfoam.com/2312/tools/parallel/) <br> ##### openMP [v2312 openMP說明](https://www.openfoam.com/news/main-news/openfoam-v2312/usability#compilation) [v2212 openMP說明](https://www.openfoam.com/news/main-news/openfoam-v2212/usability) <br> --- ## **官方範例/實際案例 教學** ##### 官方範例說明 [官方tutorial目錄下載位置](https://develop.openfoam.com/Development/openfoam/-/tree/maintenance-v2312/tutorials?ref_type=heads) 以 tutorials/incompressible/simpleFoam/simpleCar 為例子 進入simpleCar目錄內為workspace ![image](https://hackmd.io/_uploads/rJM9Snc8C.png) ``` cp -r 0.orig 0 # 複製case變數 singularity run "image.sif" blockMesh singularity run "image.sif" topoSet singularity run "image.sif" createPatch -overwrite singularity run "image.sif" simpleFoam # 指令參考Allrun腳本 ``` ##### 實際範例說明 ###### 1. Real case - Pollutant Dispersion Modelling using CFD [Link](https://cfd.fossee.in/case-study-project/case-study-run/225) **主旨**:在冬季,空氣質量指數會上升到危及生命的水平,因此需要對污染物進行科學研究和建模,以便進行有效的管理。 為了解決這個問題,作者提出了使用計算流體動力學(CFD)方法和不同的湍流模型來模擬污染物的擴散。主要目標是開發一個用於被動傳輸污染物的湍流穩態求解器。 這項工作將通過與漢堡大學進行的CEDVAL實驗進行驗證。結果顯示,k-ϵ湍流模型比k-ω SST湍流模型更能準確預測污染物的擴散行為。 <br> **網格數量** : 182,249 **大約運行時間** : 30min / cpu **mpirun 參數** : np=2 **運行環境** : k8s volcano mpirun job, 搭配外部storage,使用 helm chart install 部屬 **目錄** : ``` Pollutant\Pollutant_Dispersion_Modelling_Using_Cfd__A_Walkthrough_Of_Solver_Development_In_Openfoam_By_Mr_Binayak_Lohani\Dispersion_CFD_solver_development 底下會有兩個資料夾 /case_study 和 /code,主要使用的case為/case_study/pollutant_kepsilon /code為後續編譯"turbScalarTransportSimpleFoam"功能資料夾 ``` **運行模擬指令** : ``` # 配置好SINGULARITY變數名稱 SINGULARITY="singularity run -B /data:/mntdata --pwd /mntdata/code/turbScalarTransportSimpleFoam /img/openfoam-default-2312.sif"; SINGULARITY2="singularity run -B /data:/mntdata --pwd /mntdata/case_study/pollutant_kepsilon /img/openfoam-default-2312.sif"; # 資料前處理 cd /data/case_study/pollutant_kepsilon/ ; rm -rf constant/extendedFeatureEdgeMesh ; rm -f constant/triSurface/buildings.eMesh ; rm -rf 0 ; cp -r 0.orig 0 ; # 使用OpenFOAM編譯功能對檔案進行編譯 ${SINGULARITY} wclean ; ${SINGULARITY} wmake ; # 特徵提取,網格生成,細化網格,域分割,主要模擬,域合併 相關步驟 ${SINGULARITY2} surfaceFeatureExtract ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY2} blockMesh ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY2} snappyHexMesh -overwrite ; ${SINGULARITY2} topoSet ; ${SINGULARITY2} transformPoints -scale 0.001 ; ${SINGULARITY2} decomposePar -force ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 singularity run --writable-tmpfs -B /data/code:/mntdata/code /img/openfoam-default-2312.sif bash -c "wmake /mntdata/code/turbScalarTransportSimpleFoam && turbScalarTransportSimpleFoam -parallel" ; ${SINGULARITY2} reconstructPar ; ``` 完成後在/case_study/pollutant_kepsilon底下(與/system同層) - 會發現有processor"num"資料夾,裡面為每個timestep紀錄的資訊。 - 在同層創建空白檔案"result.foam"(名稱不重要),可供後續paraview使用。 使用paraview可視化數據工具,開啟UI後選取result.foam,查看運行完成後的結果。 ![pollutant-1](https://hackmd.io/_uploads/HJhe7ojLR.png) ![pollutant-2](https://hackmd.io/_uploads/H1f-mssLC.png) <br> ###### 2. Real case - Std Tool head Openfoam [Link](https://github.com/yellowfish543/StdToolheadOpenfoam/tree/main) **主旨**:使用OpenFOAM對3D打印機刷頭進行流體動力學分析的標準化方法。通過此分析,我們可以深入了解刷頭周圍的空氣流動特性,確保冷卻效果並優化打印質量。 <br> **網格數量** : 384,598 **大約運行時間** : 120min / cpu **mpirun 參數** : np=2 **運行環境** : k8s volcano mpirun job, 搭配外部storage,使用 helm chart install 部屬 **目錄** : ``` 主要有兩個資料夾 StdToolheadOpenfoam/01_Geometry # 提供幾何結構的變數值 StdToolheadOpenfoam/02_Run # 主要運行模擬的目錄 ``` **運行模擬指令** : ``` # 配置好SINGULARITY變數名稱 SINGULARITY="singularity run -B /data:/mnt --pwd /mnt/02_Run /img/openfoam-default-2312.sif"; # 資料前處理 cd /data/02_Run ; rm -rf ./processor* ./dynamicCode ./0 ; rm -rf ./processor* ./constant/extendedFeatureEdgeMesh ./constant/polyMesh ./constant/triSurface/* ./logs ./log* ./postProcessing ; mkdir -p ./constant/triSurface/ ; cp -rf ../01_Geometry/* ./constant/triSurface/ ; # 網格生成,特徵提取,域分解,細化網格,檢查生成網格品質,域合併步驟 ${SINGULARITY} blockMesh ; ${SINGULARITY} surfaceFeatureExtract ; ${SINGULARITY} decomposePar ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY} bash -c "snappyHexMesh -overwrite -parallel" ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY} bash -c "checkMesh -parallel -allTopology -allGeometry -writeSets vtk" ; ${SINGULARITY} bash -c "reconstructParMesh -constant" ; # 資料處理 rm -rf ./processor* ./postProcessing ./0 ; cp -r 0.org/. 0 ; # 域分解,生成網格,主要模擬,域合併步驟 ${SINGULARITY} decomposePar ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY} bash -c "renumberMesh -overwrite -parallel" ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY} bash -c "potentialFoam -parallel -initialiseUBCs" ; mpirun --allow-run-as-root --host ${MPI_HOST} -np 2 ${SINGULARITY} bash -c "pimpleFoam -parallel" ; ${SINGULARITY} reconstructParMesh ; ``` 完成後在/StdToolheadOpenfoam/02_Run 底下(與/system同層) - 會發現有processor"num"資料夾,裡面為每個timestep紀錄的資訊。 - 在同層創建空白檔案"result.foam"(名稱不重要),可供後續paraview使用。 使用paraview可視化數據工具,開啟UI後選取result.foam,查看運行完成後的結果。 ![stdtoolhead-1](https://hackmd.io/_uploads/r1CidijUR.png) ![stdtoolhead-3](https://hackmd.io/_uploads/SJZ2_ijLC.png) <br> --- ## **k8s平台上OpenFOAM測試流程** ##### 下載測試資料 **Windows 下載** [StdToolheadOpenfoam - 測試資料下載連結](https://github.com/yellowfish543/StdToolheadOpenfoam/tree/main) 點選網頁中的`Code -> Download ZIP` 會得到`StdToolheadOpenfoam-main.zip`,解壓縮後可得到測試資料 ![image](https://hackmd.io/_uploads/Syfapj4K0.png) **Linux 下載** 請確保環境有`git`軟體包 執行`git clone https://github.com/yellowfish543/StdToolheadOpenfoam.git` 完成後可以看到如畫面中類似的檔案位置,代表成功 ![image](https://hackmd.io/_uploads/SkjHCFNK0.png) **修改測試資料** OpenFOAM使用mpirun功能和檔案參數有關 請打開`StdToolheadOpenfoam-main\02_Run\system\decomposeParDict`檔案 變數numProc修改值為2,`numProc 16;` -> `numProc 2;`,和`mpirun -np 2`的值要相同 ![image](https://hackmd.io/_uploads/B1YQtQvKR.png) **上傳測試資料** 到`Rancher`頁面,選擇左方`HPC`,並點選`File Explorer`,進入`File Explorer`,確認當前路徑`/Pool/hpc/hpc33/Home/rd3user`(若當前使用rd3user帳號) 新建立資料夾名稱為`openfoam_data`,上傳`StdToolheadOpenfoam-main`內的測試資料 放入測試資料後即可關閉視窗 ![image](https://hackmd.io/_uploads/B1dX5XwKR.png) **建立 HPC Job** 打開`Apps`選項,搜尋`OpenFOAM`,選擇版本`OpenFOAM`,點選`Submit`新建`HPC Job` ![image](https://hackmd.io/_uploads/B1sMfcNKA.png) 進到頁面後,請在`Command`的欄位確認為以下指令,並按下`Create`送出`HPC Job` ![image](https://hackmd.io/_uploads/BJO667vFA.png) (提醒:若要測試不同指令版本建議使用 **乾淨** 的測試資料,以避免錯誤) **Standard版本** ``` cd openfoam_data/02_Run ; rm -rf ./processor* ./dynamicCode ./0 ; rm -rf ./processor* ./constant/extendedFeatureEdgeMesh ./constant/polyMesh ./constant/triSurface/* ./logs ./log* ./postProcessing ; mkdir -p ./constant/triSurface/ ; cp -rf ../01_Geometry/* ./constant/triSurface/ ; singularity run $APP_BINARY blockMesh ; singularity run $APP_BINARY surfaceFeatureExtract ; singularity run $APP_BINARY snappyHexMesh -overwrite ; singularity run $APP_BINARY checkMesh ; ``` **MPIRUN版本** ``` cd openfoam_data/02_Run ; rm -rf ./processor* ./dynamicCode ./0 ; rm -rf ./processor* ./constant/extendedFeatureEdgeMesh ./constant/polyMesh ./constant/triSurface/* ./logs ./log* ./postProcessing ; mkdir -p ./constant/triSurface/ ; cp -rf ../01_Geometry/* ./constant/triSurface/ ; singularity run $APP_BINARY blockMesh ; singularity run $APP_BINARY surfaceFeatureExtract ; singularity run $APP_BINARY decomposePar ; mpirun --host $MPI_HOST -np $NODE_NUM singularity run $APP_BINARY snappyHexMesh -overwrite -parallel ; mpirun --host $MPI_HOST -np $NODE_NUM singularity run $APP_BINARY checkMesh -parallel -allTopology -allGeometry -writeSets vtk ; singularity run $APP_BINARY reconstructParMesh -constant ; ``` **HPC Job 順利執行完畢** 請到`HPC`的`Volcano Job`中,查看`openfoam`的任務是否為`Completed`, ![image](https://hackmd.io/_uploads/BkXN2fLYC.png) 可至`Workloads->Pods`點開任務的`View Logs`,查看是否有以下相關資訊, 若有代表成功執行結束 Standard版本 ![image](https://hackmd.io/_uploads/B1ZoyuDYC.png) ``` /*---------------------------------------------------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2312 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ Build : _c39a0f64-20231220 OPENFOAM=2312 version=2312 Arch : "LSB;label=32;scalar=64" Exec : checkMesh Date : Jul 31 2024 Time : 16:01:24 Host : openfoam-job-mpi-snnbp-openfoam-master-0 PID : 1069 I/O : uncollated Case : /home/rd3user2/openfoam_data/02_Run nProcs : 1 trapFpe: Floating point exception trapping enabled (FOAM_SIGFPE). fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 5, maxFileModificationPolls 20) allowSystemOperations : Allowing user-supplied system call operations // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Create time Create mesh for time = 0 Check mesh... Time = 0 Mesh stats points: 384604 faces: 1022404 internal faces: 951929 cells: 319890 faces per cell: 6.17191222 boundary patches: 9 point zones: 1 face zones: 0 cell zones: 0 Overall number of cells of each type: hexahedra: 283415 prisms: 11153 wedges: 0 pyramids: 0 tet wedges: 70 tetrahedra: 0 polyhedra: 25252 Breakdown of polyhedra by number of faces: faces number of cells 4 946 5 1568 6 5782 7 249 8 63 9 11166 10 3 11 17 12 4567 13 2 14 1 15 767 16 1 17 1 18 119 Checking topology... Boundary definition OK. Cell to face addressing OK. Point usage OK. Upper triangular ordering OK. Face vertices OK. Number of regions: 1 (OK). Checking patch topology for multiply connected surfaces... Patch Faces Points Surface topology inletLeft 1095 1233 ok (non-closed singly connected) inletRight 1170 1309 ok (non-closed singly connected) outletAtmosphere 9788 10637 ok (non-closed singly connected) walls 9572 10330 ok (non-closed singly connected) wallsDuctLeft 8608 8875 ok (non-closed singly connected) wallsDuctRight 8731 8989 ok (non-closed singly connected) wallsNozzle 5927 6966 ok (non-closed singly connected) wallsPart 15672 15805 ok (non-closed singly connected) wallsBuildplate 9912 10269 ok (non-closed singly connected) ".*" 70475 72541 ok (closed singly connected) Checking faceZone topology for multiply connected surfaces... No faceZones found. Checking basic cellZone addressing... No cellZones found. Checking basic pointZone addressing... PointZone PointsBoundingBox frozenPoints 0(1e+150 1e+150 1e+150) (-1e+150 -1e+150 -1e+150) Checking geometry... Overall domain bounding box (-0.0326955393 -0.04719531576 -0.02485683717) (0.03450378129 0.03108337462 0.01421189995) Mesh has 3 geometric (non-empty/wedge) directions (1 1 1) Mesh has 3 solution (non-empty) directions (1 1 1) Boundary openness (3.076160398e-16 3.969110316e-17 -3.595320836e-16) OK. Max cell openness = 3.996389462e-16 OK. Max aspect ratio = 5.888404975 OK. Minimum face area = 1.142514911e-08. Maximum face area = 1.138628296e-05. Face area magnitudes OK. Min volume = 6.313566009e-12. Max volume = 3.08492413e-08. Total volume = 0.0001897444988. Cell volumes OK. Mesh non-orthogonality Max: 34.99981569 average: 8.61123656 Non-orthogonality check OK. Face pyramids OK. Max skewness = 2.920610935 OK. Coupled point location match (average 0) OK. Mesh OK. End ``` MPIRUN版本 ![image](https://hackmd.io/_uploads/H1n4NOwKC.png) ``` /*---------------------------------------------------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2312 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ Build : _c39a0f64-20231220 OPENFOAM=2312 version=2312 Arch : "LSB;label=32;scalar=64" Exec : reconstructParMesh -constant Date : Jul 31 2024 Time : 16:10:18 Host : openfoam-job-mpi-zxuma-openfoam-master-0 PID : 1338 I/O : uncollated Case : /home/rd3user2/openfoam_mpirun_data/02_Run nProcs : 1 trapFpe: Floating point exception trapping enabled (FOAM_SIGFPE). fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 5, maxFileModificationPolls 20) allowSystemOperations : Allowing user-supplied system call operations // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Create time Merge individual processor meshes back into one master mesh. Use if the original master mesh has been deleted or the processor meshes have been modified (topology change). This tool will write the resulting mesh to a new time step and construct xxxxProcAddressing files in the processor meshes so reconstructPar can be used to regenerate the fields on the master mesh. Not well tested & use at your own risk! Merge assuming correct, fully matched procBoundaries. Found 2 processor directories Reading database "02_Run/processor0" Reading database "02_Run/processor1" Time = constant Writing merged mesh to "constant/polyMesh" Reconstructing addressing from processor meshes to the newly reconstructed mesh Processor 0 Read processor mesh: "02_Run/processor0" Writing addressing : "02_Run/processor0/constant/polyMesh" pointProcAddressing faceProcAddressing cellProcAddressing boundaryProcAddressing Processor 1 Read processor mesh: "02_Run/processor1" Writing addressing : "02_Run/processor1/constant/polyMesh" pointProcAddressing faceProcAddressing cellProcAddressing boundaryProcAddressing End ``` <br> --- ## **相關其他研究文獻** ##### OpenFOAM 應用領域 ( 參考CFD.FOSSEE,共104筆 ) - 熱對流:研究流體在加熱或冷卻過程中的流動和熱傳遞特性。 - 氣象學:研究大氣現象和天氣過程。 - 多相流動:研究兩種或多種不同相(如固體、液體和氣體)在流動過程中的相互作用。 - 航空工程:研究與航空器設計、製造和操作相關的流體動力學。 - 熱交換:研究不同溫度流體之間的熱能轉移過程。 - 農業工程:應用工程原理和技術來改進農業生產和農業設備。 - 風力發電:研究風力渦輪機的設計和運行,以產生電能。 - 建築工程:研究與建築物設計和施工相關的流體力學和熱管理。 - 消毒技術:研究消毒過程中的流體動力學,以提高消毒效率。 - 電池技術:研究電池的冷卻和熱管理技術,以提高性能和安全性。 - 磁流體動力學:研究磁場對導電流體流動的影響。 - 彈道學:研究彈丸運動過程中的流體動力學。 - 水處理:研究水處理過程中的流體力學,以提高水質。 - 建築通風:研究建築物內部的空氣流動和通風系統設計。 - 河流工程:研究河流流動和河道設計,以防止洪水和侵蝕。 - 電池冷卻技術:研究電池在工作過程中的冷卻方法,以延長壽命和提高效率。 - 水力學:研究流體在自然和人造水體中的運動和行為。 - 燃燒工程:研究燃燒過程中的流體動力學和熱傳遞。 - 電池冷卻:專門針對電池的熱管理和冷卻技術。 - 運動科學:研究人體運動過程中的流體動力學和熱管理。 - 航空航天:研究航天器和飛機在大氣和太空中的運動和行為。 - 噴射工程:研究流體噴射過程中的動力學和應用。 - 高超音速流動:研究超音速(馬赫數超過5)流動過程中的流體動力學。 - 電機冷卻:研究電機運行過程中的冷卻技術和熱管理。 - 醫學工程:應用流體動力學於醫學設備和過程,如血流動力學。 - 熱傳遞:研究熱量在不同材料和流體之間的傳遞過程。 - 核工程:研究核反應堆運行過程中的流體動力學和熱管理。 - 室內空氣質量:研究改善建築物內部空氣質量的技術和方法。 - 海洋工程:研究海洋結構物和船舶周圍的流體動力學。 - 層流動力學:研究流體在層流條件下的運動和行為。 - 流體動力學:廣泛研究流體的運動、行為和作用力。 - 汽車工程:研究汽車設計和運行過程中的流體動力學和熱管理。 - 流體力學:研究流體的基本性質和運動規律。 - 數值方法:應用數值計算技術模擬和分析流體動力學問題。 - 鐵路工程:研究火車和軌道設施的流體動力學。 - 機械工程:應用流體力學於機械設計和運行過程。 - 熱管理:研究各種系統和設備的熱量控制和管理技術。 - 賽車運動:研究賽車設計和運行過程中的空氣動力學。 [OpenFOAM Time and data input/output control](https://www.openfoam.com/documentation/user-guide/6-solving/6.1-time-and-data-inputoutput-control) [HPC app - OpenFOAM introduction 1](https://hackmd.io/kAj0HgYkT4egmzh5MYUaBQ?view) [HPC app - OpenFOAM introduction 2](https://hackmd.io/@Willie-Wang/SJzoA_lfA)