![OpenFOAM的程序開發(fā)初步_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/27a7190c-25e9-43e2-9df4-40dfd0d49aec/27a7190c-25e9-43e2-9df4-40dfd0d49aec1.gif)
![OpenFOAM的程序開發(fā)初步_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/27a7190c-25e9-43e2-9df4-40dfd0d49aec/27a7190c-25e9-43e2-9df4-40dfd0d49aec2.gif)
![OpenFOAM的程序開發(fā)初步_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/27a7190c-25e9-43e2-9df4-40dfd0d49aec/27a7190c-25e9-43e2-9df4-40dfd0d49aec3.gif)
![OpenFOAM的程序開發(fā)初步_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/27a7190c-25e9-43e2-9df4-40dfd0d49aec/27a7190c-25e9-43e2-9df4-40dfd0d49aec4.gif)
![OpenFOAM的程序開發(fā)初步_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/27a7190c-25e9-43e2-9df4-40dfd0d49aec/27a7190c-25e9-43e2-9df4-40dfd0d49aec5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、OpenFOAM的程序開發(fā)初步OpenFOAM的程序開發(fā)初步一.OpenFOAM應用的類型:使用OpenFOAM進行CAE模擬的,大致可分為三種類型:1)直接利用OpenFOAM的標準的求解器進行模擬,把OpenFOAM替代商業(yè)軟件來使用,OpenFOAM已基本具有這樣的功能和人氣,與Fuent,Star-CD等相比較,OpenFOAM顯然具有更高的求解效率和靈活性。2)用戶自定義求解器,即利用OpenFOAM的基本類庫,如finiteVolume,OpenFOAM庫來按照自己的求解流程來編寫針對某類應用的求 解器。用戶需要開發(fā)的求解器就是類似于在OpenFOAM的applications中所
2、看到的標準求解器icoFOAM,simpleFOAM等。顯然 這一需求是非常大的,從OpenFOAM問世以來,已有很多用戶定義了自己的求解器。這類需求的特點是,并不需要特別關心,離散和求解的最底層的知識,如 時間項離散,空間項離散等,關注的重點是求解的步驟或者流程。在編程中,通常是頂層的求解流程的開發(fā),在多數(shù)情況下可以不編譯OpenFOAM的 finiteVolume和OpenFOAM庫。這種頂層的求解器的開發(fā),是我們以前常常忽略的,或者是以前沒有能力做到的。需要指出的是,商業(yè)軟件中的 所謂udf,user subroutine和這是不可相比的。3)用戶自己定義離散方法等。對于研究離散格式、代
3、數(shù)求解器等人來說,更關注時間項ddt,擴散項Laplacian,對流項div是如何離散的,能否有 更高效更高精度的離散方法,這需要修改finiteVolume庫和OpenFOAM庫中對應的代碼。尤其是對流項,盡管OpenFOAM已經(jīng)提供了基于 NVD和TVD的模板和40多種有名的高階高精度格式,但可以預見,這仍然是不夠的,畢竟對流項的離散仍然是目前CFD的重點研究方向??梢钥隙ǖ氖?,目前有很多人關注類型2的應用,畢竟將OpenFOAM當成Fluent或Star-CCM來使用,并不見得方便。但是將OpenFOAM作為類庫來構建自己的求解器,這是其它軟件無法實現(xiàn)的OpenFOAM的程序開發(fā)初步二O
4、penFOAM程序開發(fā)的基本知識2.1OpenFOAM的基本術語重要的環(huán)境變量:$WM_PROJECT_USER_DIR OpenFOAM的用戶目錄$FOAM_TUTORIALS -OpenFOAM的算例目錄$ FOAM _SRC -OpenFOAM庫的源程序目錄$ 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求解器的基本文件結構appName 包含求解器源代碼的目錄+appName.C 求解器主程序 CreateFields.H 場變量的聲明和初始化 +Make/ 編譯指令+files 編譯需要的源程序文件和生成的目標文件+options 編譯選項,如鏈接庫等appName/appName.C是求解器的主程序appName/createFields.H聲明變量,并從文件中讀入初值,如p,物性。appName/Make/files 所有源程序的名稱,一個文件一行
6、,最后一行是目標代碼的名稱和存放位置,EXE=$(FOAM_USER_APPBIN)/appNameappName/Make/options設定查找頭文件和庫的路徑,EXE_INCS,和需要鏈接的庫EXE_LIBS算例的基本文件結構case/ 算例目錄+0/ 包含初始和邊界條件+constant/ 包含初次讀入后,不隨時間變化的數(shù)據(jù)+polyMesh/ 包含多面體網(wǎng)格數(shù)據(jù)+transportProperties/ 包含物性數(shù)據(jù) +system/ 包含計算控制和離散格式設定+controlDict 包含計算控制,如時間步長等+fvSchemes 包含離散格式設定+fvSolutions 包含代數(shù)
7、求解器或SIMPLE,PISO算法設定具體而言case/0 每個需求解的變量需要一個文件設定其初始邊界條件case/constant/polyMesh 網(wǎng)格數(shù)據(jù),如owner neighbour points faces boundarycase/system/transportProperties 物性數(shù)據(jù)case/system/controlDict 設定起始終止時間,時間步長,輸出控制case/system/fvSchemes 設定程序用到的每個微分算子的離散格式case/system/fvSolution 為每個變量選擇代數(shù)方程求解器/收斂精度及PISO等算法設定三OpenFOAM程序
8、開發(fā)的理論知識作求解開發(fā),必須能寫出需要求解的控制方程及其定解條件,并且對于如何求解方程或方程組的步驟已經(jīng)明確。這些流體力學、傳熱學以及相關的理論是必需的,所謂連續(xù)介質力學中的數(shù)學模型,控制方程和定解條件就是表示它的語言。在這里是不可能說清楚的,這要看個人的功底了。四 .OpenFOAM程序開發(fā)的最簡單的例子下面采用OpenFOAM來開發(fā)一個用戶自己的求解器。主要是利用OpenFOAM的標準求解器icoFoam,用戶不需要寫任何代碼,只為為了熟悉OpenFOAM程序開發(fā)的環(huán)境和步驟。步驟:1) 將icoFoam目錄拷貝到新的目錄可采用下面的Linux的命令實現(xiàn):到OpenFOAM的incomp
9、ressible目錄cd applications/incompressiblecp r icoFoam myicoFoam以上只是復制目錄icoFoam到新的位置,并且新目錄名為myicoFoamcd myicoFoam進入新的目錄,查看一下,可以看到里面的文件和icoFoam中是否一樣2) 原文件改名,并且刪除依賴文件將icoFoam.C改名myicoFoam.Cmv icoFoam.C myicoFoam.C刪除依賴文件rm icoFoam.dep3) 修改編譯文件files和options進入Make目錄,打開files文件 將icoFoam.C 源程序文件名EXE = $(FOAM_
10、APPBIN)/icoFoam 可執(zhí)行文件名修改為myicoFoam.C 源程序文件名EXE = $(FOAM_APPBIN)/myicoFoam 可執(zhí)行文件名此例中options不需修改,可以打開看看EXE_INC = 頭文件包含 -I$(LIB_SRC)/finiteVolume/lnIncludeEXE_LIBS = 鏈接庫-lfiniteVolume4)刪除原來的obj文件 rm rf linuxGccDPOptcd .5)編譯 wmake6) 檢驗一下 到tutorial目錄,檢驗一下 myicoFoam . cavity六.OpenFOAM程序開發(fā)例子一:在icoFoam中加入溫度
11、場求解準備:能量控制方程: dT/dt+div(den*U*T)=div(a gradT)在壁面上給定值條件。需要解決的問題:a)如何創(chuàng)建標量場,Tb) 如何創(chuàng)建物性,ac)如何定義溫度方程,并求解d) 如何在算例中設定T和ae)如何設定T的離散格式f)如何設定T的求解器的收斂標準等步驟:1)創(chuàng)建程序需要的新物性和新變量場打開myicoFoam.C可以看到,程序開始運行時調用CreateFields.H,創(chuàng)建變量場。打開CreateFields.H,可以看到程序首先從transportProperties文件中讀入物性, Info<< "Reading transport
12、Propertiesn" << endl; IOdictionary transportProperties ( IOobject ( "transportProperties", 從字典文件transportProperties讀入runTime.constant(), /transportProperties文件位于目錄runTime.constant()中 mesh, 網(wǎng)格對象 IOobject:MUST_READ, IOobject:NO_WRITE ); 創(chuàng)建了Iodictionary類型對象 transportProperties dime
13、nsionedScalar nu /首先讀入粘性系數(shù) ( transportProperties.lookup("nu") ); 創(chuàng)建有量綱標量nu,nu通過從字典transportProperties查找”nu”來賦值可以加上新方程需要的物性 dimensionedScalar DT /首先讀入熱擴散率 ( transportProperties.lookup("DT") ); 創(chuàng)建有量綱標量DT,DT通過從字典transportProperties查找”DT”來賦值此外還要從createFields中讀入p,U場,我們要加入的新的變量場為溫度場T,最
14、快的加入溫度場的方法是拷貝p場的代碼,修改為 Info<< "Reading field Tn" << endl; volScalarField T ( IOobject ( "T", runTime.timeName(), mesh, 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
15、”的文件創(chuàng)建,在開始計算時,runTime.timeName()是contorlDict中設定的startTime值決定的。c)T將自動寫入(IOobject:AUTO_WRITE)計算結果到runTime.timeName()目錄中,runTime.timeName()隨迭代是變化的,寫入控制由contorlDict中設定。d)T是定義在mesh對象上的,這意味著T在內部cell上有值internalField,在邊界上還需要邊界條件,這與polyMesh/boundary中要一致。2)在求解器中加入新的求解方程 下一步回到myicoFoam.C加入新的微分方程,由于溫度場依賴于速度場,可放
16、在PISO循環(huán)后面。# include "continuityErrs.H" U -= rUA*fvc:grad(p); U.correctBoundaryConditions(); / Add the temperature equation fvScalarMatrix Teqn 溫度是標量方程 ( fvm:ddt(T) + fvm:div(phi, T) 要用到界面流量 - fvm:laplacian(DT, T) 擴散項 ); TEqn.solve(); 求解3)編譯wmake4)在算例中加入新方程的初始和邊界條件4.1拷貝一個cavity算例到mycavity4.
17、2修改transportProperties字典文件,設定DTcd constant修改transportProperties文件,前面已提到DT要從該字典文件讀入。設定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 volScalarField; object T;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
18、 * * * * * * /dimensions 0 0 0 1 0 0 0;internalField uniform 300; 初始內部點為300 movingWall type fixedValue;value uniform 350.; 邊界為350 fixedWalls type fixedValue;value uniform 300.; 邊界為3005)修改離散格式和代數(shù)求解器求解控制文件A進入system目錄由于溫度方程有非穩(wěn)態(tài)項,對流項,擴散項,分別要在ddt,div,laplacian中設置打開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ù)求解器選項 T PBiCG preconditioner DILU; tolerance 1e-06; relTol 0; ;注意T方程形成的矩陣是非對稱的,不要用
20、PCG和DIC6)運行myicoFoam . mycavity七.OpenFOAM程序開發(fā)求解器的詳細分析1進入icoFoam目錄可以看到createFields.H icoFoam.C 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 = -lfini
21、teVolume /需要鏈接的庫找到fvCFD.H,編輯,可以看出這些是主程序必須的類庫#ifndef fvCFD_H#define fvCFD_H#include "parRun.H"#include "Time.H" 時間類#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的程序體,了解一下求解程序的結構#include "fvCFD.H" (頭文件) 通常位于main函數(shù)前,是程序所需的類的定義/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /int main(int argc, char *argv) (包含文件)# include "setRootCase.H" # include "createTim
24、e.H"# include "createMesh.H"包含文件通常是程序片斷,如創(chuàng)建時間、創(chuàng)建網(wǎng)格等(求解器代碼)# include "createFields.H" 需要根據(jù)應用,單獨寫的代碼,如"createFields.H"和Main,以及Ueqn,pEqn等 # include "initContinuityErrs.H" / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /。八.OpenFOA
25、M程序開發(fā)求解器的詳細分析2a.場變量的定義引用前面的溫度場 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人股權投資協(xié)議常用版(三篇)
- 2025年五年級老師個人的年度工作總結(五篇)
- 2025年個人攝影服務合同模板(2篇)
- 2025年中學春季學期六年級組工作總結(四篇)
- 專題01 三角函數(shù)的圖像與性質(解析版)
- 2025年個人飯店承包經(jīng)營合同經(jīng)典版(三篇)
- 木材檢驗與運輸合同
- 汽車輪胎運輸協(xié)議范本
- 天主教堂裝修意向協(xié)議
- 學校裝修施工合同模板
- 人口分布 高一地理下學期人教版 必修第二冊
- GH/T 1030-2004松花粉
- 部編版六年級下冊語文第3單元習作例文+習作PPT
- 四年級上冊英語試題-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 辦理工傷案件綜合應用實務手冊
- 子宮內膜異位癥診療指南
- 《高級計量經(jīng)濟學》-上課講義課件
- 《現(xiàn)代氣候學》研究生全套教學課件
- 護理診斷及護理措施128條護理診斷護理措施
- 九年級物理總復習教案
- 天然飲用山泉水項目投資規(guī)劃建設方案
評論
0/150
提交評論