本案例演示利用OpenFOAM的icoFoam求解器計算彎曲管道中的混合流動問題。
1 拷貝tutorials文件
啟動終端,且拷貝tutorials文件夾中的文件。利用命令:
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/elbow/ $FOAM_RUN
將案例文件拷貝到了$FOAM_RUN路徑中。
此時可以利用命令查看目錄結構:
tree $FOAM_RUN/elbow
查詢結果如下圖所示。
$ tree $FOAM_RUN/elbow
/home/ofuser/blueCFD/ofuser-of4/run/elbow
├── 0
│ ├── p
│ └── U
├── Allclean
├── Allrun
├── constant
│ └── transportProperties
├── elbow.msh
└── system
├── controlDict
├── foamDataToFluentDict
├── fvSchemes
└── fvSolution
3 directories, 10 files
包含三個文件夾:0、constant以及system。
2 轉換網格
案例中的網格使用的是msh文件,這里要通過命令將其轉化為openfoam網格。
采用命令:
cd $FOAM_RUN/elbow
fluentMeshToFoam elbow.msh
如下圖所示。
注:Fluent提供了眾多的工具用於將外部網格文件轉換為OpenFOAM網格
3 case結構
OpenFOAM的case組織結構如如所示。
包含三個基本文件夾:
- 0:存儲物理量的初始值
- constant:存儲網格參數、邊界條件以及物理屬性(如材料參數、湍流參數等)
- system:存儲一些求解控制參數
4 設置0文件夾
本案例中0文件夾中包含兩個文件:p文件與U文件,分別設置初始時刻的壓力與速度。
4.1 修改p文件
利用文本編輯器打開p文件。在blueCFD中可以使用命令(先進入0目錄,然后用nano打開p文件):
cd 0
nano p
注意:在不同的linux系統中可以使用不同的文本編輯器,如在ubuntu系統中,可以使用gedit、nano或vi
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 4.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
wall-4
{
type zeroGradient;
}
velocity-inlet-5
{
type zeroGradient;
}
velocity-inlet-6
{
type zeroGradient;
}
pressure-outlet-7
{
type fixedValue;
value uniform 0;
}
wall-8
{
type zeroGradient;
}
frontAndBackPlanes
{
type empty;
}
}
// ************************************************************************* //
文件內容:
- 壓力單位是m2/s2。OpenFOAM不可壓縮求解器中壓力定義為單位質量的壓力。即壓力與密度的比值。
- 量綱矩陣:[質量 長度 時間 溫度 物質的量]
- internalField關鍵字定義的是求解區域中的物理量
- 邊界類型:zeroGradient、fixedValue及empty。
關於OpenFOAM中的邊界類型:
- zeroGradient:邊界物理量梯度為0。(Neumann邊界)
- fixedValue:邊界物理量為定值。(Direchlet邊界)
- empty:在利用2D模型模擬3D情況時,側邊同城設定為empty邊界,在計算過程中,此邊界並不參與求解。
當fixedvalue的值與internalField的值相同時,fixedValue邊界與zeroGradient邊界等效。
4.2 U文件
U文件中指定邊界速度值。利用文本編輯器打開U文件。
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 4.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
wall-4
{
type noSlip;
}
velocity-inlet-5
{
type fixedValue;
value uniform (1 0 0);
}
velocity-inlet-6
{
type fixedValue;
value uniform (0 3 0);
}
pressure-outlet-7
{
type zeroGradient;
}
wall-8
{
type noSlip;
}
frontAndBackPlanes
{
type empty;
}
}
// ************************************************************************* //
文件中指定邊界velocity-inlet-5的速度為x方向1m/s,velocity-inlet-6邊界速度為y方向3m/s。
本案例中U文件不需要修改。
5 constant目錄
constant目錄下保存了網格數據與物性參數等。
├── polyMesh
│ ├── boundary
│ ├── cellZones
│ ├── faces
│ ├── faceZones
│ ├── neighbour
│ ├── owner
│ ├── points
│ └── pointZones
└── transportProperties
1 directory, 9 files
本案例中的網格來自於外部轉化,因此不需要修改polyMesh文件夾中的內容。
transportProperties文件中存儲了傳輸屬性參數,用文本文件打開來看。
nano transportProperties
此文件的內容:
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 4.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nu [0 2 -1 0 0 0 0] 0.01;
// ************************************************************************* //
此文件中只是定義了粘度為0.01 m2/s。在不可壓縮流動中,只需要定義此參數。
6 system目錄
system目錄下包含四個文件。
.
├── controlDict
├── foamDataToFluentDict
├── fvSchemes
└── fvSolution
0 directories, 4 files
- fvShceme:該文件中定義了求解過程中所采用的各種離散格式。
- fvSolution:該文件包含壓力速度耦合方法、用於求解差分量的數值方法,以及收斂殘差等。
- controlDict:此文件中定義了各種求解控制參數,如時間步長、文件保存間隔等。
- foamDataToFluentDict:此文件只有當使用了fluentMeshToFoam命令才會出現,一般情況下不用修改。
本案例需要關注的是文件controlDict。用文本文件打開此文件,修改endTime為75。其他參數保持默認。
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 4.x |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application icoFoam;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 75;
deltaT 0.05;
writeControl timeStep;
writeInterval 20;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
// ************************************************************************* //
7 求解計算
在case路徑下輸入命令:
icoFoam
計算自動進行,直至求解完成。
8 計算后處理
輸入命令:
paraFoam
系統啟動paraView進行后處理。
速度分布如圖所示。
壓力分布如圖所示。