一饺律、OpenFOAM應(yīng)用類型:
1胧瓜、直接利用OpenFOAM的標(biāo)準(zhǔn)的求解器進(jìn)行模擬矢棚,把OpenFOAM替代商業(yè)軟件來使用,OpenFOAM已基本具有這樣的功能和人氣府喳,與Fuent蒲肋,Star-CD等相比較,OpenFOAM顯然具有更高的求解效率和靈活性钝满。
2兜粘、用戶自定義求解器,即利用OpenFOAM的基本類庫弯蚜,如finiteVolume孔轴,OpenFOAM庫來按照自己的求解流程來編寫針對某類應(yīng)用的求解器。用戶需要開發(fā)的求解器就是類似于在OpenFOAM的applications中所看到的標(biāo)準(zhǔn)求解器icoFOAM碎捺,simpleFOAM等路鹰。顯然這一需求是非常大的,從OpenFOAM問世以來收厨,已有很多用戶定義了自己的求解器晋柱。這類需求的特點(diǎn)是,并不需要特別關(guān)心離散和求解的最底層的知識诵叁,如時(shí)間項(xiàng)離散雁竞,空間項(xiàng)離散等,關(guān)注的重點(diǎn)是求解的步驟或者流程黎休。在編程中浓领,通常是頂層的求解流程的開發(fā)玉凯,在多數(shù)情況下可以不編譯OpenFOAM的finiteVolume和OpenFOAM庫。這種頂層的求解器的開發(fā)联贩,是我們以前常常忽略的漫仆,或者是以前沒有能力做到的。需要指出的是泪幌,商業(yè)軟件中的所謂udf盲厌,user subroutine和這是不可相比的。
3祸泪、用戶自己定義離散方法等吗浩。對于研究離散格式、代數(shù)求解器等人來說没隘,更關(guān)注時(shí)間項(xiàng)ddt懂扼,擴(kuò)散項(xiàng)Laplacian,對流項(xiàng)div是如何離散的右蒲,能否有更高效更高精度的離散方法阀湿,這需要修改finiteVolume庫和OpenFOAM庫中對應(yīng)的代碼。尤其是對流項(xiàng)瑰妄,盡管OpenFOAM已經(jīng)提供了基于NVD和TVD的模板和40多種有名的高階高精度格式陷嘴,但可以預(yù)見,這仍然是不夠的间坐,畢竟對流項(xiàng)的離散仍然是目前CFD的重點(diǎn)研究方向灾挨。
二、OpenFOAM程序開發(fā)的基本知識
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 場變量的聲明和初始化
- 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í)間步長等
- 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í)間步長,輸出控制
case/system/fvSchemes 設(shè)定程序用到的每個(gè)微分算子的離散格式
case/system/fvSolution 為每個(gè)變量選擇代數(shù)方程求解器/收斂精度及PISO等算法設(shè)定
三回官、OpenFOAM程序開發(fā)的理論知識
作求解開發(fā)曹宴,必須能寫出需要求解的控制方程及其定解條件,并且對于如何求解方程或方程組的步驟已經(jīng)明確歉提。
這些流體力學(xué)笛坦、傳熱學(xué)以及相關(guān)的理論是必需的,所謂連續(xù)介質(zhì)力學(xué)中的數(shù)學(xué)模型苔巨,控制方程和定解條件就是表示它的語言版扩。
四、OpenFOAM程序開發(fā)的最簡單的例子
下面采用OpenFOAM來開發(fā)一個(gè)用戶自己的求解器侄泽。主要是利用OpenFOAM的標(biāo)準(zhǔn)求解器icoFoam礁芦,用戶不需要寫任何代碼,只為為了熟悉OpenFOAM程序開發(fā)的環(huán)境和步驟悼尾。
步驟:
1柿扣、將icoFoam目錄拷貝到新的目錄
可采用下面的Linux的命令實(shí)現(xiàn):
到OpenFOAM的incompressible目錄
cd applications/incompressible
cp –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/lnInclude
EXE_LIBS = \ 鏈接庫
-lfiniteVolume
4翻伺、刪除原來的obj文件
rm –rf linuxGccDPOpt
cd ..
5、編譯
wmake
6沮焕、檢驗(yàn)一下
到tutorial目錄吨岭,檢驗(yàn)一下
myicoFoam . cavity