OpenFOAM常用類的一些總結(jié)_第1頁
OpenFOAM常用類的一些總結(jié)_第2頁
OpenFOAM常用類的一些總結(jié)_第3頁
OpenFOAM常用類的一些總結(jié)_第4頁
OpenFOAM常用類的一些總結(jié)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、OpenFOAM常用類的一些總結(jié)OpenFOAM中有許多類,每個類的功能都很強大,這也使它面向?qū)ο笤O計得以實現(xiàn)。 對于程序,最常用到的,也是最底層的就是數(shù)據(jù),在OpenFOAM中引入了三類基礎數(shù)據(jù)類型:標量scalar, 向量vector, 張量tensor.這三個中數(shù)據(jù)類型,也是FOAM中最基礎的三個類。(還有一個比較重要的就是bool和label,前者就是是非型,及對錯型,只不過是更擴展一些,后者是標簽型數(shù)據(jù),相當于c中的整型。關于更多的其它數(shù)據(jù)類型可以參看目錄.srcOpenFOAMprimitives里面) 在上述數(shù)據(jù)類的基礎上,增加場(field)的概念,就引入了

2、標量場scalarField, 向量場vectorField, 張量場tensorField。 實際上這三個類又是field類的typedef,如typedef field<scalar> saclarField。這些場類中都有對應的成員函數(shù)進行加減乘除運算,還有復雜的點積叉積等。說到這field class,其實他就像是一個數(shù)據(jù)存放的區(qū)域一樣,存放上scalar,那它成了標量場scalarField。這些類中可以有接口實現(xiàn)數(shù)據(jù)的計算。從field類中又派生出了FieldField類,這個就是說場中場類,其實這個主要用于邊界條件類的一個基類。因為邊界條件算是網(wǎng)格類場中的一個特殊的場

3、,后面會介紹。 比field類高一點的就是幾何場類 GeometricField class,其相比field class多了紀錄場位置的相關信息。說到這里請大家注意他和polyMesh class的區(qū)別,后者只是紀錄網(wǎng)格的結(jié)構,如點的位置、面的組成、體的組成等等,polyMesh class中對應有pointMesh,surfaceMesh,volMesh等類,從字面上很容易理解其處理和記錄網(wǎng)格點、網(wǎng)格面、網(wǎng)格體等信息。而GeometricField類,其則是記錄了在什么樣的網(wǎng)格上有量a的相關信息或數(shù)據(jù)。它包括了內(nèi)部區(qū)域、邊界區(qū)域(GeometricBoundaryField cl

4、ass)、網(wǎng)格、尺度單位、計算的先前時間階的值等。在該類中有常用的三種(實際上還有其他的許多,可以參看OpenFOAM網(wǎng)上說明):volScalarField體標量場,volVectorField體向量場,volTensorField體張量場。這里說的場與field有所不同,這里指的是網(wǎng)格區(qū)域上所對應的數(shù)據(jù)信息。上述的vol就是指ployMesh中的volMesh,如volscalarField類來說:見下例volScalarField p(     IOobject        (

5、            "p",            runTime.timeName(),            mesh,          &

6、#160; IOobject:MUST_READ,            IOobject:AUTO_WRITE        ),        mesh    );看過老蘇博客的朋友肯定都知道這是什么意思,這是讀入標量壓力場文件,把壓力值存儲到網(wǎng)格體中心。為加深對GeometricField類的理解,貼張PG中的圖

7、片:OpenFOAM中有許多類,每個類的功能都很強大,這也使它面向?qū)ο笤O計得以實現(xiàn)。 對于程序,最常用到的,也是最底層的就是數(shù)據(jù),在OpenFOAM中引入了三類基礎數(shù)據(jù)類型:標量scalar, 向量vector, 張量tensor.這三個中數(shù)據(jù)類型,也是FOAM中最基礎的三個類。(還有一個比較重要的就是bool和label,前者就是是非型,及對錯型,只不過是更擴展一些,后者是標簽型數(shù)據(jù),相當于c中的整型。關于更多的其它數(shù)據(jù)類型可以參看目錄.srcOpenFOAMprimitives里面) 在上述數(shù)據(jù)類的基礎上,增加場(field)的概念,就引入了標量場scalarField

8、, 向量場vectorField, 張量場tensorField.實際上這三個類又是field類的typedef,如typedef field<scalar> saclarField。這些場類中都有對應的成員函數(shù)進行加減乘除運算,還有復雜的點積叉積等。說到這field class,其實他就像是一個數(shù)據(jù)存放的區(qū)域一樣,存放上scalar,那它成了標量場scalarField。這些類中可以有接口實現(xiàn)數(shù)據(jù)的計算。從field類中又派生出了FieldField類,這個就是說場中場類,其實這個主要用于邊界條件類的一個基類。因為邊界條件算是網(wǎng)格類場中的一個特殊的場,后面會介紹。 比f

9、ield類高一點的就是幾何場類 GeometricField class,其相比field class多了紀錄場位置的相關信息。說到這里請大家注意他和polyMesh class的區(qū)別,后者只是紀錄網(wǎng)格的結(jié)構,如點的位置、面的組成、體的組成等等,polyMesh class中對應有pointMesh,surfaceMesh,volMesh等類,從字面上很容易理解其處理和記錄網(wǎng)格點、網(wǎng)格面、網(wǎng)格體等信息。而GeometricField類,其則是記錄了在什么樣的網(wǎng)格上有量a的相關信息或數(shù)據(jù)。它包括了內(nèi)部區(qū)域、邊界區(qū)域(GeometricBoundaryField class)、網(wǎng)格、尺度單位、計算

10、的先前時間階的值等。在該類中有常用的三種(實際上還有其他的許多,可以參看OpenFOAM網(wǎng)上說明):volScalarField體標量場,volVectorField體向量場,volTensorField體張量場。這里說的場與field有所不同,這里指的是網(wǎng)格區(qū)域上所對應的數(shù)據(jù)信息。上述的vol就是指ployMesh中的volMesh,如volscalarField類來說:見下例    volScalarField p    (        IOobject

11、60;       (            "p",            runTime.timeName(),            mesh,   &#

12、160;        IOobject:MUST_READ,            IOobject:AUTO_WRITE        ),        mesh    );看過老蘇博客的朋友肯定都知道這是什么意思,這是讀入標量壓力場文件,把壓

13、力值存儲到網(wǎng)格體中心。為加深對GeometricField類的理解,貼張PG中的圖片: 除了體的向量標量張量場外,還有面標量場surfaceScalarField、面向量場surfaceVectorField、面張量場surfaceTensorField??聪旅娴睦樱?#160;   surfaceScalarField phi    (        IOobject        (

14、0;           "phi",            runTime.timeName(),            mesh        ),   &

15、#160;    fvc:interpolate(alpha)*phia      + fvc:interpolate(beta)*phib    );這里的phi既是一個面向量場對象,他用來是紀錄單元體面上流過的通量值。除了常用到的標量向量張量的幾何場外,還有一些特殊量的場:surfaceSymmTensor面對稱張量幾何場、體球面張量場等等。幾何場里面還有一個比較重要的類就是GeometricBoundaryField,用來專門對邊界進行處理的一個類。 如果說數(shù)據(jù)場類是處

16、理數(shù)據(jù)的基礎,那么時間類則是控制計算步進必不可少的一部分。Time class在進行瞬態(tài)計算,用它跟蹤時間階,并使時間按一定步長或者變步長累加,及輸出計算參數(shù),計算時間等。見下例:(相關說明見老蘇博客:OpenFOAM>>solver>>incompressible>>icoFoam的說明)    Info<< "nStarting time loopn" << endl;    for (runTime+; !runTime.end(); runTime

17、+)            Info<< "Time = " << runTime.timeName() << nl << endl;        /        runTime.write();       

18、; Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"            << "  ClockTime = " << runTime.elapsedClockTime() << " s"     &#

19、160;      << nl << endl; 談到時間大家很容易想到的就是空間,time and space是cfd中非常重要的概念,在離散過程中時間和空間都需要進行離散(非穩(wěn)態(tài)情況),與空間相關的類其實上面已經(jīng)提到:ployMesh class,在這不在累述。需要附加說明的是邊界條件類:邊界條件在OpenFOAM被定義作為場的一個完整部分而不是場上額外附加的。在fvMatrix類中并入了patch用來定義區(qū)域的外部邊界。每一個patch有一個邊界條件,再由fvm用合適的方式進行操作處理。patch有多種類

20、型:calculated,fixed value, fixed gradient, zero gradient, symmetry, cyclic等。這些類型都繼承于基類patchField。 在求解之前,需要對偏微分方程組進行離散,轉(zhuǎn)化為線性方程組Ax=b的形式。其中x就是我們所要求的量,他也就是咱們前面介紹的GeometricField類,而A代數(shù)方程的系數(shù),他就是我們下面所要提到的fvMatrix類。對于偏微分方程的每一項,OpenFOAM應用兩個類來離散:finiteVolumeMethod和finiteVolumeCalculus,分別用typedef聲明為fvm和fvc.

21、 fvm是計算隱式導數(shù)從而返回fvMatrix,而fvc是計算顯式導數(shù)或者其它隱式計算返回geometricField,該類不存儲私有數(shù)據(jù),僅是執(zhí)行操作從一個量map到另外一個量上。對于偏微分方程,其中有很多種導數(shù)形式:拉普拉斯、時間導數(shù)、二階時間導數(shù)、對流項、散度、梯度、梯度梯度平方、旋度、源等,在OpenFOAM中的表示見下圖:離散化時空之后,就是解方程,其實求解方程的過程主要分成如下幾部:1.離散偏微分方程,2.線性化方程組,3.對應不同的倒數(shù)格式選擇差分格式,4.求解系數(shù)矩陣,5.解方程。在這就涉及到了一個重要的部分:矩陣。Matrix是OpenFOAM中的一個模板類,他是一個用來存儲

22、及運算標量張量等類型數(shù)據(jù)的2維矩陣。這個矩陣類有點像數(shù)學上的矩陣一樣。對于應用于數(shù)值求解矩陣,OpenFOAM引入了fvMatrix類,這個就是有限體積(finite volume)矩陣類,他是一個特殊的矩陣類型,應用于求解有限體積標量方程組,該類成員函數(shù)可以實現(xiàn)給定相應場的求解、通量的計算、殘差的計算和控制、方程松弛因子的實現(xiàn),方程中心系數(shù)(central coefficient, 公共成員函數(shù)A()和H操作源(H operation source,成員函數(shù)H())的計算、設定計算參考等。在此需要提到的是fvMesh類,該類和GoeMesh類差不多,不同之處在于fvMesh類它包含相應網(wǎng)格信

23、息和拓撲結(jié)構的同時,還對網(wǎng)格進行實時更新(動網(wǎng)格的時候)。這些更新包括刪除單元體面等,并按要求重新定位并計算新的信息。下面舉一些關于fvMatrix應用的例子:(選自icoFoam)        fvVectorMatrix UEqn        (            fvm:ddt(U)    &#

24、160;     + fvm:div(phi, U)  /div,散度是代表某量通過單元體的面積分,此處phi為一個通量場,該場的值被記錄在單元體的面上,而U就是由通量所輸運的量,而該速度值則被記錄在單元體中心點上。          - fvm:laplacian(nu, U)        );/源項可以使顯式的,在離散時進入方程的右端,當源項為隱式的時候他進入方程的系數(shù)矩

25、陣中。        solve(UEqn = -fvc:grad(p);/關于=,一直有所疑問,聽老蘇分析挺有道理,最近你看到一篇文章上說=的定義是用來表示數(shù)學意義上的方程左右兩端的等于,這個運算符為了使其有最低的的運算優(yōu)先級所以采用了=,而非=,同時也強調(diào)了方程兩端得等的概念,而非賦值。在OpenFOAM中,對=的操作實際上是形式上的,而非實質(zhì)上有什么運算,它自動重排方程各項:所有隱式項寫進方程矩陣中,而所有顯式項則歸于方程的b中。       

26、60;volScalarField rUA = 1.0/UEqn.A();        U = rUA*UEqn.H();        pEqn.setReference(pRefCell, pRefValue);        pEqn.solve();例子中fvVectorMatrix為一向量有限體積矩陣類,OpenFOAM中定義 typedef f

27、vMatrix<Vector> fvVectorMatrix,其他的還有標量、張量等。其他關于上述程序的說明參看老蘇博客。 再看如下例子:fvMatrixScalar rhoEq(   fvm:ddt(rho)+fvc:div(phi);/此處是一個關于質(zhì)量守恒方程的求解,對于phi為密度與速度的積,而此時采用fvc即表示速度通量在方程中作為已知量,出現(xiàn)在方程的b項中,它是計算前一時間階的值。 說了一些常用的類,下面介紹一些比較基礎底層的類:IOdictionary,argList,IOobject,IOdictionary類是繼承于regI

28、Oobject類和dictionary類,其主要作于是讀入和寫入數(shù)據(jù)。如讀取PISO控制參數(shù),或讀入transportProperties參數(shù)等等。它派生出許多類:       1. basicThermo(用于基本熱力學參數(shù)讀取和計算)       2. LESModel(大渦模擬模型控制參數(shù))       3. RASModel (RAS模型控制參數(shù))  

29、0;    4. fvSchemes (離散格式參數(shù))       5. motionSolver (動網(wǎng)格控制參數(shù))       6. radiationModel (輻射模型控制參數(shù))       7. solution  (求解方程控制參數(shù))      

30、 8. SRFModel (SRF模型控制參數(shù))       9. tolerances (方程殘差控制)       10. transportModel (輸運模型參數(shù))見下例:    IOdictionary transportProperties /在transportProperties字典中讀入?yún)?shù)    (     

31、;   IOobject        (            "transportProperties",            runTime.constant(),        &

32、#160;   mesh,            IOobject:MUST_READ,            IOobject:NO_WRITE        )    );IOobject類:讀入寫入數(shù)據(jù),他與IOdictionary不同之處在于后者是讀取

33、一個文件中的一個字典“”之內(nèi)的數(shù)據(jù),而IOobject則是讀入整個文件,如讀入壓力場,速度場等,并且有讀入寫出的控制參數(shù),見上例中的“MUST_READ,NO_WRITE”等等。(老蘇博客中有詳細介紹,在此不多說了) argList類:讀入外部命令參數(shù)的一個類,如在命令窗口鍵入icoFoam -case <dir>,則對目錄dir執(zhí)行icoFoam計算,其參數(shù)有:-case 選擇一個case目錄替代當前工作目錄;-parallel 指定并行計算參數(shù); -doc顯式該程序文檔; -srDoc 在瀏覽器里顯示該程序的源文件; -help 顯示改程

34、序的使用方法 dimensionSet類是對基本類型的單位設定,并檢查其正確性。 tmp類是管理臨時對象的一個類。OpenFOAM的程序開發(fā)初步一.OpenFOAM應用的類型:使用OpenFOAM進行CAE模擬的,大致可分為三種類型:1)直接利用OpenFOAM的標準的求解器進行模擬,把OpenFOAM替代商業(yè)軟件來使用,OpenFOAM已基本具有這樣的功能和人氣,與Fuent,Star-CD等相比較,OpenFOAM顯然具有更高的求解效率和靈活性。2)用戶自定義求解器,即利用OpenFOAM的基本類庫,如finiteVolume,OpenFOAM庫來按照自己的求解流程來編

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

36、ser subroutine和這是不可相比的。3)用戶自己定義離散方法等。對于研究離散格式、代數(shù)求解器等人來說,更關注時間項ddt,擴散項Laplacian,對流項div是如何離散的,能否有更高效更高精度的離散方法,這需要修改finiteVolume庫和OpenFOAM庫中對應的代碼。尤其是對流項,盡管OpenFOAM已經(jīng)提供了基于NVD和TVD的模板和40多種有名的高階高精度格式,但可以預見,這仍然是不夠的,畢竟對流項的離散仍然是目前CFD的重點研究方向??梢钥隙ǖ氖?,目前有很多人關注類型2的應用,畢竟將OpenFOAM當成Fluent或Star-CCM來使用,并不見得方便。但是將OpenF

37、OAM作為類庫來構建自己的求解器,這是其它軟件無法實現(xiàn)的。二OpenFOAM程序開發(fā)的基本知識2.1OpenFOAM的基本術語重要的環(huán)境變量:$WM_PROJECT_USER_DIR   OpenFOAM的用戶目錄$FOAM_TUTORIALS          -OpenFOAM的算例目錄$ FOAM _SRC                -OpenFOAM庫的源程序目錄$ FOAM_APP         &#

38、160;      - OpenFOAM的求解器目錄$ FOAM_APPBIN            - OpenFOAM的求解器執(zhí)行文件目錄$ FOAM_RUN                -用戶的算例目錄重要的shell:run      cd to $FOAM_RUNsrc    =  cd to $FOAM_SRCapp    = 

39、60;cd to $FOAM_APPutil    =  cd to $FOAM_APP/utilitiessol    =  cd to $FOAM_APP/solverstut    =  cd to $FOAM_TUTORIALS求解器的基本文件結(jié)構appName            包含求解器源代碼的目錄+appName.C        求解器主程序 CreateFields.H &#

40、160;場變量的聲明和初始化 +Make/          編譯指令+files        編譯需要的源程序文件和生成的目標文件+options      編譯選項,如鏈接庫等appName/appName.C是求解器的主程序appName/createFields.H聲明變量,并從文件中讀入初值,如p,物性。appName/Make/files 所有源程序的名稱,一個文件一行,最后一行是目標代碼的名稱和存放位置,EXE=$(FOAM_USER_APPBIN)

41、/appNameappName/Make/options設定查找頭文件和庫的路徑,EXE_INCS,和需要鏈接的庫EXE_LIBS算例的基本文件結(jié)構case/                        算例目錄+0/                        包含初始和邊界條件+constant/        

42、;          包含初次讀入后,不隨時間變化的數(shù)據(jù)+polyMesh/            包含多面體網(wǎng)格數(shù)據(jù)+transportProperties/      包含物性數(shù)據(jù) +system/                  包含計算控制和離散格式設定+controlDict          

43、 包含計算控制,如時間步長等+fvSchemes              包含離散格式設定+fvSolutions            包含代數(shù)求解器或SIMPLE,PISO算法設定具體而言case/0                      每個需求解的變量需要一個文件設定其初始邊界條件case/constant/polyMesh 

44、0;      網(wǎng)格數(shù)據(jù),如owner neighbour points faces boundarycase/system/transportProperties  物性數(shù)據(jù)case/system/controlDict        設定起始終止時間,時間步長,輸出控制case/system/fvSchemes        設定程序用到的每個微分算子的離散格式case/system/fvSolution      為每個變量選擇代數(shù)方程求解

45、器/收斂精度及PISO等算法設定三OpenFOAM程序開發(fā)的理論知識作求解開發(fā),必須能寫出需要求解的控制方程及其定解條件,并且對于如何求解方程或方程組的步驟已經(jīng)明確。這些流體力學、傳熱學以及相關的理論是必需的,所謂連續(xù)介質(zhì)力學中的數(shù)學模型,控制方程和定解條件就是表示它的語言。在這里是不可能說清楚的,這要看個人的功底了。四 .OpenFOAM程序開發(fā)的最簡單的例子下面采用OpenFOAM來開發(fā)一個用戶自己的求解器。主要是利用OpenFOAM的標準求解器icoFoam,用戶不需要寫任何代碼,只為為了熟悉OpenFOAM程序開發(fā)的環(huán)境和步驟。步驟:1)    將icoFoam目錄

46、拷貝到新的目錄可采用下面的Linux的命令實現(xiàn):到OpenFOAM的incompressible目錄cd applications/incompressiblecp r icoFoam myicoFoam以上只是復制目錄icoFoam到新的位置,并且新目錄名為myicoFoamcd myicoFoam進入新的目錄,查看一下,可以看到里面的文件和icoFoam中是否一樣2)    原文件改名,并且刪除依賴文件將icoFoam.C改名myicoFoam.Cmv icoFoam.C myicoFoam.C刪除依賴文件rm icoFoam.dep3)    修改

47、編譯文件files和options進入Make目錄,打開files文件, 將icoFoam.C      源程序文件名EXE = $(FOAM_APPBIN)/icoFoam  可執(zhí)行文件名修改為myicoFoam.C      源程序文件名EXE = $(FOAM_APPBIN)/myicoFoam  可執(zhí)行文件名此例中options不需修改,可以打開看看EXE_INC =    頭文件包含   -I$(LIB_SRC)/finiteVolume/lnInclud

48、eEXE_LIBS =  鏈接庫-lfiniteVolume4)刪除原來的obj文件   rm rf linuxGccDPOptcd .5)編譯 wmake6) 檢驗一下 到tutorial目錄,檢驗一下 myicoFoam . cavity六.OpenFOAM程序開發(fā)例子一:在icoFoam中加入溫度場求解準備:能量控制方程: dT/dt+div(den*U*T)=div(a gradT)在壁面上給定值條件。需要解決的問題:a)如何創(chuàng)建標量場,Tb) 如何創(chuàng)建物性,ac)如何定義溫度方程,并求解d) 如何在算例中設定T和a

49、e)如何設定T的離散格式f)如何設定T的求解器的收斂標準等步驟:1)創(chuàng)建程序需要的新物性和新變量場打開myicoFoam.C可以看到,程序開始運行時調(diào)用CreateFields.H,創(chuàng)建變量場。打開CreateFields.H,可以看到程序首先從transportProperties文件中讀入物性,   Info<< "Reading transportPropertiesn" << endl;   IOdictionary transportProperties   (  

50、60;    IOobject       (           "transportProperties",              從字典文件transportProperties讀入runTime.constant(), /transportProperties文件位于目錄runTime.constant()中         

51、  mesh,            網(wǎng)格對象                             IOobject:MUST_READ,           IOobject:NO_WRITE       );  創(chuàng)建了Iodictionary類型對象 trans

52、portProperties   dimensionedScalar nu        /首先讀入粘性系數(shù)   (       transportProperties.lookup("nu")   );  創(chuàng)建有量綱標量nu,nu通過從字典transportProperties查找”nu”來賦值可以加上新方程需要的物性   dimensionedScalar DT      

53、  /首先讀入熱擴散率   (       transportProperties.lookup("DT")   ); 創(chuàng)建有量綱標量DT,DT通過從字典transportProperties查找”DT”來賦值此外還要從createFields中讀入p,U場,我們要加入的新的變量場為溫度場T,最快的加入溫度場的方法是拷貝p場的代碼,修改為   Info<< "Reading field Tn" << endl; 

54、  volScalarField T   (       IOobject       (           "T",           runTime.timeName(),           mesh,          

55、0;IOobject:MUST_READ,           IOobject:AUTO_WRITE       ),       mesh   );這樣,創(chuàng)建了新的vol標量場T,從文件T中讀入。對于T的創(chuàng)建具體解釋如下:a)創(chuàng)建了標量場Tb)T通過讀(IOobject:MUST_READ)在runTime.timeName()目錄下名稱為“T”的文件創(chuàng)建,在開始計算時,runTime.timeName()是contorlDict中

56、設定的startTime值決定的。c)T將自動寫入(IOobject:AUTO_WRITE)計算結(jié)果到runTime.timeName()目錄中,runTime.timeName()隨迭代是變化的,寫入控制由contorlDict中設定。d)T是定義在mesh對象上的,這意味著T在內(nèi)部cell上有值internalField,在邊界上還需要邊界條件,這與polyMesh/boundary中要一致。2)在求解器中加入新的求解方程   下一步回到myicoFoam.C加入新的微分方程,由于溫度場依賴于速度場,可放在PISO循環(huán)后面。#      

57、   include "continuityErrs.H"           U -= rUA*fvc:grad(p);                 U.correctBoundaryConditions();      /          Add the temperature equation   

58、;           fvScalarMatrix Teqn 溫度是標量方程           (             fvm:ddt(T)            + fvm:div(phi, T)      要用到界面流量           - f

59、vm:laplacian(DT, T)  擴散項         );             TEqn.solve();          求解3)編譯wmake4)在算例中加入新方程的初始和邊界條件4.1拷貝一個cavity算例到mycavity4.2修改transportProperties字典文件,設定DTcd constant修改transportProperties文件,前面已提到DT要從該字典文件讀入。

60、設定DT=0.002m2/sDT              DT 0 2 -1 0 0 0 0 0.002;4.3修改T文件,設定初始值和邊界cd 0 進入0目錄拷貝一個T文件cp p T修改T文件為FoamFile   version        2.0;   format          ascii;   class        

61、;  volScalarField;   object          T;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /dimensions      0 0 0 1 0 0 0;internalField  uniform 300;    初始內(nèi)部點為300   movingWall      

62、   type            fixedValue;value uniform  350.;        邊界為350      fixedWalls         type            fixedValue;value uniform  300.;     

63、0;  邊界為3005)修改離散格式和代數(shù)求解器求解控制文件A進入system目錄由于溫度方程有非穩(wěn)態(tài)項,對流項,擴散項,分別要在ddt,div,laplacian中設置打開fvSchemes文件,添加divSchemes   default        none;   div(phi,U)      Gauss upwind;   div(phi,T)      Gauss upwind;laplacianSchemes&

64、#160;  default        none;   laplacian(nu,U) Gauss linear corrected;   laplacian(DT,T) Gauss linear corrected;   laplacian(1|A(U),p) Gauss linear corrected;在fvSolution中設置代數(shù)求解器選項     T PBiCG          

65、preconditioner  DILU;       tolerance        1e-06;       relTol          0;   注意T方程形成的矩陣是非對稱的,不要用PCG和DIC6)運行myicoFoam . mycavity七.OpenFOAM程序開發(fā)求解器的詳細分析1進入icoFoam目錄可以看到createFields.H  icoFoam.C &#

66、160;icoFoam.dep Make/ Make/為wmake編譯所需的文件IcoFoam.C為主程序文件,它包含createFields.H編輯icoFoam.C可以看到icoFoam.C首先引入的頭文件為fvCFD.H。所以你可以看到,在編譯選項options中EXE_INC =    -I$(LIB_SRC)/finiteVolume/lnInclude  /fvCFD.H的存放目錄EXE_LIBS =    -lfiniteVolume              

67、    /需要鏈接的庫找到fvCFD.H,編輯,可以看出這些是主程序必須的類庫#ifndef fvCFD_H#define fvCFD_H#include "parRun.H"#include "Time.H"              時間類#include "fvMesh.H"            網(wǎng)格類#include "fvc.H"    

68、;            fvc類#include "fvMatrices.H"          fvMatrix類#include "fvm.H"                fvm類#include "linear.H"#include "calculatedFvPatchFields.H"#include "

69、fixedValueFvPatchFields.H"#include "adjustPhi.H"#include "findRefCell.H"#include "mathematicalConstants.H"#include "OSspecific.H"#include "argList.H"#ifndef namespaceFoam#define namespaceFoam   using namespace Foam;#endif#endif再看看icoFo

70、am的程序體,了解一下求解程序的結(jié)構#include "fvCFD.H"        (頭文件)                       通常位于main函數(shù)前,是程序所需的類的定義/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /int main(int argc, char *argv)  &#

71、160;                      (包含文件)#  include "setRootCase.H"  #  include "createTime.H"#  include "createMesh.H"包含文件通常是程序片斷,如創(chuàng)建時間、創(chuàng)建網(wǎng)格等(求解器代碼)#  include "createFields.H"    

72、;      需要根據(jù)應用,單獨寫的代碼,如"createFields.H"和Main,以及Ueqn,pEqn等   #  include "initContinuityErrs.H"                       / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

73、 /。八.OpenFOAM程序開發(fā)求解器的詳細分析2a.場變量的定義引用前面的溫度場   Info<< "Reading field Tn" << endl;   volScalarField T   (       IOobject       (           "T",       

74、   runTime.timeName(),           mesh,           IOobject:MUST_READ,           IOobject:AUTO_WRITE       ),       mesh   );例如volScalarField CO2(IOobje

75、ct("CO2",runTime.timeName(),mesh,IOobject:READ_IF_PRESENT,IOobject:AUTO_WRITE),mesh,/ Optional declaration, this can be done by accessing a file in "case/0/",量綱可在文件中讀/ dimensionedScalar("zero", dimensionSet(1,-1,-3,0,0,0,0), value);b.場變量的使用場變量有定義在內(nèi)部cell上的值,也有邊界上的值例如給組分限

76、值Example of a mass fraction limiter used in this project:/ Initialize the variable Y_i for use in a loopscalarField& CO2Internal = CO2.internalField();  引用內(nèi)部點/ Loop for all mesh points  遍歷內(nèi)部點forAll(CO2, celli)/ Limits the mass fraction to a positive numberif (CO2Internalcelli < 0.0)

77、CO2Internalcelli = 0.0;/ Limits the mass fraction to max 1.0if (CO2Internalcelli > 1.0)CO2Internalcelli = 1.0;c.定義輸運方程OpenFOAM 定義方程時要選擇一種類型的fvMatrix,有fvScalarMatrix和fvVectorMatrix離散格式在case/system/fvSchemes.中設定/ Define a ScalarMatrix as a objectfvScalarMatrix CO2Eqn 定義系數(shù)矩陣(fvm:div(phi, CO2)  

78、          對流項離散fvm:div- fvm:laplacian(turbulence->nuEff(),CO2)  擴散項離散fvm:div= S_CO2                            源項 );/ Apply underrelaxation to the equation/ Under relaxation factors defined in file: fvSolutionCO2Eqn.relax();  松弛CO2Eqn.solve();  求解運用OpenFOAM編譯器wmake編譯自己的程序本文將OpenFoam的編譯系統(tǒng)介紹一下,并給出了如何在OpenFOAM下編譯“h

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論