管網:https://doc.cfd.direct/openfoam/user-guide-v9/cavity
一、算例實作
檔案結構
- 0:存放初場
- constant:存放網格資訊
- system:存放網格劃分、計算等工具

1、畫網格
blockMesh

2、求解
icoFoam

3、保存檔案
touch cavity.OpenFOAM
4、后處理
paraview
使用openFoamReader打開

顯示所有邊界

apply

二、網格加密
1、網格劃分
在icoFoam檔案夾內創建cavityFine檔案夾,復制cavity檔案夾內的constant和system檔案夾至該檔案夾,
在system/blockMeshDict檔案改變網格數量,由之前的(20,20,1)改為(40,40,1),之后使用blockMesh生成網格資訊

2、mapFields映射結果
將粗網格中的0.5結果,映射到細網格中,
修改controlDict檔案

映射
mapFields ../cavity/cavity -consistent

3、計算并輸出log檔案
// 計算并輸出log檔案
icoFoam > log
// 查看log檔案
cat log
// 可以合并運行
icoFoam > log && cat log
4、calcType
可以對速度的某個量進行可視化處理并咬著計算域內的一條線來繪制一個二維的圖
postProcess -func "components(U)"
此時會在時間步長檔案夾下出現3個新檔案

5、后處理
使用paraview加載資料,就會顯示剛才計算出的值,

三、網格非均勻分布
1、修改blockMeshDict
在icoFoam檔案夾內創建asMeshCavity檔案夾,復制cavity檔案夾內的constant和system檔案夾至該檔案夾,
修改constant/blockMeshDict檔案,如下

/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 9
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 0.1;
vertices
(
(0 0 0)
(0.5 0 0)
(1 0 0)
(0 0.5 0)
(0.5 0.5 0)
(1 0.5 0)
(0 1 0)
(0.5 1 0)
(1 1 0)
(0 0 0.1)
(0.5 0 0.1)
(1 0 0.1)
(0 0.5 0.1)
(0.5 0.5 0.1)
(1 0.5 0.1)
(0 1 0.1)
(0.5 1 0.1)
(1 1 0.1)
);
blocks
(
hex (0 1 4 3 9 10 13 12) (10 10 1) simpleGrading (2 2 1)
hex (1 2 5 4 10 11 14 13) (10 10 1) simpleGrading (0.5 2 1)
hex (3 4 7 6 12 13 16 15) (10 10 1) simpleGrading (2 0.5 1)
hex (4 5 8 7 13 14 17 16) (10 10 1) simpleGrading (0.5 0.5 1)
);
edges
(
);
boundary
(
movingWall
{
type wall;
faces
(
(6 15 16 7)
(7 16 17 8)
);
}
fixedWalls
{
type wall;
faces
(
(3 12 15 6)
(0 9 12 3)
(0 1 10 9)
(1 2 11 10)
(2 5 14 11)
(5 8 17 14)
);
}
frontAndBack
{
type empty;
faces
(
(0 3 4 1)
(1 4 5 2)
(3 6 7 4)
(4 7 8 5)
(9 10 13 12)
(10 11 14 13)
(12 13 16 15)
(13 14 17 16)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //
2、畫網格
blockMesh
3、生成asyMeshCavity.OpenFOAM檔案
touch asyMeshCavity.OpenFOAM
4、后處理
paraview

5、修改時間步長


6、映射場
將cavityFine中的0.7檔案映射過來
mapFields -consistent ../cavityFine
7、計算輸出
icoFoam > log

四、大雷諾數
1、創建檔案夾并拷貝
創建檔案夾
mkdir cavityHighRe
拷貝cavity檔案夾至該檔案夾
cp -r ../cavity/cavity/ .
2、修改雷諾數
修改constant/transportProperties檔案

即可提高雷諾數10倍
3、修改控制檔案
從0.5開始計算到2s

4、計算
nohup nice -19 icoFoam > log && cat log
- nohup:黨用戶退出登錄時,程式依然執行;
- nice:調整程式優先級,-20對應優先級最高,19對應優先級最低行程,
可以看出1.4s時Ux結束迭代,No Iterations 0表示速度求解停止,

五、RAS模型
進入pisoFoam/RAS/cavity

可以看到在0檔案夾下有許多有關湍流模型的引數

在momentumTransport檔案里定義模型
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 9
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
location "constant";
object momentumTransport;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
simulationType RAS;
RAS
{
model kEpsilon;
turbulence on;
printCoeffs on;
}
// ************************************************************************* //
simulationType:laminar, RAS and LES
printCoeffs:為on時,這些引數會被輸出到終端
六、CavityClipped
1、劃分網格
blockMesh
2、復制0檔案夾內容至0.5
cp -r 0 0.5
3、設定
controlDict檔案開始時間設定為0.5,結束時間設定為0.6
system/mapFieldsDict檔案
有兩個引數
patchMap (lid movingWall);
cuttingPatches ();
- 當用戶向把原始場的patches條件投影到背投影場的patches的時候,我們使用patchMap,
- 當用戶打算把原始場內的資料投影到被投影場的邊界時,我們使用cuttingPatches串列
這里lib邊界條件根cavity算例的movingWall邊界條件是一致的,

4、計算
icoFoam > log
5、后處理

修改樣式


修改Legend

繪制矢量圖


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548544.html
標籤:C++
上一篇:架構的演進
