吾生有涯 学海无涯
析模有界 知识无界

OpenFOAM|改造求解器

本文简单描述在OpenFOAM中创建新的求解器的基本过程。

注:以下操作在CFDSupport OpenFOAM for windows 19.10版本中测试。本文内容参阅CFDSupport网站中关于OpenFOAM的用户文档。

本文改造求解器icoFoam,使其具备求解温度场的能力。

1 物理模型

考虑不可压缩粘性流动模型,添加温度场后,其控制方程为:

OpenFOAM提供的icoFOAM求解器只能考虑前两个方程,无法考虑第3个方程,因此需要在其基础上添加第3个方程进去。

2 方程的植入

2.1 文件准备

我们在已有求解器的基础上植入新的方程,因此可以先拷贝求解器icoFOAM的源文件。

利用以下命令新建一些文件夹。

cd $WM_PROJECT_USER_DIRmkdir applicationscd applicationsmkdir solverscd solvers

拷贝源文件到文件夹solvers中,并修改其名称为icoTempFoam。

cp -r $FOAM_APP/solvers/incompressible/icoFoam .mv icoFoam icoTempFoamcd icoTempFoam

此时文件结构如下图所示。

利用sed命令将文件icoFoam.C及Make文件夹中的files文件中的所有icoFoam替换成icoTempFoam。这里自己用手工替换也是可以的。

sed -i 's/icoFoam/icoTempFoam/g' Make/filessed -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;
}
  • 文件修改完毕后,即可运行求解器进行计算并后处理
blockMeshicoTempFoamparaFoam
  • 温度分布

  • 速度分布

END


本文仅简单介绍求解器改造的基本流程,更深的内容以后有时间再扯~

本篇文章来源于微信公众号: CFD之道

赞(2) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《OpenFOAM|改造求解器》
文章链接:https://www.topcfd.cn/12670/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册