找回密码
 注册
查看: 2539|回复: 3

自编Anderson CFD 入门第7章C程序,以及迭代残差问题

  [复制链接]
发表于 2014-9-25 00:17:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在重新学习计算流体力学,之前一直用fluent,不过一直处于不知其所以然的状态。本科和研究生的时候自己也从来没有将自己的研究方向跟数值计算联系起来,所以有关数值计算的课程也都没有好好上,大作业也都是直接抄别人的,白白的浪费了大好的青春时光啊。
学习的第一步就是将当年睡过去的CFD课程给补回来啊,按照John Anderson的那本教材一步步地进行。花了两天时间终于把第一个程序也就是教材第7章第一个算例调试成功:亚声速-超声速等熵流动的CFD解-MacCormack方法。 程序的初始值,第一步还有最后的结果都跟教材中给出来的结果一样(教材中是3位小数,我输出的是4位小数),还有courant数的影响也都跟书中给出来的结果一样。
但有一个问题一直没有解决:教材中给出喉道处速度V和密度ρ的残差值随时间步数基本上是直线下降到10-6以下后进入平台区了,而我的计算过程中残差是大幅震荡下降的(Y坐标为对数坐标),到最后稳定到了10-8。 我想知道大家在做这个计算的时候有没有遇到这个问题?这样的残差曲线是正常的吗? 怎么才能得到教材中的残差曲线呢?
C:\Users\THINK\Desktop\残差震荡.png
C:\Users\THINK\Desktop\教材残差示例.png

在教材中,作者给出了一个开放性的问题:计算结果跟网格的关系,需要多少网格才能使计算的数值解跟精确解完全吻合。在我之前的意识中,当然是网格越精细,计算结果越精确,特别是对这个非常简单的一维流动。但当运行我的程序进行验证的时候却发现并不完全像我之前想象的那样:
首先同样运行2000个时间步(教材中的工况用了1400个时间步),修改不同的离散点个数,
离散点数        迭代次数        无量纲密度ρ        无量纲温度T        马赫数Ma
31        2000        0.63861        0.83642        0.99937
61        2000        0.63741        0.83531        0.99983
121        2000        0.63892        0.83600        0.99921
401        2000        0.65132        0.82693        0.89755
1001        2000        0.86904        0.88600        1.16510

结果发现当离散点增加时,在同样的迭代次数下,其计算结果精确度大幅下降。我们可以比较一下在不同离散点下速度的残差随迭代次数的变化,分别选取31,61,121,401 和1001个离散点:
C:\Users\THINK\Desktop\残差比较.png

由上图可以看出,随着离散点数的增加,其计算的速度的残差的下降趋势是一样的,但其下降的速度随着离散点数的增加而降低。接下来可以实验针对不同的离散点数,需要多少次的迭代才能使残差降到10-8以下。
离散点数        完全收敛所需迭代次数
(10-8)        无量纲密度
ρ        无量纲温度
T        马赫数
Ma
31        1500        0.63861        0.83642        0.99937
61        3000        0.63741        0.83531        0.99983
121        6000        0.63709        0.83502        0.99996
401        22000        0.63699        0.83494        1.00000
1001        52000        0.63698        0.83493        1.00000
精确解                0.634        0.833        1.000

由上表可以看出,达到完全收敛所需要的迭代次数跟离散的点数成正比,大约是离散点数的50倍。 但是随着离散点数的增加,其最后的解除了马赫数之外其他的值并不能完全达到精确解。
但是到目前为止我还不能确定我所看到的东西是否正确,因为我不确定我的程序中是否有bug。
如果我的程序是正确的话,可以得出以下几个跟我之前的认知不太一样的结论:
1.        网格越细,计算时的收敛过程越困难;而我之前认为网格越细,收敛的越快,或者至少不会使收敛变慢。
2.        网格增加后所需要的计算资源增加,不仅仅是因为每一个时间步所需要计算工作量增加,还因为需要更多的迭代步数以达到收敛条件。

以上只是个人 看法,欢迎大家一起交流讨论

Anderson Chapter 7.rar

459.97 KB, 下载次数: 182

源文件和说明文档

评分

1

查看全部评分

发表于 2014-10-24 10:53:32 | 显示全部楼层
我也一直在看安德森的《计算流体力学》,想要自己写写,但是对这个特征线的问题一直不太理解,所以程序就写不下去,难道学计算流体力学还要先学流体动力学吗?
发表于 2014-10-24 11:04:53 | 显示全部楼层
再追问一下楼主哈,楼主的附件里面的残差图是用什么软件做出来的?
发表于 2014-10-24 16:18:56 | 显示全部楼层
赞一个.支持原创.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表