本算例利用OpenFOAM计算两个同心圆柱体之间的层流流动,并将计算结果与文献数据进行比较。
算例来源:ANSYS Verification VMFL001。
参考文献:F. M. White. Viscous Fluid Flow. Section 3-2.3. McGraw-Hill Book Co., Inc.. New York, NY. 1991.
”
几何如图所示。内筒以恒定速度旋转带动流体运动,外筒保持静止。本案例可以采用二维几何建模。
图中几何尺寸为:
流体介质属性为:
内筒旋转角速度1 rad/s。
采用稳态层流计算。并与理论值进行比较(理论值来自F. M. White. Fluid Mechanics(7nd ed). P275 。
式中,为内部圆柱旋转角速度;为内部圆柱半径; 为外部圆柱半径;为面上点到圆形的距离。
本案例中,流动为层流流动。可以选择使用icoFoam计算足够长时间的瞬态。二维问题这里以官方算例cavity作为模板。案例计算网格如下图所示,采用一半模型进行计算,其中边界top与bot为周期边界。
注:本算例也可以采用完整模型进行计算。除了可以使用icoFoam求解器外,也可以使用simpleFoam、pimpleFoam求解器进行层流计算。
”
run
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .
mv cavity ex1
cd ex1
ex1.cas
拷贝到文件夹ex1中。fluentMeshToFoam ex1.cas
转换完毕后查看constant/polyMesh/boundary
文件中的边界信息,确保边界无误。本算例的boundary文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * //
5
(
innerwall
{
type wall;
inGroups List<word> 1(wall);
nFaces 60;
startFace 2340;
}
outerwall
{
type wall;
inGroups List<word> 1(wall);
nFaces 60;
startFace 2400;
}
bot
{
type cyclicAMI;
inGroups List<word> 1(symmetry);
nFaces 20;
startFace 2320;
// 下面是指定旋转周期边界
matchTolerance 0.0001;
neighbourPatch top;
transformType rotational;
rotationAxis (0 0 1);
rotationCentre (0 0 0);
rotationAngle 180;
method faceAreaWeightAMI;
}
top
{
type cyclicAMI;
inGroups List<word> 1(symmetry);
nFaces 20;
startFace 2460;
// 下面是指定旋转周期边界
matchTolerance 0.0001;
neighbourPatch bot;
transformType rotational;
rotationAxis (0 0 1);
rotationCentre (0 0 0);
rotationAngle -180;
method faceAreaWeightAMI;
}
frontAndBackPlanes
{
type empty;
inGroups List<word> 1(empty);
nFaces 2400;
startFace 2480;
}
)
网格处理完毕后可以利用命令checkMesh
检查计算网格。
打开文件constant/transportProperties
,修改介质的运动粘度为0.0002 m2/s。文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
// * * * * * * * * * * * * * //
nu [0 2 -1 0 0 0 0] 0.0002;
1、设置U文件
本算例中只有内壁面innerwall有旋转速度。U文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
// 指定边界innerwall绕z轴旋转,角速度为1 rad/s
innerwall
{
type rotatingWallVelocity;
origin (0 0 0);
axis (0 0 1);
omega 1;
}
outerwall
{
type noSlip;
}
// 指定边界top类型为周期边界cyclicAMI
// 边界为静止
top
{
type cyclicAMI;
value uniform (0 0 0);
}
// 指定边界bot类型为周期边界cyclicAMI
// 边界为静止
bot
{
type cyclicAMI;
value uniform (0 0 0);
}
// 指定边界类型为empty,采用2d计算
frontAndBack
{
type empty;
}
}
2、设置p文件
p文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p;
}
// * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0];
// 设置内部初始压力为0
internalField uniform 0;
boundaryField
{
// 内外壁面边界为零压力梯度
"(innerwall|outerwall)"
{
type zeroGradient;
}
// 指定top与bot边界为周期边界,压力为0
"(top|bot)"
{
type cyclicAMI;
value uniform 0;
}
// 2d计算指定边界为empty
frontAndBack
{
type empty;
}
}
这里只需要修改system/controlDict
文件,该文件修改完毕后如下所示。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * //
application icoFoam;
startFrom startTime;
startTime 0;
stopAt endTime;
// 指定计算5s
endTime 5;
// 时间步长选择0.001s
deltaT 0.001;
writeControl timeStep;
// 100个时间步保存一次
writeInterval 100;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
所有的文件准备完毕后即可进行计算。
icoFoam
下面为用用于gnuplot的结果比较代码。
cd "/mnt/i/OpenFOAM/Verification/ex1"
set xrange [0.0178:0.04628]
plot 0.0178*(0.04628/x-x/0.04628)/(0.04628/0.0178-0.0178/0.04628) lw 2 w line t "analysis","ex1.txt" u 1:2 w point pt 7 t "numeric"
unset key
set xlabel "x(m)"
set ylabel "velocity(m/s)"
replot
声明:原创文章,欢迎留言与我讨论,如需转载留言