数值风云

请问在学习仿真时,怎么知道自己仿真结果对不对呢?

一种是使用软件进行仿真,但是对于问题了解有限,无法判断仿真出的结果是否正确。特别是对于复杂的细节场景,请问各位大佬这时候怎么办呢?
还有一种是自己写数值算法的代码,此时可能连代码都没写对,导致误差很大,但是自己经验有限,找不出问题,找出来也不会改,这时候又怎么办?

  • 使用软件对复杂工况进行模拟的话,可以使用多种软件相互验证,例如OpenFOAM、STARCCM、FLUENT、COMSOL等
  • 此外还可以先就简单问题进行模拟,查阅文献看看有没有类似的数值或者试验数据,然后对比是否收敛,然后在此基础之上进行模拟仿真,此时仍然可以使用第一条
  • 对于问题的认识,可以分析数值格式、边界条件等
  • 如果自己编程,从基础的来吧,有解析解的PDE对比、简单实验、复杂试验再到自己想要模拟的工况
  • 对于自己写程序进行模拟的话,查内容无非就几点,模型方程、边界条件、数值格式、线性求解器:
    – 1) 一般来说如果类似的问题有人研究过,那么那套控制方程基本是可以拿过来就用的,只需要按照自己的问题分析一下并做适当修改,合适的话问题就不是很大;
    – 2) 边界条件决定了模拟的流动是否能够持续进行下去,当然这个和数值格式也很相关;
    – 3) 数值格式基本按照流动状态以及求解准确程度进行选择,比如强对流的算例,采用迎风格式问题就不会很大,当然这只是一个例子,具体问题还要具体分析;
    – 4) 最后就是线性求解器了,这个一般来说不会成为决定因素,因为只要一个问题理论上可解,选择一个鲁棒性好的线性方程组求解器总能得到一个收敛的结果,这部分可以调用开源函数库进行,如果自己数值计算功底不是很扎实的话,建议调用函数库,至于不收敛的原因,多数原因还是要和数值格式有关系,是否能够组成一个性态良好的矩阵,建议还是多分析数值格式和边界条件。

一家之言,仅供参考,有啥不妥的地方,欢迎大佬补充(^▽^)

很受启发,谢谢大佬