使用OpenFOAM的基本流程

任何CFD軟件的使用無非通過3個基本步驟: 前處理,CFD計算,後處理

前處理主要包括:網格的生成,物理參數的設定,初始邊界條件的設定,求解控制設定,方程求解方法的選擇,離散格式的選擇。

網格生成
     OpenFOAM帶有自己的網格生成功能blockMesh,他可以生成塊結構化網格,使用比較簡單,但對於複雜幾何,該功能實施比較複雜。
     可以採用其網格軟件如:gridgen,pointwise,gambit,icemcfd,tetgen,gmesh,ansys等生成網格,通過網格轉換功能將其轉換爲openfoam可識別的網格。我本人通常採用gridgen生成fluent網格,再採用fluentMeshToFaom功能轉換爲openfoam可識別網格。

物理參數的設置
    OpenFOAM中的物理參數文件都在當前case文件夾裏面的constant文件夾中,裏面常用的文件通常常有
    environmentalProperties:設定環境參數,重力加速度
    transportProperties:傳輸相關參數,比如黏性,密度,對於非牛頓流體的黏性模型及其參數等
    LESProperties:大渦模型及其相關的模型參數
    RASProperties: 雷諾時均模型及其相關模型參數
    thermodynamicProperties:熱物理相關參數
    這些文件的名字由solver裏面定義,可以任意更改,上面書寫是openfoam中的一個慣例,至於如何更改,請參看solver說明。

初始邊界條件的設定
初始條件和邊界條件設定都在case文件夾中的0文件夾中,在Openfoam中,每個求解變量都有自己的單獨的求解文件,下面以/OpenFOAM/OpenFOAM-1.5/tutorials/icoFoam/cavity/0/p壓力文件爲例進行說明

FoamFile   //文件頭
{
    version     2.0;  //版本號
    format      ascii; //存儲形式二進制或者ascii
    class       volScalarField;//場的類型,體心標量場
    object      p; //場的名字
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//場的單位,應當注意這裏的壓強單位並非實際壓強,而是壓強除去密度(p/rho)的單位
//因爲openfoam對動量方程直接求解的速度
dimensions      [0 2 -2 0 0 0 0];
//初始條件:內部場爲均勻場,所有全爲0,如果不均勻場則採用setField或者funkySetField對初始場進行//設置,如何使用這些功能,以後再說明。
internalField   uniform 0;
//邊界條件
boundaryField
{
    movingWall   //邊界名字    
    {
        type            zeroGradient; //邊界條件爲第二類邊界條件,梯度爲0
    }

    fixedWallsm //邊界名字    
    {
        type            zeroGradient;//邊界條件爲第二類邊界條件,梯度爲0
    }

    frontAndBack //邊界名字  
    {
//空邊界條件,說明求解是二維流動,這個在openFOAM是獨有的,如果遇到該類邊界,該邊界不參與方程離//散,也就是什麼都不做。
        type            empty;
    }
}


求解控制設定
文件爲system/controlDict,典型的controlDict文件如下

//文件頭
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

//當前case所用求解器的名字
application icoFoam;
//程序從什麼時候開始執行,startTime開始
startFrom       startTime;
//startTime 設定爲0,即從0時刻開始執行
startTime       0;
//程序什麼時候結束,endTime結束
stopAt          endTime;
//程序結束時間
endTime         0.5;
//當前算例的時間步長
deltaT          0.005;
//以什麼方式寫文件,按照時間步長寫(也可以爲runTime,即按照時間來些)
writeControl    timeStep;
//20個時間步長,20*timeStep寫一次;(如果按照時間來寫的話爲1)
writeInterval   20; 
//寫過程是否覆蓋,如果0則不覆蓋,大於0爲覆蓋,比如:2,case文件家中只有輸出文件  比如6 和 7,//當算到8時候,會覆蓋6,9會覆蓋8,以此類推
purgeWrite      0;
//寫的格式ascii或者binary
writeFormat     ascii;
//文件寫入精度
writePrecision  6;
//是否對生成數據進行壓縮,壓縮的話會戰較少空間。uncompressed/compressed;
writeCompression uncompressed;
//時間文件夾格式:fixed m.ddddd(d的個數取決於下面的timePrecision),scientific :採用科學計數//法,general:科學計數法指數小於-4用指數,大於-4用小數
timeFormat      general;
//時間文件夾精度
timePrecision  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章