以下文章来源于陆姐说 ,作者陆宏志
仿真中最难的是什么?不是算出个结果,也不是算出个很复杂的结果,而是知道自己算的对不对,知道自己算出的结果误差有多大。
我们的教科书和老师,一直在教我们“正确”的仿真方法,但是没有告诉我们,“正确”的仿真方法误差有多大?
如果你不会使用仿真软件,有师哥师姐指点你,如果你不会处理复杂算例,有仿真高手帮你,但是,有谁可以告诉你误差有多大?
不知道误差多大,你不敢拍着胸脯保证仿真结果可靠,你不敢按照仿真结果定方案。那么,仿真的结果又有多大用处?
让你的仿真有价值,就要知道误差范围。
如果你去问高人,高人虽然不知道误差是多少,告诉你仿真误差范围是个不得了的难题,给你写个长长的任务列表:
网格无关性分析、模型依赖性分析、边界影响分析……;标准算例对比分析、试验与仿真对比分析、不同软件对比分析……。
等你做完这些分析,误差范围不一定能找到,做仿真的时间肯定用完了。
我推荐你用一些简单方法估计误差范围,在仿真的过程中“顺手”找误差范围。你没有必要为了找误差范围,专门算很多仿真算例,你只需要做个有心人,把你的仿真过程认真看一看。
零点偏差 — 基本误差
很多算例会有零点,理论上应该是0,但是仿真会算出个小小的数值,这个数值就体现了你的仿真误差大小。
例如:一个水平的流动,理论上垂直方向的作用力应该是0,但是你的计算结果,在垂直方向有1牛顿的作用力,1牛顿是力的基本误差。代表着这个仿真的误差很难小于1牛顿。这个软件和这套算法和这套网格的最小误差大约是1牛顿的量级。
知道基本误差,你就知道了这套仿真的局限性。如果你用这套仿真做优化设计,减小了1牛顿的力,这个优化结果很可能只是个误差,不值一提。
标准点偏差 — 系统误差
算例中除了零点还有标准点,标准点上的值与理论值的偏差,就是仿真的系统误差。
例如:物体正对来流的点,这个点的压力的理论值,就是来流的滞止压力。你把这个点的压力写出来,发现比滞止压力小了5%。可以猜出来这套仿真的受力偏小5%。
例如:物体做自由落体运动的时刻,加速度应该是重力加速度。你把计算结果写出来,发现加速度比重力加速度大了10%。可以猜测其他时刻的加速度也偏大10%。
这种差别往往不是随机变化,总是偏小或者偏大,代表了这套仿真的系统误差的范围。
记住这个误差的范围,你就知道了你的仿真结果大概率地是偏小或者偏大了多少。
收敛过程偏差 — 波动误差
仿真有个漫长的计算过程,在这个过程中,数据如同股市的曲线,混乱地上上下下波动。看到这些波动范围越来越小,我们说,仿真收敛了,这个时候的波动范围就是仿真的波动误差。
例如:仿真收敛前100步,速度在99~101的范围波动,速度的波动误差范围就是2%。
记住这个波动误差范围,你写报告的时候,可以明确地说,由于时间有限,仿真的计算收敛不够充分,可能带来的误差不超过2%。
模型差异 — 模型误差
常用的方法是对比不同模型的计算结果,相差多少就是误差范围。
这个方法不靠谱,即使你保持网格不变、边界不变,只换个模型,带来的变化也不一定是模型误差。也许模型的差异被网格磨灭了,或者模型放大了边界的影响而产生差异。这个方法看起来很合理,往往获得很不合理的误差范围。
有一个简单办法,查找文献。你不可能从文献中找到一个准确的模型,但是你可以对比这些“不太准确”的模型。
这些“不太准确”之间的差异,就是模型误差的范围。
网格形式差异 — 网格误差
没有必要把网格加密后看结果有没有变化,这种网格无关性分析方法很可能没有抓住网格的相关性。
你在做仿真过程中会做不同形式的网格,即使网格总数没有变化,网格形式变化带来的误差更真实。
例如:一百万的非结构网格对比一百万的结构化网格,一百万头部密集网格对比一百万尾部密集网格,它们之间的差异就是网格误差范围。有无之间的差异 — 最大误差
以上这些方法可能只发现了比较小的误差范围,万一出现特别大的误差怎么办?如何快速找到最大误差范围?
用有、无之间的差异找到最大误差:
湍流模型的最大误差 < 湍流与层流之间的差异
壁面网格的最大误差 < 壁面无粘与有粘之间的差异
边界的最大误差 < 无穷远与附近边界之间的差异
知道最大的误差能大到什么程度,你就可以对仿真结果放心了。
随机对比 — 正常误差
其实,估计误差范围很简单。同一个仿真,你在调试计算过程中,改来改去,发现某些数总在一个范围变化,这个变化范围差不多就是误差范围。
但是,很多初入行的人在这个过程中被吓死了。在调试仿真的过程中发现,改一个设置、改一点网格,结果数据就会成倍地增加、成倍地减小。仿真结果和试验不一致,和别人的仿真也不一致,误差大得不可思议。
出现这种情况和基本误差、系统误差、波动误差、模型误差、网格误差,和所有的误差都没有关系,就是出错了,而且是出了很低级的错误。
只有当你的计算结果比较固定,而且与试验、与别人的结果大致一样,你才有资格讨论误差,否则你只能讨论错误。
误差:当你消除了低级错误,与各种来源的数据都接近,这点似是而非的差异,就是误差范围。
防止出现低级错误,就可以保证你的仿真结果基本可用。
没有必要专门分析仿真误差,留意仿真过程中随机产生的各种差异,就是真实的误差范围。
误差不会破坏你的设计,错误才会。