本文简单描述在OpenFOAM中创建新的求解器的基本过程。
注:以下操作在CFDSupport OpenFOAM for windows 19.10版本中测试。本文内容参阅CFDSupport网站中关于OpenFOAM的用户文档。
本文改造求解器icoFoam,使其具备求解温度场的能力。
1 物理模型
考虑不可压缩粘性流动模型,添加温度场后,其控制方程为:
OpenFOAM提供的icoFOAM求解器只能考虑前两个方程,无法考虑第3个方程,因此需要在其基础上添加第3个方程进去。
2 方程的植入
2.1 文件准备
我们在已有求解器的基础上植入新的方程,因此可以先拷贝求解器icoFOAM的源文件。
利用以下命令新建一些文件夹。
cd $WM_PROJECT_USER_DIR
mkdir applications
cd applications
mkdir solvers
cd solvers
拷贝源文件到文件夹solvers中,并修改其名称为icoTempFoam。
cp -r $FOAM_APP/solvers/incompressible/icoFoam .
mv icoFoam icoTempFoam
cd icoTempFoam
此时文件结构如下图所示。
利用sed命令将文件icoFoam.C及Make文件夹中的files文件中的所有icoFoam替换成icoTempFoam。这里自己用手工替换也是可以的。
sed -i 's/icoFoam/icoTempFoam/g' Make/files
sed -i 's/icoFoam/icoTempFoam/g' icoTempFoam.C
此时可以使用命令wmake编译求解器。
wmake
编译完毕后,在$FOAM_APPBIN路径下应该能看到求解器icoTempFoam了。可以利用命令ls $FOAM_APPBIN
进行查看,如下图所示。
这里虽然编译出了新的求解器,然而并未对代码进行任何修改,其实质上还是icoFoam,下面修改程序代码使其具备温度解算功能。
2.2 文件修改
1、修改createField.H文件
向该文件中添加热传导系数kappa以及温度变量T。利用文本编辑器打开此文件。
添加代码:
dimensionedScalar kappa
(
"kappa",
dimViscosity,
transportProperties.lookup("kappa")
);
如下图所示。
添加代码:
volScalarField T
(
IOobject
(
"T",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
如下图所示。
2、修改icoTempFoam.c
在该文件中添加温度T控制方程。添加代码:
fvScalarMatrix TEqn
(
fvm::ddt(T)+fvm::div(phi,T)-fvm::laplacian(kappa,T)
);
TEqn.solve();
利用命令重新编译求解器。
wmake
至此,求解器制作完成。
3 案例测试
改造之前的icoFoam算例。
cd $FOAM_RUN
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .
mv cavity cavityTemp
cd cavityTemp
-
利用命令创建T文件
cp 0/p 0/T
-
修改constant/transportProperties文件
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
nu [0 2 -1 0 0 0 0] 0.01;
kappa [0 2 -1 0 0 0 0] 0.001;
-
修改0/T文件
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object T;
}
dimensions [0 0 0 1 0 0 0];
internalField uniform 300;
boundaryField
{
movingWall
{
type fixedValue;
value uniform 350;
}
fixedWalls
{
type fixedValue;
value uniform 300;
}
frontAndBack
{
type empty;
}
}
-
修改system/fvScheme文件
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSchemes;
}
ddtSchemes
{
default Euler;
}
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss linear;
div(phi,T) Gauss upwind;
}
laplacianSchemes
{
default Gauss linear orthogonal;
laplacian(kappa,T) Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default orthogonal;
}
-
修改system/fvSolution文件
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSolution;
}
solvers
{
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0.05;
}
pFinal
{
$p;
relTol 0;
}
U
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-05;
relTol 0;
}
T
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-07;
relTol 0;
}
}
PISO
{
nCorrectors 2;
nNonOrthogonalCorrectors 0;
pRefCell 0;
pRefValue 0;
}
-
文件修改完毕后,即可运行求解器进行计算并后处理
blockMesh
icoTempFoam
paraFoam
-
温度分布
-
速度分布
END
本文仅简单介绍求解器改造的基本流程,更深的内容以后有时间再扯~
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册