OpenFOAM程序開發(fā)的基本知識(shí)
1、重要的環(huán)境變量:
WM_PROJECT_USER_DIR ―― OpenFOAM的用戶目錄
(資料圖)
FOAM_TUTORIALS ——OpenFOAM的算例目錄
FOAM _SRC ——OpenFOAM庫的源程序目錄
FOAM_APP —— OpenFOAM的求解器目錄
FOAM_APPBIN ——- OpenFOAM的求解器執(zhí)行文件目錄
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、求解器的基本文件結(jié)構(gòu)
appName 包含求解器源代碼的目錄
appName.C 求解器主程序
CreateFields.H 場(chǎng)變量的聲明和初始化
Make/ 編譯指令files 編譯需要的源程序文件和生成的目標(biāo)文件
options 編譯選項(xiàng),如鏈接庫等
appName/appName.C是求解器的主程序
appName/createFields.H聲明變量,并從文件中讀入初值,如p,物質(zhì)屬性。
appName/Make/files 所有源程序的名稱,一個(gè)文件一行,最后一行是目標(biāo)代碼的名稱和存放位置,
EXE=$(FOAM_USER_APPBIN)/appName
appName/Make/options設(shè)定查找頭文件和庫的路徑,EXE_INCS,和需要鏈接的庫EXE_LIBS
4、算例的基本文件結(jié)構(gòu)
case/ 算例目錄
0/ 包含初始和邊界條件
constant/ 包含初次讀入后,不隨時(shí)間變化的數(shù)據(jù)polyMesh/ 包含多面體網(wǎng)格數(shù)據(jù)
transportProperties/ 包含物性數(shù)據(jù)
system/ 包含計(jì)算控制和離散格式設(shè)定controlDict 包含計(jì)算控制,如時(shí)間步長(zhǎng)等
fvSchemes 包含離散格式設(shè)定
fvSolutions 包含代數(shù)求解器或SIMPLE,PISO算法設(shè)定
具體而言
case/0 每個(gè)需求解的變量需要一個(gè)文件設(shè)定其初始邊界條件
case/constant/polyMesh 網(wǎng)格數(shù)據(jù),如owner neighbour points faces boundary
case/system/transportProperties 物性數(shù)據(jù)
case/system/controlDict 設(shè)定起始終止時(shí)間,時(shí)間步長(zhǎng),輸出控制
case/system/fvSchemes 設(shè)定程序用到的每個(gè)微分算子的離散格式
case/system/fvSolution 為每個(gè)變量選擇代數(shù)方程求解器/收斂精度及PISO等算法設(shè)定
OpenFOAM程序開發(fā)的理論知識(shí)
作求解開發(fā),必須能寫出需要求解的控制方程及其定解條件,并且對(duì)于如何求解方程或方程組的步驟已經(jīng)明確。
這些流體力學(xué)、傳熱學(xué)以及相關(guān)的理論是必需的,所謂連續(xù)介質(zhì)力學(xué)中的數(shù)學(xué)模型,控制方程和定解條件就是表示它的語言。
OpenFOAM應(yīng)用類型:
1、直接利用OpenFOAM的標(biāo)準(zhǔn)的求解器進(jìn)行模擬,把OpenFOAM替代商業(yè)軟件來使用,OpenFOAM已基本具有這樣的功能,與Fuent,Star-CD等相比較,OpenFOAM顯然具有更高的求解效率和靈活性。
2、用戶自定義求解器,即利用OpenFOAM的基本類庫,如finiteVolume,OpenFOAM庫來按照自己的求解流程來編寫針對(duì)某類應(yīng)用的求解器。用戶需要開發(fā)的求解器就是類似于在OpenFOAM的applications中所看到的標(biāo)準(zhǔn)求解器icoFOAM,simpleFOAM等。顯然這一需求是非常大的,從OpenFOAM問世以來,已有很多用戶定義了自己的求解器。這類需求的特點(diǎn)是,并不需要特別關(guān)心離散和求解的最底層的知識(shí),如時(shí)間項(xiàng)離散,空間項(xiàng)離散等,關(guān)注的重點(diǎn)是求解的步驟或者流程。在編程中,通常是頂層的求解流程的開發(fā),在多數(shù)情況下可以不編譯OpenFOAM的finiteVolume和OpenFOAM庫。這種頂層的求解器的開發(fā),是我們以前常常忽略的,或者是以前沒有能力做到的。需要指出的是,商業(yè)軟件中的所謂udf,user subroutine和這是不可相比的。
3、用戶自己定義離散方法等。對(duì)于研究離散格式、代數(shù)求解器等人來說,更關(guān)注時(shí)間項(xiàng)ddt,擴(kuò)散項(xiàng)Laplacian,對(duì)流項(xiàng)div是如何離散的,能否有更高效更高精度的離散方法,這需要修改finiteVolume庫和OpenFOAM庫中對(duì)應(yīng)的代碼。尤其是對(duì)流項(xiàng),盡管OpenFOAM已經(jīng)提供了基于NVD和TVD的模板和40多種有名的高階高精度格式,但可以預(yù)見,這仍然是不夠的,畢竟對(duì)流項(xiàng)的離散仍然是目前CFD的重點(diǎn)研究方向。
舉例
下面采用OpenFOAM來開發(fā)一個(gè)用戶自己的求解器。主要是利用OpenFOAM的標(biāo)準(zhǔn)求解器icoFoam,用戶不需要寫任何代碼,只為為了熟悉OpenFOAM程序開發(fā)的環(huán)境和步驟。步驟:
1、將icoFoam目錄拷貝到新的目錄
可采用下面的Linux的命令實(shí)現(xiàn):到OpenFOAM的incompressible目錄
cd applications/incompressiblecp –r icoFoam myicoFoam
以上只是復(fù)制目錄icoFoam到新的位置,并且新目錄名為myicoFoam
cd myicoFoam
進(jìn)入新的目錄,查看一下,可以看到里面的文件和icoFoam中是否一樣
2、原文件改名,并且刪除依賴文件
將icoFoam.C改名myicoFoam.C
mv icoFoam.C myicoFoam.C
刪除依賴文件
rm icoFoam.dep
3、修改編譯文件files和options
進(jìn)入Make目錄,打開files文件將icoFoam.C 源程序文件名
EXE = \$(FOAM_APPBIN)/icoFoam 可執(zhí)行文件名
修改為
myicoFoam.C 源程序文件名
EXE = \$(FOAM_APPBIN)/myicoFoam 可執(zhí)行文件名
此例中options不需修改,可以打開看看
EXE_INC = \ 頭文件包含-I$(LIB_SRC)/finiteVolume/lnIncludeEXE_LIBS = \ 鏈接庫-lfiniteVolume
4、刪除原來的obj文件rm –rf linuxGccDPOptcd ..
5、編譯
wmake
6、檢驗(yàn)一下
到tutorial目錄,檢驗(yàn)一下
myicoFoam . cavity
標(biāo)簽: