有限体积法matlab_笔记|有限体积法(三)习题2/3及代码|CFD Ferziger

做了剩下有限体积法(Ferziger, Ch.4[1])另外两个Example(测试数值扩散的那一算例,书里似乎并没有给出CDS矩阵奇异下的求解方法,我直接按MATLAB里AB求解,结果并不完全一致):

  1. Scalar Transport in a Known Velocity Field
  2. Testing the Numerical Diffusion

果然FVM比FDM麻烦不少,一开始还是按面向过程写,中途感到不对劲于是写成类了。写到一半去搜了下Openfoam[2]发现自己写的类定义(思路)和它居然差不太多,挺巧。

*网页端文章还可以把背景图片搞成这种花里胡哨的可还行

问题

Example 2 Scalar Transport in a Known Velocity Field

考虑标量输运方程

equation?tex=%5Cint_S%5Crho%5Cphi%5Cbm%7Bv%7D%5Ccdot%5Cbm%7Bn%7D+%5C+dS%3D%5Cint_S%5CGamma%5Cbm%7B%5Cnabla%7D%5Cphi%5Ccdot%5Cbm%7Bn%7D%5C+dS

算一个给定速度场(驻点附近的无粘流动,

equation?tex=u_x%3Dx%2Cu_y%3D-y ,流线如图)、边界条件等参数下,标量场
equation?tex=%5Cphi 的分布情况。

边界条件具体为:

  • 左侧(wall)和上侧(inlet)为第一类边界,左侧
    equation?tex=%5Cphi 为从0到1线性分布(如图),上侧
    equation?tex=%5Cphi%3D0
  • 右侧(outlet)和下侧(symmetric boundary)为第二类边界,
    equation?tex=%5Cphi_n%3D0

要求扩散项采用CDS,对流项分别采用CDS和UDS计算。

984f640a916dbb59b407d61cd8d488d8.png
几何与边界条件

Example 3 Testing the Numerical Diffusion

考虑具有阶梯剖面(间断)斜向均匀流中的对流问题(无扩散项)

4b67e042f84664c8d67bf3043de46941.png

面对这一问题,CDS构造出的系数矩阵A主对角元均为0,矩阵奇异难以求解。总之就是验证CDS会产生震荡以及UDS通过数值扩散避免了震荡的发生。(TVD格式消除震荡暂时没考虑)

基本思路

设计了三个类:

  • solver
  • grid
  • cell

solver类的目标在于针对设定的物理域、计算域、边界条件、各类参数及求解方法等,建立一个计算求解方案。它包含了grid类(网格),进一步的,grid类中每一个网格单元储存为cell对象。

我是按照自底向上,即cell->grid->solver的过程编写的,毕竟只是解一两道题,而非编写一套CFD程序,不需要太宏观的架构。

参数有两套存储形式,一是在solver类中同意存储所有网格单元上的各类信息,二是分别存储到对应的网格单元上。于是差分格式-积分近似这类计算在网格单元(cell类)中完成,而边界条件的处理及总体系数矩阵的组集则在solver类中计算。

此外,写边界条件设置时需要脑子清醒(比如CDS改成单边近似这种事)。

一些结果与讨论

先分别给出40*40网格下,扩散率

equation?tex=%5CGamma 分别取0.01和0.001时,CDS求解出的标量场等值线图(对照书上原图应该基本是一模一样的,一丝区别是书上还把边界值给画了进去,这里我就懒得整了)

24d7990417bf013ed932e2e74ed7562f.png
40*40 Gamma=0.01 CDS Isolines

8b4321ce465f0fa6fc45715c27d773e3.png
40*40 Gamma=0.001 CDS Isolines

顺便看看40*40网格下的系数(也是稀疏)矩阵A,长得也符合预期:

672fc9371691f2f63cf3c1fc709eb4e9.png
40*40 Gamma=0.01 CDS sparse matrix A

下面两张分别是320*320精细网格下的CDS和更直观的3d图示:

3a328fd228d5425394850a10b46d5df3.png

7cda006510e0f98c53a998b9cfbb0d40.png

在粗糙网格(10*10)下,CDS出现了震荡解,而UDS的不震荡特性也得到了验证:

3688e61e0b4c0dc5677774ab39d6e010.png
10*10 Gamma=0.001 CDS oscillation (看颜色深浅深浅深浅)

fc9bbddb3e5926ec0faebdc10e7037d5.png
10*10 Gamma=0.001 UDS no oscillation

然后是Example 2 左侧边界总通量(随网格量变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值