五雇锡、例子:在icoFoam中加入溫度場(chǎng)求解
準(zhǔn)備:
能量控制方程:
其中DT為熱擴(kuò)散率。在壁面上給定值條件僚焦。
需要解決的問(wèn)題:
- 如何創(chuàng)建標(biāo)量場(chǎng)T
- 如何創(chuàng)建熱擴(kuò)散率DT
- 如何定義溫度方程锰提,并求解
- 如何在算例中設(shè)定T和DT
- 如何設(shè)定T的離散格式
- 如何設(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 transportProperties\n" << 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
dimensionedScalar nu //首先讀入粘性系數(shù)
(
transportProperties.lookup("nu")
); //創(chuàng)建有量綱標(biāo)量nu惩嘉,nu通過(guò)從字典transportProperties查找”nu”來(lái)賦值
//添加新方程需要的物性DT
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文黎,最快的加入溫度場(chǎng)的方法是拷貝p場(chǎng)的代碼,修改為
Info<< "Reading field T\n" << 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)建具體解釋如下:
- 創(chuàng)建了標(biāo)量場(chǎng)T
- T通過(guò)讀(IOobject::MUST_READ)在runTime.timeName()目錄下名稱為“T”的文件創(chuàng)建淋纲,在開(kāi)始計(jì)算時(shí)劳闹,runTime.timeName()是contorlDict中設(shè)定的startTime值決定的。
- T將自動(dòng)寫入(IOobject::AUTO_WRITE)計(jì)算結(jié)果到runTime.timeName()目錄中,runTime.timeName()隨迭代是變化的洽瞬,寫入控制由contorlDict中設(shè)定本涕。
- T是定義在mesh對(duì)象上的,這意味著T在內(nèi)部cell上有值internalField伙窃,在邊界上還需要邊界條件菩颖,這與polyMesh/boundary中要一致。
2为障、在求解器中加入新的求解方程
下一步回到myicoFoam.C加入新的微分方程晦闰,由于溫度場(chǎng)依賴于速度場(chǎng),可放在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呻右、編譯
wmake
4、在算例中加入新方程的初始和邊界條件
- 拷貝一個(gè)cavity算例到mycavity
- 修改transportProperties字典文件鞋喇,設(shè)定DT
cd constant
修改transportProperties文件声滥,前面已提到DT要從該字典文件讀入。設(shè)定DT=0.002m2/s
DT [0 2 -1 0 0 0 0] 0.002;
- 修改T文件侦香,設(shè)定初始值和邊界
cd 0 #進(jìn)入0目錄
拷貝一個(gè)T文件
cp p T
修改T文件為
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
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; //邊界為300℃
}
5落塑、修改離散格式和代數(shù)求解器求解控制文件
- 進(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;
div(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
{
solver PBiCG;
preconditioner DILU;
tolerance 1e-06;
relTol 0;
};
注意T方程形成的矩陣是非對(duì)稱的膘壶,不要用PCG和DIC
6错蝴、運(yùn)行
blockMesh
myicoFoam . mycavity