計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇_第1頁
計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇_第2頁
計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇_第3頁
計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇_第4頁
計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

OpenFOAM的基礎(chǔ)篇陳麗萍南京工業(yè)大學(xué)城建學(xué)院暖通研究所計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇第一部分OpenFOAM的簡(jiǎn)介計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

OpenFOAM(OpenSourceFieldOperationandManipulation)第一部分OpenFOAM簡(jiǎn)介其官方網(wǎng)站為”庫(kù)”(library)C++語言編寫計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇利用OpenFOAM得到可執(zhí)行的軟件(application)求解器solver工具utility數(shù)值計(jì)算后處理流體流動(dòng)、化學(xué)反應(yīng)、換熱、結(jié)構(gòu)動(dòng)力學(xué)、電磁場(chǎng)、金融評(píng)估等建模、網(wǎng)格、邊界條件前處理計(jì)算結(jié)果顯示和處理1.OpenFOAM框架計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇2.OpenFOAM應(yīng)用分類應(yīng)用分類(1)直接利用標(biāo)準(zhǔn)求解器(2)自定義求解器(3)自定義離散方法替代商業(yè)軟件免費(fèi)喔這類需求較大,商業(yè)軟件與之不可相比的更高級(jí)的應(yīng)用下面再談?wù)劮诸悾?)和(3)的魅力計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇商業(yè)軟件中的所謂udf,usersubroutine和這是不可相比的??傊?,將OpenFOAM作為類庫(kù)來構(gòu)建自己的求解器,這是其它軟件無法實(shí)現(xiàn)的。

分類(2)自定義求解器的魅力按照自己的求解流程來編寫求解器,關(guān)注的重點(diǎn)是求解的流程。需要關(guān)心離散和求解的最底層的知識(shí)嗎?計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇開始初始值用CFD進(jìn)行室內(nèi)溫度計(jì)算輻射傳熱計(jì)算Qri導(dǎo)熱計(jì)算Qcdi由熱平衡求新的對(duì)流傳熱量Qcvim+1收斂條件結(jié)束Qcvim賦新值計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

對(duì)于研究離散格式、代數(shù)求解器用戶來說,創(chuàng)建更高效更高精度的離散方法,這需要修改finiteVolume庫(kù)和OpenFOAM庫(kù)中對(duì)應(yīng)的代碼。分類(3)自定義離散方法的魅力尤其是對(duì)流項(xiàng),盡管OpenFOAM已經(jīng)提供了基于NVD和TVD的模板和40多種有名的高階高精度格式,這仍然是不夠的,對(duì)流項(xiàng)的離散仍然是目前CFD的重點(diǎn)研究方向。高級(jí)應(yīng)用服務(wù)未來計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇第二部分OpenFOAM的應(yīng)用計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇標(biāo)準(zhǔn)求解器solver的應(yīng)用(以頂蓋驅(qū)動(dòng)流為例)計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇算例Case的結(jié)構(gòu):計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇FoamFile{version2.0;formatascii;classdictionary;objectblockMeshDict;}//********************//convertToMeters0.1;網(wǎng)格文件blockMeshDict文件頭計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇vertices((000)(100)(110)(010)(000.1)(100.1)(110.1)(010.1));blocks(hex(01234567)(20201)simpleGrading(111));edges();計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇patches(wallmovingWall((3762))wallfixedWalls((0473)(2651)(1540))emptyfrontAndBack((0321)(4567)));

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇算例所在的目錄下,在運(yùn)行終端窗口輸入:

blockMesh進(jìn)行網(wǎng)格生成。網(wǎng)格生成過程中,如有錯(cuò)誤,運(yùn)行終端窗口將顯示。查看網(wǎng)格

在運(yùn)行終端輸入:paraFoam計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇FoamFile

{

version

2.0;

format

ascii;

class

dictionary;

object

controlDict;

}

//******************//applicationicoFoam;

startFrom

startTime;

startTime

0;

stopAt

endTime;

endTime

0.5;

deltaT

0.005;

文件為system/controlDict,典型的controlDict文件如下計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇writeControl

timeStep;

writeInterval

20;

purgeWrite

0;

writeFormat

ascii;

writePrecision

6;

uncompressed/compressed;

writeCompressionuncompressed;

timeFormat

general;

timePrecision

6;//時(shí)間文件夾精度

runTimeModifiableyes;//在求解過程中是否允許修改以上參數(shù)計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇文件為system/fvSolution,典型的文件為:(省去文件頭)solvers

//方程求解器

{

pPCG

//壓力采用預(yù)條件共軛梯度法(主要用于求解對(duì)稱矩陣)

{

preconditioner

DIC;

tolerance

1e-06;

//殘差

relTol

0;

//迭代容差

};

UPBiCG//速度采用預(yù)條件雙共軛梯度法(主要用于反對(duì)稱矩陣)

{

preconditioner

DILU;//預(yù)測(cè)器,對(duì)角不完全LU

tolerance

1e-05;//殘差

relTol

0;//迭代容差

};

}計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇PISO

//piso控制參數(shù)

{

nCorrectors

2;//修正次數(shù)

nNonOrthogonalCorrectors0;//非正交修正次數(shù)

pRefCell

0;//壓力參考cell的index

pRefValue

0;//壓力參考值

}

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇離散格式的選擇:

文件:system/fvSchemes,典型文件:(省去文件頭)ddtSchemes

{

default

Euler;//歐拉離散

}gradSchemes//梯度離散

{

default

Gausslinear;//高斯方法,線性插值

grad(p)

Gausslinear;//壓力的梯度離散

}

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇divSchemes

//散度離散

{

default

none;

//散度的離散(必須指定沒有默認(rèn)值)

div(phi,U)

Gausslinear;//對(duì)流項(xiàng)離散,高斯理論,用線性插值

}laplacianSchemes//拉普拉斯項(xiàng)離散

{

default

none;

//拉普拉斯項(xiàng)離散,必須指定

laplacian(nu,U)Gausslinearcorrected;

//擴(kuò)散項(xiàng)離散采用高斯理論,采用線性插值

laplacian((1|A(U)),p)Gausslinearcorrected;//壓力方程離散采用高斯理論,線性插值

}計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇interpolationSchemes

//插值格式

{

default

linear;

//默認(rèn)線性插值

interpolate(HbyA)linear;//線性插值

}snGradSchemes//梯度法向分量

{

default

corrected;//默認(rèn)帶有非正交修正

}fluxRequired//是否計(jì)算流律

{

default

no;//默認(rèn)不計(jì)算

p;//壓力需要計(jì)算,因?yàn)樾枰脡毫α髀尚拚俣葈計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇0目錄中壓力文件:FoamFile{version2.0;formatascii;classvolScalarField;objectp;}//***********************//dimensions[02-20000];internalFielduniform0;計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇boundaryField{movingWall{typezeroGradient;}fixedWalls{typezeroGradient;}frontAndBack{typeempty;}

}//***********************************//計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

dimensions[01-10000];internalFielduniform(000);boundaryField{movingWall{typefixedValue;valueuniform(100);}fixedWalls{typefixedValue;valueuniform(000);}frontAndBack{typeempty;}}速度文件如下:計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

transportProperties字典文件:FoamFile{version2.0;formatascii;classdictionary;location"constant";objecttransportProperties;}//*********************//nunu[02-10000]0.01;在算例所在的目錄下,在運(yùn)行終端輸入:icoFoam

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇等值線或等值面計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇第三部分求解器計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇求解器結(jié)構(gòu):計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

Info<<“ReadingtransportProperties\n”<<endl;

//聲明屬性字典類對(duì)象。

IOdictionarytransportProperties

(

IOobject

(

“transportProperties”,

runTime.constant(),//位置

mesh,

IOobject::MUST_READ,

IOobject::NO_WRITE

)

);

createFields.H文件

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

dimensionedScalarnu

(

transportProperties.lookup("nu")

);//創(chuàng)建壓力場(chǎng)

Info<<"Readingfieldp\n"<<endl;

volScalarFieldp

(

IOobject

(

"p",

runTime.timeName(),

mesh,

IOobject::MUST_READ,

IOobject::AUTO_WRITE

),

mesh

);計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇//提示并創(chuàng)建速度場(chǎng)

Info<<"ReadingfieldU\n"<<endl;

volVectorFieldU

(

IOobject

(

"U",

runTime.timeName(),

mesh,

IOobject::MUST_READ,

IOobject::AUTO_WRITE

),

mesh

);

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇//創(chuàng)建界面流律

#

include"createPhi.H"

//設(shè)定壓力參考cell的index和參考值

labelpRefCell=0;

scalarpRefValue=0.0;

//通過查詢system/fvSolution下的PISO進(jìn)行更新壓力參考cell更新并設(shè)定參考值。

setRefCell(p,mesh.solutionDict().subDict("PISO"),pRefCell,pRefValue);

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇intmain(intargc,char*argv[])

{

#

include"setRootCase.H"

#

include"createTime.H"

#

include"createMesh.H"

#

include"createFields.H"

#

include"initContinuityErrs.H"

//**********************************//

icoFoam.C

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

Info<<“\nStartingtimeloop\n”<<endl;

//用runTime控制整個(gè)的循環(huán)

for(runTime++;!runTime.end();runTime++)

{

//顯示運(yùn)行時(shí)間

Info<<“Time=”<<runTime.timeName()<<nl<<endl;

#

include“readPISOControls.H”//讀入piso控制參數(shù),寫在runTime循環(huán)中

#

include"CourantNo.H“

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

//構(gòu)造速度方程

fvVectorMatrixUEqn

(

fvm::ddt(U)

+fvm::div(phi,U)

-fvm::laplacian(nu,U)

);

solve(UEqn==-fvc::grad(p));計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

//---PISOloop----速度修正步

for(intcorr=0;corr<nCorr;corr++)

{

//求解系數(shù)矩陣對(duì)角元素的倒數(shù)。

volScalarFieldrUA=1.0/UEqn.A();U=rUA*UEqn.H();//更新速度

//流通量修正

phi=(fvc::interpolate(U)&mesh.Sf())+fvc::ddtPhiCorr(rUA,U,phi);

//調(diào)整邊值,以便滿足連續(xù)性條件

adjustPhi(phi,U,p);

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇//非正交循環(huán)

for(intnonOrth=0;nonOrth<=nNonOrthCorr;nonOrth++)

{

fvScalarMatrixpEqn//求解壓力方程

(

fvm::laplacian(rUA,p)==fvc::div(phi)

);

pEqn.setReference(pRefCell,pRefValue);

pEqn.solve();

//根據(jù)新求解的壓力,更新面流通量

if(nonOrth==nNonOrthCorr)

{

phi-=pEqn.flux();

}

}

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

//計(jì)算連續(xù)性方程誤差

#

include"continuityErrs.H“

U-=rUA*fvc::grad(p);//根據(jù)新的壓力,修正速度

//修正速度邊界(主要針對(duì)第二類邊界條件)

U.correctBoundaryConditions();

}//PISO循環(huán)結(jié)束

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇

//輸出計(jì)算結(jié)果

runTime.write();//顯示執(zhí)行時(shí)間,CPU時(shí)間

Info<<“ExecutionTime=”<<runTime.elapsedCpuTime()<<“s”

<<“

ClockTime=”<<runTime.elapsedClockTime()<<“s”

<<nl<<endl;

}//大循環(huán)結(jié)束

Info<<“End\n”<<endl;

return(0);

)//主程序結(jié)束計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇icoFoam.C

源程序文件名

EXE=$(FOAM_APPBIN)/icoFoam

可執(zhí)行文件名

Make/files文件:EXE_INC=

包含的頭文件

-I$(LIB_SRC)/finiteVolume/lnInclude

EXE_LIBS=

鏈接庫(kù)

-lfiniteVolumeMake/options文件:在運(yùn)行終端運(yùn)行wmake,進(jìn)行編譯。計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇第四部分定制自己的求解器計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇在icoFoam中加入濃度場(chǎng)需要解決的問題:

a)如何在icoFoam中加入濃度場(chǎng)方程

b)如何創(chuàng)建物性,Γcc)如何在算例中設(shè)定C和Γcd)如何設(shè)定T的離散格式

e)如何設(shè)定T的求解器的收斂標(biāo)準(zhǔn)等

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇步驟:1)初步建立cicoFoam求解器

3)編譯cicoFoam求解器2)添加濃度方程修改creatFields.H文件修改cicoFoam.C文件

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇初步建立cicoFoam求解器1.復(fù)制目錄icoFoam到新的位置,新目錄名為cicoFoam.

cdcicoFoam2.原文件改名

將icoFoam.C改名cicoFoam.C

刪除依賴文件icoFoam.dep3.

修改編譯文件files和options

進(jìn)入Make目錄,打開files文件

icoFoam.C

改名cicoFoam.CEXE=$(FOAM_APPBIN)/icoFoam

改為:EXE=$(FOAM_USER_APPBIN)/cicoFoam

可執(zhí)行文件名

此例中options不需修改計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇4.刪除原來的obj文件5.編譯wmake

下面要完成2)添加濃度方程修改creatFields.H文件修改cicoFoam.C文件

初步建立cicoFoam求解器,完成了??!計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇打開CreateFields.H

修改CreateFields.H

加入濃度方程需要的物性

dimensionedScalarΓc

//首先讀入濃度擴(kuò)散系數(shù)

(

transportProperties.lookup("Γc")

);

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇加入濃度場(chǎng)

Info<<"ReadingfieldC"<<endl;

volScalarFieldC

(

IOobject

(

“C",

runTime.timeName(),

mesh,

IOobject::MUST_READ,

IOobject::AUTO_WRITE

),

mesh

);

修改CreateFields.H修改CreateFields.H也完成了??!計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇修改cicoFoam.C在cicoFoam.C加入濃度微分方程,在PISO循環(huán)后面。

fvScalarMatrixCeqn濃度是標(biāo)量方程

(

fvm::ddt(C)

+fvm::div(phi,C)

要用到界面流量

-fvm::laplacian(Γc,C)

擴(kuò)散項(xiàng)

);

Ceqn.solve();

求解

wmake3)編譯cicoFoam求解器什為什么?修改cicoFoam.C

完成啦??!新求解器就這樣建立了??!計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇如何應(yīng)用cicoFoam求解器?1.在算例中加入新方程的初始和邊界條件2.修改離散格式和代數(shù)求解控制文件3.運(yùn)行計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇(1)拷貝一個(gè)cavity算例到ccavity

(2)修改transportProperties字典文件,設(shè)定Γc

cdconstant

修改transportProperties文件,設(shè)定Γc=0.002m2/s

Γc

Γc[02-10000]0.002;1.在算例中加入新方程的初始和邊界條件計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇(3)創(chuàng)建濃度C文件,設(shè)定初始值和邊界

進(jìn)入0目錄拷貝一個(gè)p文件,改名為C文件

修改C文件,設(shè)定初始值和邊界計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇2修改離散格式和代數(shù)求解控制文件

A進(jìn)入system目錄

打開fvSchemes文件,添加

divSchemes

{

default

none;

div(phi,U)

Gaussupwind;

div(phi,C)

Gaussupwind;

}

laplacianSchemes

{

default

none;

laplacian(nu,U)Gausslinearcorrected;

laplacian(Γc,C)Gausslinearcorrected;

laplacian((1|A(U)),p)Gausslinearcorrected;

}計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇在fvSolution中設(shè)置代數(shù)求解器選項(xiàng)

CPBiCG

{

preconditioner

DILU;

tolerance

1e-06;

relTol

0;

};

3運(yùn)行

cicoFoam.ccavity

計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇第五部分新邊界條件的創(chuàng)建計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇已知新邊界條件新邊界條件命名為newgrad步驟:1.復(fù)制相近的邊界,改名為newgrad2.修改.H文件和.C文件3.添加關(guān)于新邊界的編譯文件4.編譯怎么創(chuàng)建和應(yīng)用??計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇1.復(fù)制相近的邊界,改名為newgrad(1)復(fù)制

在OpenFOAM-1.X/src/finiteVolume/fields/fvpatchFields/derived中復(fù)制totalTemperature文件夾(2)改名

將復(fù)制的totalTemperature文件夾改名為newgrad,

文件夾內(nèi)所以關(guān)于totalTemperature的詞全部改為newgrad.計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇2.修改newgradFvPatchScalarField.H(1)修改newgradFvPatchScalarField.H

classnewgradFvPatchScalarField:publicfixedGradientFvPatchScalarField類型修改classtotalTemperatureFvPatchScalarField:publicfixedValueFvPatchScalarField變了!計(jì)算力學(xué)OpenFOAM講座-基礎(chǔ)篇wor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論