OpenFOAM程序開發入門教程

2023-04-18 17:26:26 來源:軟服之家

OpenFOAM程序開發的基本知識

1、重要的環境變量:

WM_PROJECT_USER_DIR ―― OpenFOAM的用戶目錄


(資料圖)

FOAM_TUTORIALS ——OpenFOAM的算例目錄

FOAM _SRC ——OpenFOAM庫的源程序目錄

FOAM_APP —— OpenFOAM的求解器目錄

FOAM_APPBIN ——- OpenFOAM的求解器執行文件目錄

FOAM_RUN ——用戶的算例目錄

2、重要的shell:

run = cd to $FOAM_RUN

src = cd to $FOAM_SRC

APP = cd to $FOAM_APP

util = cd to $FOAM_APP/utilities

sol = cd to $FOAM_APP/solvers

tut = cd to $FOAM_TUTORIALS

3、求解器的基本文件結構

appName 包含求解器源代碼的目錄

appName.C 求解器主程序

CreateFields.H 場變量的聲明和初始化

Make/ 編譯指令files 編譯需要的源程序文件和生成的目標文件

options 編譯選項,如鏈接庫等

appName/appName.C是求解器的主程序

appName/createFields.H聲明變量,并從文件中讀入初值,如p,物質屬性。

appName/Make/files 所有源程序的名稱,一個文件一行,最后一行是目標代碼的名稱和存放位置,

EXE=$(FOAM_USER_APPBIN)/appName

appName/Make/options設定查找頭文件和庫的路徑,EXE_INCS,和需要鏈接的庫EXE_LIBS

4、算例的基本文件結構

case/ 算例目錄

0/ 包含初始和邊界條件

constant/ 包含初次讀入后,不隨時間變化的數據polyMesh/ 包含多面體網格數據

transportProperties/ 包含物性數據

system/ 包含計算控制和離散格式設定controlDict 包含計算控制,如時間步長等

fvSchemes 包含離散格式設定

fvSolutions 包含代數求解器或SIMPLE,PISO算法設定

具體而言

case/0 每個需求解的變量需要一個文件設定其初始邊界條件

case/constant/polyMesh 網格數據,如owner neighbour points faces boundary

case/system/transportProperties 物性數據

case/system/controlDict 設定起始終止時間,時間步長,輸出控制

case/system/fvSchemes 設定程序用到的每個微分算子的離散格式

case/system/fvSolution 為每個變量選擇代數方程求解器/收斂精度及PISO等算法設定

OpenFOAM程序開發的理論知識

作求解開發,必須能寫出需要求解的控制方程及其定解條件,并且對于如何求解方程或方程組的步驟已經明確。

這些流體力學、傳熱學以及相關的理論是必需的,所謂連續介質力學中的數學模型,控制方程和定解條件就是表示它的語言。

OpenFOAM應用類型:

1、直接利用OpenFOAM的標準的求解器進行模擬,把OpenFOAM替代商業軟件來使用,OpenFOAM已基本具有這樣的功能,與Fuent,Star-CD等相比較,OpenFOAM顯然具有更高的求解效率和靈活性。

2、用戶自定義求解器,即利用OpenFOAM的基本類庫,如finiteVolume,OpenFOAM庫來按照自己的求解流程來編寫針對某類應用的求解器。用戶需要開發的求解器就是類似于在OpenFOAM的applications中所看到的標準求解器icoFOAM,simpleFOAM等。顯然這一需求是非常大的,從OpenFOAM問世以來,已有很多用戶定義了自己的求解器。這類需求的特點是,并不需要特別關心離散和求解的最底層的知識,如時間項離散,空間項離散等,關注的重點是求解的步驟或者流程。在編程中,通常是頂層的求解流程的開發,在多數情況下可以不編譯OpenFOAM的finiteVolume和OpenFOAM庫。這種頂層的求解器的開發,是我們以前常常忽略的,或者是以前沒有能力做到的。需要指出的是,商業軟件中的所謂udf,user subroutine和這是不可相比的。

3、用戶自己定義離散方法等。對于研究離散格式、代數求解器等人來說,更關注時間項ddt,擴散項Laplacian,對流項div是如何離散的,能否有更高效更高精度的離散方法,這需要修改finiteVolume庫和OpenFOAM庫中對應的代碼。尤其是對流項,盡管OpenFOAM已經提供了基于NVD和TVD的模板和40多種有名的高階高精度格式,但可以預見,這仍然是不夠的,畢竟對流項的離散仍然是目前CFD的重點研究方向。

舉例

下面采用OpenFOAM來開發一個用戶自己的求解器。主要是利用OpenFOAM的標準求解器icoFoam,用戶不需要寫任何代碼,只為為了熟悉OpenFOAM程序開發的環境和步驟。步驟:

1、將icoFoam目錄拷貝到新的目錄

可采用下面的Linux的命令實現:到OpenFOAM的incompressible目錄

cd applications/incompressiblecp –r icoFoam myicoFoam

以上只是復制目錄icoFoam到新的位置,并且新目錄名為myicoFoam

cd myicoFoam

進入新的目錄,查看一下,可以看到里面的文件和icoFoam中是否一樣

2、原文件改名,并且刪除依賴文件

將icoFoam.C改名myicoFoam.C

mv icoFoam.C myicoFoam.C

刪除依賴文件

rm icoFoam.dep

3、修改編譯文件files和options

進入Make目錄,打開files文件將icoFoam.C 源程序文件名

EXE = \$(FOAM_APPBIN)/icoFoam 可執行文件名

修改為

myicoFoam.C 源程序文件名

EXE = \$(FOAM_APPBIN)/myicoFoam 可執行文件名

此例中options不需修改,可以打開看看

EXE_INC = \ 頭文件包含-I$(LIB_SRC)/finiteVolume/lnIncludeEXE_LIBS = \ 鏈接庫-lfiniteVolume

4、刪除原來的obj文件rm –rf linuxGccDPOptcd ..

5、編譯

wmake

6、檢驗一下

到tutorial目錄,檢驗一下

myicoFoam . cavity

標簽:

上一篇:
下一篇: