这是学习openfoam的第二周。每天能学习的时间不多,第一周将时间都花在研究怎么安装ubuntu和openfoam上。期间反反复复装了好多个版本:Ubuntu先是从14到18,最后再试试16。而openfoam最后锚定再openfoam4上。为什么选这个版本呢?其实安装的时候,我主要都是参照网络上一些博客的教程来做的。最后是参考了某位前辈的教程,但是不知道为什么浏览记录里面找不到了…小伙伴们想要安装的话上网搜还是能搜到很多成功案例的。
做这个系列主要是计划在9月份入学之前,将openfoam这个软件用熟,同时能补补数学和流体等相关知识。现在主要的参考教程是安装openfoam4时自带的userGuide。虽然说是全英的,但是除了一些专业词汇之外,还是能看个大概的。因此,写博客的第二个原因是将主要的内容译成中文,供大家交流和参考,同时也能加深自己的理解吧!现在网上搜“openfoam 4 教程” 就能找到OpenFoam使用手册的中文版,以下是链接:
https://wenku.baidu.com/view/e069a5b50975f46526d3e153.html
除了一些排版的问题之外,机翻(应该是)也算是可读的。而我所做的,大概就是除了翻译部分比较重要的内容之外,自己对着教程敲一遍代码,同时加入自己的想法,排除错误,并作一些参数上的修改,然后对比结果。
什么是Lid-driven Cavity Flow?
中文名称可译作“顶盖驱动方腔流”。理想模型如下左图(UserGuide),一般试验装置如下右图(张金凤)。方腔流指顶部平板以恒定速度驱动规则区域内封闭的不可压流体(例如水)的流动,在方腔流的流动中可以观察到几乎所有可能发生在不可压流体中的流动现象。“从20世纪80年代以来,方腔流由于其广泛的工业应用和科研价值受到各个领域的关注”(张金凤)。
如上左图,顶上的盖子(wall)以1 m/s 的速度在x轴正方向上移动,而另外三个面是固定的。在这次的教程中,流体的属性被假定为层流(lamilar)。层流是比较简单且基础的,对初学者来说是个入门的学习对象。
敲代码!
整个过程可以分为三步:预处理(pre-processing),运行(run)和后处理(post-processing)。
1. 预处理(pre-processing)
首先第一步,将教程文件备份到$FOAM_RUN所在目录(我的是在home/OpenFOAM/foamer-4.1,可能每个人的都不一样,但是应该都在home目录里面吧)。在终端上输入下面的代码,最后来到复制好的cavity文件夹内。
cd $FOAM_RUN
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .
cd cavity
在终端上输入ls,看看有什么文件:
我们可以看到有3个文件夹,下面,教程将一一为我们讲解。预处理也分几步走,它们是:Mesh generation(生成网格),Boundary and initial conditions (边界和初始条件),Physical properties (物理属性),Control (控制开始时间之类的),Discretisation and linear-solver settings (太长了,后面再解释翻译吧)
1.1 Mesh generation (生成网格)
一般来说,openfoam都是处理生成3维网格的,但是通过一些设置,我们可以将其中一维设置成空的(empty),从而将3维问题降为2维。而空腔流主要是在2维平面上做的。我们先打开system里面的blockMeshDict文件,操作如下:
用sudo是因为Ubuntu16不能直接修改里面的文本。文本如下:
先看vertices下面的(0 0 0)等8个点,他们代表这个网格(mesh)的顶点。下方4个点的第三列都是"0.1",代表它们z方向占的很少,所以可以将整个空间当成一个二维平面来看待。而上方covertToMeters则是单位,即每个“1”是多少米。这里是0.1米。接着看下方:
blocks的功能是将上面定义的顶点连成一个空间的块(如Figure 2.2)。我们可以发现这个顺序是逆时针。后面(20 20 1)表示我们在x y z 三个方向上设置的点数(cell)。在这里,x y 上分别是20个,z上只有1个,这下真的成2维了哈哈!
继续看下面代码:
这里我们定义每个面的属性。第一个moving wall是(3 7 6 2),为什么是这个排列呢?这里我们讲到右手定则(如上右图)。右手拇指朝里,点的方向就是手指的旋转的方向。而其他面都是固定面,拇指方向朝外。至于为什么有这样的区别呢?还有那些type后面的wall,empty都代表什么意思呢?我想我需要再深入地学习才能正确地解答。希望有会的来教教我!
我们可以看看生成的网格是怎么样的。先生成网格,可以看到终端滚了很多信息,再生成一个空的foam文件,进去后ctrl+o保存即可。然后用paraview软件查看。代码如下:
blockMesh
nano foamer.foam
paraview foamer.foam &
敲出来的效果是这样的,然后就会弹出软件:
先点击左边的绿色按钮apply,然后在上面选surface with edges,就能看到生成的网格!下面可以数数看,是不是x,y轴都是20个呢?
鼠标左键拉一下网格,可以看到z方向上只有一个,对应(20 20 1)。
非常简单明了,就不改参数了,我们继续下一步!
2.2 Boundary and initial conditions (边界和初始条件)
在cavity的目录下,输入ls,看到有文件“0”。
进入文件夹0,看到有如下文件:
分别是压力,速度的边界初始值设定。我们看看p文件里面是怎样的:
先讲一下dimension。后面的[0 2 -2 0 0 0 0]代表国际单位制对应的多少次方。顺序是[质量kg 长度m 时间s 开尔文K 摩尔质量mol 电流A 光强(坎德拉)cd]。所以,上面的单位是m2s-2,即kinematic pressure(运动压力)。internalField设置成uniform可以理解为在场里的数据可以用一个值去描述。boundaryField下,fixedwalls跟movingwall都设置了zeroGradient,意思是常梯度对于压力来说是零。frontAndBack这里因为是2维的情况,所以设置成empty。
再看看U文件:
看dimension知变量的量纲是m/s,即速度。movingWall的值为(1 0 0),意思是只在x轴方向上有速度1m/s。fixedWalls定义成noSlip,即no-slip,无滑移的意思。无滑移的意思是与面接触的流体不会发生移动。
1.3 Physical properties (物理属性)
回到cavity目录,进去constant文件,可以看到有一个transportProperties的文件:
nano一下:
里面只有这一行。什么意思呢?我们讲讲原理。首先,这次的空腔流属于层流(laminar),等温(isothermal),不可压缩(incompressible)。对于这个例子,我们用到的icoFoam求解器中,唯一的设置就是运动粘度(kinematic viscosity),即nu。单位是m2/s,数值这里是0.01。怎么来的?看下面式子:
对于这次的例子,我们将雷诺数Re设置成10(非常低,层流),而d=0.01m是设置的特征长度(characteristic length),U=1m/s为速度,那个斜斜的v就是nu,运动粘度。将数据代到上式,得到nu=0.01。后面我们会修改一下雷诺数,再进行对比。
1.4 Conrtol
在system文件夹里,controlDict里面有关于整个时间控制的设置。nano进去看看:
一行行分别解释:1.开始时间定在t=0s;2.停在停止时间;3.停止时间是t=0.5s;4.时间间隔△ t=0.005,即有100个间隔;
打断一下,这个时间间隔是随便设置的吗?不是的。为了保证时间上的精度,还有运行icoFoam时的数值稳定性,这里定义一个Courant number Co:
δt就是时间间隔,U是速度,δx是速度方向的单个格子的长度(cell size)。在任意方向,我们都要保证这个Co<1。先计算δx:
令Co为1,即取最坏的情况。则δt可得:
继续:5. writeControl设置怎么输出这个结果,timeStep即时间每走一步输出一组;6. 这里是每20个δt为一步的意思,即0.1s输出一组数据,总的是0.1, 0.2, 0.3, 0.4和0.5 s时,数据会被输出。后面的教程没有解释,按默认即可。
1.5 Discretisation and linear-solver settings
顾名思义,这部分是离散化和线性化的设置。对应的文件是system里面的fvSchemes和fvSolution。教程并没有给过多解释。我们打开fvSolution:
nano fvSolution
看到PISO的子函数,在空腔流这个闭合的不可压缩的系统中,pRefCell和pRefValue都设置成0。在这里压力都是相对的。改变这两个值只会改变绝对压力场,而不改变相对压力和速度场。
2. Running an application
来到第二大步,运行程序。在cavity目录,输入:
icoFoam
然后一下子就算好了。
3. Post-processing
最后我们再看看输出的结果!
在cavity目录,输入ls看看:
是不是多了一些文件?就是1.4 Control里面我们要求输出的5组数据!
输入下面代码,查看查看数据:
paraFoam &
然后软件就弹出来:
点绿色的apply,再做如下设置:
再选U:
换一种表示方式:
方式是在上方的Filter-→common,选择Glyph。
小结:
这次踏踏实实的跟着教程走一遍,对openfoam有了初步的了解。这个tutorial后面还有很多教的,也还有很多设置没有调节,但先就此打住吧。这次的学习也让我意识到自己对流体的基础知识还不够了解,所以以后也要加强这方面的学习!
参考文献:
[1] OpenFOAMUserGuide version 4.0
[2] 张金凤, 常璐, 马平亚. 高雷诺数顶盖驱动方腔流实验[J]. 水科学进展, 2015, 26(2):250-256.
暂无评论内容