




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OpenFOAM的程序開(kāi)發(fā)初步OpenFOAM的程序開(kāi)發(fā)初步一.OpenFOAM應(yīng)用的類型:使用OpenFOAM進(jìn)行CAE模擬的,大致可分為三種類型:1)直接利用OpenFOAM的標(biāo)準(zhǔn)的求解器進(jìn)行模擬,把OpenFOAM替代商業(yè)軟件來(lái)使用,OpenFOAM已基本具有這樣的功能和人氣,與Fuent,Star-CD等相比較,OpenFOAM顯然具有更高的求解效率和靈活性。2)用戶自定義求解器,即利用OpenFOAM的基本類庫(kù),如finiteVolume,OpenFOAM庫(kù)來(lái)按照自己的求解流程來(lái)編寫針對(duì)某類應(yīng)用的求 解器。用戶需要開(kāi)發(fā)的求解器就是類似于在OpenFOAM的applications中所
2、看到的標(biāo)準(zhǔn)求解器icoFOAM,simpleFOAM等。顯然 這一需求是非常大的,從OpenFOAM問(wèn)世以來(lái),已有很多用戶定義了自己的求解器。這類需求的特點(diǎn)是,并不需要特別關(guān)心,離散和求解的最底層的知識(shí),如 時(shí)間項(xiàng)離散,空間項(xiàng)離散等,關(guān)注的重點(diǎn)是求解的步驟或者流程。在編程中,通常是頂層的求解流程的開(kāi)發(fā),在多數(shù)情況下可以不編譯OpenFOAM的 finiteVolume和OpenFOAM庫(kù)。這種頂層的求解器的開(kāi)發(fā),是我們以前常常忽略的,或者是以前沒(méi)有能力做到的。需要指出的是,商業(yè)軟件中的 所謂udf,user subroutine和這是不可相比的。3)用戶自己定義離散方法等。對(duì)于研究離散格式、代
3、數(shù)求解器等人來(lái)說(shuō),更關(guān)注時(shí)間項(xiàng)ddt,擴(kuò)散項(xiàng)Laplacian,對(duì)流項(xiàng)div是如何離散的,能否有 更高效更高精度的離散方法,這需要修改finiteVolume庫(kù)和OpenFOAM庫(kù)中對(duì)應(yīng)的代碼。尤其是對(duì)流項(xiàng),盡管OpenFOAM已經(jīng)提供了基于 NVD和TVD的模板和40多種有名的高階高精度格式,但可以預(yù)見(jiàn),這仍然是不夠的,畢竟對(duì)流項(xiàng)的離散仍然是目前CFD的重點(diǎn)研究方向??梢钥隙ǖ氖?,目前有很多人關(guān)注類型2的應(yīng)用,畢竟將OpenFOAM當(dāng)成Fluent或Star-CCM來(lái)使用,并不見(jiàn)得方便。但是將OpenFOAM作為類庫(kù)來(lái)構(gòu)建自己的求解器,這是其它軟件無(wú)法實(shí)現(xiàn)的OpenFOAM的程序開(kāi)發(fā)初步二O
4、penFOAM程序開(kāi)發(fā)的基本知識(shí)2.1OpenFOAM的基本術(shù)語(yǔ)重要的環(huán)境變量:$WM_PROJECT_USER_DIR OpenFOAM的用戶目錄$FOAM_TUTORIALS -OpenFOAM的算例目錄$ FOAM _SRC -OpenFOAM庫(kù)的源程序目錄$ FOAM_APP - OpenFOAM的求解器目錄$ FOAM_APPBIN - OpenFOAM的求解器執(zhí)行文件目錄$ FOAM_RUN -用戶的算例目錄重要的shell:run cd to $FOAM_RUNsrc = cd to $FOAM_SRCapp = cd to $FOAM_APPutil = cd to $FOAM
5、_APP/utilitiessol = cd to $FOAM_APP/solverstut = cd to $FOAM_TUTORIALS求解器的基本文件結(jié)構(gòu)appName 包含求解器源代碼的目錄+appName.C 求解器主程序 CreateFields.H 場(chǎng)變量的聲明和初始化 +Make/ 編譯指令+files 編譯需要的源程序文件和生成的目標(biāo)文件+options 編譯選項(xiàng),如鏈接庫(kù)等appName/appName.C是求解器的主程序appName/createFields.H聲明變量,并從文件中讀入初值,如p,物性。appName/Make/files 所有源程序的名稱,一個(gè)文件一行
6、,最后一行是目標(biāo)代碼的名稱和存放位置,EXE=$(FOAM_USER_APPBIN)/appNameappName/Make/options設(shè)定查找頭文件和庫(kù)的路徑,EXE_INCS,和需要鏈接的庫(kù)EXE_LIBS算例的基本文件結(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ù)
7、求解器或SIMPLE,PISO算法設(shè)定具體而言case/0 每個(gè)需求解的變量需要一個(gè)文件設(shè)定其初始邊界條件case/constant/polyMesh 網(wǎng)格數(shù)據(jù),如owner neighbour points faces boundarycase/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程序
8、開(kāi)發(fā)的理論知識(shí)作求解開(kāi)發(fā),必須能寫出需要求解的控制方程及其定解條件,并且對(duì)于如何求解方程或方程組的步驟已經(jīng)明確。這些流體力學(xué)、傳熱學(xué)以及相關(guān)的理論是必需的,所謂連續(xù)介質(zhì)力學(xué)中的數(shù)學(xué)模型,控制方程和定解條件就是表示它的語(yǔ)言。在這里是不可能說(shuō)清楚的,這要看個(gè)人的功底了。四 .OpenFOAM程序開(kāi)發(fā)的最簡(jiǎn)單的例子下面采用OpenFOAM來(lái)開(kāi)發(fā)一個(gè)用戶自己的求解器。主要是利用OpenFOAM的標(biāo)準(zhǔn)求解器icoFoam,用戶不需要寫任何代碼,只為為了熟悉OpenFOAM程序開(kāi)發(fā)的環(huán)境和步驟。步驟:1) 將icoFoam目錄拷貝到新的目錄可采用下面的Linux的命令實(shí)現(xiàn):到OpenFOAM的incomp
9、ressible目錄cd applications/incompressiblecp r icoFoam myicoFoam以上只是復(fù)制目錄icoFoam到新的位置,并且新目錄名為myicoFoamcd myicoFoam進(jìn)入新的目錄,查看一下,可以看到里面的文件和icoFoam中是否一樣2) 原文件改名,并且刪除依賴文件將icoFoam.C改名myicoFoam.Cmv icoFoam.C myicoFoam.C刪除依賴文件rm icoFoam.dep3) 修改編譯文件files和options進(jìn)入Make目錄,打開(kāi)files文件 將icoFoam.C 源程序文件名EXE = $(FOAM_
10、APPBIN)/icoFoam 可執(zhí)行文件名修改為myicoFoam.C 源程序文件名EXE = $(FOAM_APPBIN)/myicoFoam 可執(zhí)行文件名此例中options不需修改,可以打開(kāi)看看EXE_INC = 頭文件包含 -I$(LIB_SRC)/finiteVolume/lnIncludeEXE_LIBS = 鏈接庫(kù)-lfiniteVolume4)刪除原來(lái)的obj文件 rm rf linuxGccDPOptcd .5)編譯 wmake6) 檢驗(yàn)一下 到tutorial目錄,檢驗(yàn)一下 myicoFoam . cavity六.OpenFOAM程序開(kāi)發(fā)例子一:在icoFoam中加入溫度
11、場(chǎng)求解準(zhǔn)備:能量控制方程: dT/dt+div(den*U*T)=div(a gradT)在壁面上給定值條件。需要解決的問(wèn)題:a)如何創(chuàng)建標(biāo)量場(chǎng),Tb) 如何創(chuàng)建物性,ac)如何定義溫度方程,并求解d) 如何在算例中設(shè)定T和ae)如何設(shè)定T的離散格式f)如何設(shè)定T的求解器的收斂標(biāo)準(zhǔn)等步驟:1)創(chuàng)建程序需要的新物性和新變量場(chǎng)打開(kāi)myicoFoam.C可以看到,程序開(kāi)始運(yùn)行時(shí)調(diào)用CreateFields.H,創(chuàng)建變量場(chǎng)。打開(kāi)CreateFields.H,可以看到程序首先從transportProperties文件中讀入物性, Info<< "Reading transport
12、Propertiesn" << endl; IOdictionary transportProperties ( IOobject ( "transportProperties", 從字典文件transportProperties讀入runTime.constant(), /transportProperties文件位于目錄runTime.constant()中 mesh, 網(wǎng)格對(duì)象 IOobject:MUST_READ, IOobject:NO_WRITE ); 創(chuàng)建了Iodictionary類型對(duì)象 transportProperties dime
13、nsionedScalar nu /首先讀入粘性系數(shù) ( transportProperties.lookup("nu") ); 創(chuàng)建有量綱標(biāo)量nu,nu通過(guò)從字典transportProperties查找”nu”來(lái)賦值可以加上新方程需要的物性 dimensionedScalar DT /首先讀入熱擴(kuò)散率 ( transportProperties.lookup("DT") ); 創(chuàng)建有量綱標(biāo)量DT,DT通過(guò)從字典transportProperties查找”DT”來(lái)賦值此外還要從createFields中讀入p,U場(chǎng),我們要加入的新的變量場(chǎng)為溫度場(chǎng)T,最
14、快的加入溫度場(chǎng)的方法是拷貝p場(chǎng)的代碼,修改為 Info<< "Reading field Tn" << endl; volScalarField T ( IOobject ( "T", runTime.timeName(), mesh, IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );這樣,創(chuàng)建了新的vol標(biāo)量場(chǎng)T,從文件T中讀入。對(duì)于T的創(chuàng)建具體解釋如下:a)創(chuàng)建了標(biāo)量場(chǎng)Tb)T通過(guò)讀(IOobject:MUST_READ)在runTime.timeName()目錄下名稱為“T
15、”的文件創(chuàng)建,在開(kāi)始計(jì)算時(shí),runTime.timeName()是contorlDict中設(shè)定的startTime值決定的。c)T將自動(dòng)寫入(IOobject:AUTO_WRITE)計(jì)算結(jié)果到runTime.timeName()目錄中,runTime.timeName()隨迭代是變化的,寫入控制由contorlDict中設(shè)定。d)T是定義在mesh對(duì)象上的,這意味著T在內(nèi)部cell上有值internalField,在邊界上還需要邊界條件,這與polyMesh/boundary中要一致。2)在求解器中加入新的求解方程 下一步回到myicoFoam.C加入新的微分方程,由于溫度場(chǎng)依賴于速度場(chǎng),可放
16、在PISO循環(huán)后面。# include "continuityErrs.H" U -= rUA*fvc:grad(p); U.correctBoundaryConditions(); / Add the temperature equation fvScalarMatrix Teqn 溫度是標(biāo)量方程 ( fvm:ddt(T) + fvm:div(phi, T) 要用到界面流量 - fvm:laplacian(DT, T) 擴(kuò)散項(xiàng) ); TEqn.solve(); 求解3)編譯wmake4)在算例中加入新方程的初始和邊界條件4.1拷貝一個(gè)cavity算例到mycavity4.
17、2修改transportProperties字典文件,設(shè)定DTcd constant修改transportProperties文件,前面已提到DT要從該字典文件讀入。設(shè)定DT=0.002m2/sDT DT 0 2 -1 0 0 0 0 0.002;4.3修改T文件,設(shè)定初始值和邊界cd 0 進(jìn)入0目錄拷貝一個(gè)T文件cp p T修改T文件為FoamFile version 2.0; format ascii; class volScalarField; object T;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
18、 * * * * * * /dimensions 0 0 0 1 0 0 0;internalField uniform 300; 初始內(nèi)部點(diǎn)為300 movingWall type fixedValue;value uniform 350.; 邊界為350 fixedWalls type fixedValue;value uniform 300.; 邊界為3005)修改離散格式和代數(shù)求解器求解控制文件A進(jìn)入system目錄由于溫度方程有非穩(wěn)態(tài)項(xiàng),對(duì)流項(xiàng),擴(kuò)散項(xiàng),分別要在ddt,div,laplacian中設(shè)置打開(kāi)fvSchemes文件,添加divSchemes default none; d
19、iv(phi,U) Gauss upwind; div(phi,T) Gauss upwind;laplacianSchemes default none; laplacian(nu,U) Gauss linear corrected; laplacian(DT,T) Gauss linear corrected; laplacian(1|A(U),p) Gauss linear corrected;在fvSolution中設(shè)置代數(shù)求解器選項(xiàng) T PBiCG preconditioner DILU; tolerance 1e-06; relTol 0; ;注意T方程形成的矩陣是非對(duì)稱的,不要用
20、PCG和DIC6)運(yùn)行myicoFoam . mycavity七.OpenFOAM程序開(kāi)發(fā)求解器的詳細(xì)分析1進(jìn)入icoFoam目錄可以看到createFields.H icoFoam.C icoFoam.dep Make/Make/為wmake編譯所需的文件IcoFoam.C為主程序文件,它包含createFields.H編輯icoFoam.C可以看到icoFoam.C首先引入的頭文件為fvCFD.H。所以你可以看到,在編譯選項(xiàng)options中EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude /fvCFD.H的存放目錄EXE_LIBS = -lfini
21、teVolume /需要鏈接的庫(kù)找到fvCFD.H,編輯,可以看出這些是主程序必須的類庫(kù)#ifndef fvCFD_H#define fvCFD_H#include "parRun.H"#include "Time.H" 時(shí)間類#include "fvMesh.H" 網(wǎng)格類#include "fvc.H" fvc類#include "fvMatrices.H" fvMatrix類#include "fvm.H" fvm類#include "linear.H"
22、;#include "calculatedFvPatchFields.H"#include "fixedValueFvPatchFields.H"#include "adjustPhi.H"#include "findRefCell.H"#include "mathematicalConstants.H"#include "OSspecific.H"#include "argList.H"#ifndef namespaceFoam#define names
23、paceFoam using namespace Foam;#endif#endif再看看icoFoam的程序體,了解一下求解程序的結(jié)構(gòu)#include "fvCFD.H" (頭文件) 通常位于main函數(shù)前,是程序所需的類的定義/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /int main(int argc, char *argv) (包含文件)# include "setRootCase.H" # include "createTim
24、e.H"# include "createMesh.H"包含文件通常是程序片斷,如創(chuàng)建時(shí)間、創(chuàng)建網(wǎng)格等(求解器代碼)# include "createFields.H" 需要根據(jù)應(yīng)用,單獨(dú)寫的代碼,如"createFields.H"和Main,以及Ueqn,pEqn等 # include "initContinuityErrs.H" / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /。八.OpenFOA
25、M程序開(kāi)發(fā)求解器的詳細(xì)分析2a.場(chǎng)變量的定義引用前面的溫度場(chǎng) Info<< "Reading field Tn" << endl; volScalarField T ( IOobject ( "T", runTime.timeName(), mesh, IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );例如volScalarField CO2(IOobject("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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 肺炎護(hù)理健康宣教
- 肺炎病人護(hù)理教程
- 腎衰合并高血壓的護(hù)理
- 外企農(nóng)藥營(yíng)銷培訓(xùn)課件
- 矛盾糾紛多元化解機(jī)制下的人民調(diào)解創(chuàng)新路徑探索
- 施工電梯安全培訓(xùn)
- 財(cái)務(wù)顧問(wèn)與高科技企業(yè)財(cái)務(wù)規(guī)劃合同
- 地鐵交通安全標(biāo)識(shí)培訓(xùn)
- 高端車棚租賃與車輛管理服務(wù)協(xié)議
- 柴油儲(chǔ)備庫(kù)建設(shè)與燃料供應(yīng)一體化合同
- 2025年湖北省中考化學(xué)試卷真題(含答案解析)
- 河北省大眾滑雪等級(jí)標(biāo)準(zhǔn)(試行)
- GB/T 3863-2008工業(yè)氧
- GB/T 31125-2014膠粘帶初粘性試驗(yàn)方法環(huán)形法
- 班主任班級(jí)管理(課堂)課件
- 學(xué)院輔導(dǎo)答疑情況記錄表
- 31個(gè)級(jí)地區(qū)國(guó)家重點(diǎn)監(jiān)控企業(yè)自行監(jiān)測(cè)信息公開(kāi)平臺(tái)及污染源監(jiān)督性監(jiān)測(cè)信息公開(kāi)網(wǎng)址
- 2021年中國(guó)美術(shù)學(xué)院輔導(dǎo)員招聘考試題庫(kù)及答案解析
- 2022年江西省投資集團(tuán)有限公司校園招聘筆試模擬試題及答案解析
- 發(fā)證機(jī)關(guān)所在地區(qū)代碼表
- 征地補(bǔ)償數(shù)據(jù)庫(kù)建設(shè)技術(shù)方案
評(píng)論
0/150
提交評(píng)論