本文介绍OpenFOAM随机算例中laplacianFoam求解器的flage算例。
计算条件模型如下图所示。内壁面patch2温度273 K,外部壁面patch4温度573 K,计算热传导状况。
flage
算例位于$FOAM/TUTORIALS/basic/flage
中,该算例演示利用laplacianFoam求解器计算计算区域内的瞬态热传导。
算例原始文件夹结构如下图所示。
其中文件Allclearn及Allrun
均为bash脚本文件,主要用于帮助用户运行该算例,其中Allclean
文件用于清除与算例运行无关的文件,而Allrun
则包含了运行该算例的所有命令过程。
打开Allrun
文件,其内容如下所示。
#!/bin/sh
cd ${0%/*} || exit 1 # 进入到当前路径
# 将RunFunctions添加到环境变量
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# 获取运行该算例所需的求解器
application=$(getApplication)
# 定义函数用于执行ansysToFoam命令将ans网格转换为openfoam网格
runAnsysToFoam()
{
if [ -f log.ansysToFoam ]
then
echo "ansysToFoam already run on $PWD: remove log file to re-run"
else
echo "Running ansysToFoam: converting mesh $1"
ansysToFoam $1 -scale $2 > log.ansysToFoam 2>&1
fi
}
runAnsysToFoam flange.ans 0.001 //转换计算网格,网格进行了缩放
runApplication $application // 调用求解器执行计算
runApplication foamToEnsight // 将计算结果转换为ensight格式(非必须)
runApplication foamToEnsightParts //转换计算结果(非必须)
runApplication foamToVTK //转换计算结果(非必须)
Allrun文件可以直接删除掉。
若不使用Allrun文件,运行该算例只需要三条命令:
ansysToFoam flange.ans -scale 0.001
laplacianFoam
paraFoam
OpenFOAM中laplacianFoam求解器计算的是瞬态热传导方程:
式中,为热扩散系数,其单位为m2/s,,为热导率,为密度,为定压比热容。
本算例采用外部文件转换的方式准备。OpenFOAM支持转换多种不同格式类型的计算网格,转换工具位于路径$FOAM_UTILITIES/mesh/conversion
,如下图所示。
本算例要转换的ans格式的网格文件,这是ansys格式网格文件,可以使用命令ansysToFoam
进行转换。
在转换的过程中,可以使用参数-scale
对计算网格进行缩放,如本算例将网格各方向尺寸缩小1000倍。网格缩放功能主要是应对模型单位不一致的情况。
网格缩放完毕后,通常需要使用命令checkMesh
对网格进行检查,检查结果如下所示。
确保网格检查没有问题再进行下一步操作。
在transportProperties
文件中设置物理属性参数。这里需要指定参数DT
的值。
文件内容如下所示,指定DT值为4e-5
。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
// * * * * * * * * * * * * * * * * //
DT DT [0 2 -1 0 0 0 0] 4e-05;
OpenFOAM的边界条件与初始条件都是在0
文件夹中设置相应文件。
本算例只有一个待求的物理量T
,因此只需要指定0
文件夹中的T
文件。
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object T;
}
// * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 1 0 0 0]; // 量纲为温度K
internalField uniform 273; //内部网格被初始化为273 K
// 下面指定各边界上T的值
boundaryField
{
patch1
{
//零梯度表示绝热边界,边界温度值通过内部网格值进行计算
type zeroGradient;
}
patch2
{
// 采用第一类边界指定温度值为273 K
type fixedValue;
value uniform 273;
}
patch3
{
type zeroGradient;
}
patch4
{
// 指定边界温度573 K
type fixedValue;
value uniform 573;
}
}
1、controlDict文件
在controlDict文件中指定与计算迭代相关的参数。文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application laplacianFoam; // 这里指定求解器,用于Allrun中提取求解器
startFrom startTime; // 指定计算的起始时刻方式为startTime,备选项还有firstTime及latestTime
startTime 0; // 指定起始时刻为0,意为从0时刻开始计算
stopAt endTime; // 指定终止时刻为endTime,备选项还有nextWrite、noWriteNow及writeNow
endTime 3; // 指定终止时刻为3 s
deltaT 0.005; // 指定时间步长为0.005 s
writeControl runTime; // 按时间写出文件,备选项包括adjustableRunTime、clockTime、cpuTime、runTime、timeStep
writeInterval 0.1; // 指定文件写出间隔,这里 间隔0.1s保存一次文件
purgeWrite 0; // 指定保存的文件数量,取0表示此参数不激活
writeFormat ascii; // 指定文件写出格式,ascii为文本文件
writePrecision 6; // 指定数据精度,这里保留6位有效数字
writeCompression off; // 是否压缩文件,off表示不压缩
timeFormat general; // 时间格式
timePrecision 6; // 时间保留6位有效数字
runTimeModifiable true; // 是否允许运行时修改
2、fvSchemes文件
fvSchemes文件用来定义控制方程离散格式。
文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default Euler;
}
gradSchemes
{
default Gauss linear;
grad(T) Gauss linear;
}
divSchemes
{
default none;
}
laplacianSchemes
{
default none;
laplacian(DT,T) Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default corrected;
}
这些不同的离散格式位于OpenFOAM路径$FOAM_SRC/finiteVolume/finiteVolume
下。如ddtSchemes
,在该目录下包含可以使用的算法,如下图所示。
待选项包括CoEuler、CrankNicolson、Euler、SLTS、backward、bounded、localEuler、steadyState
。若忘记了有哪些算法可用,可以随便设置,然后在计算过程中OpenFOAM会报错并给出所有待选项。
3、fvSolution文件
fvSolution文件用于指定线性方程求解算法。文件内容如下所示。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";xxxxxxxxxxxxxxxxxxxxxxxxx
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * //
solvers
{
T
{
solver PCG; //采用预条件共轭梯度求解器
preconditioner DIC; //简化的基于对角线的不完全Cholesky预处理器
tolerance 1e-06; //计算容差
relTol 0;
}
}
SIMPLE
{
nNonOrthogonalCorrectors 2; //非正交修正次数
}
线性方程求解算法的源代码位于$FOAM_SRC/OpenFOAM/matrices/lduMatrix
,其中包含了线性求解过程中的预条件器、光顺器以及求解器算法。如下图所示。
如solver中可以选择的算法存在与solvers文件夹中,如下图所示。比较常用的求解器除了PCG外,还包含GAMG、PBicg、PBiCGStab等。
关于这些算法的选用,对于新手来讲可以暂时不必关注。
采用laplacianFoam
进行求解。在终端运行以下命令:
laplacianFoam
计算完毕后,可以使用命令:
paraFoam
进行后处理。
鉴于本算例极为简单,其他过程略过。
laplacianFoam求解器是一个用于求解温度等标量扩散方程的求解器。需要准备的文件包括:
---------------------------------------------------------------------------------------------
版权声明:
原创文章,来源CFD之道,本文已经授权,欢迎分享,如需转载请联系作者。