自己写一个CFD软件很容易吗?

电子说

1.3w人已加入

描述

简单说来。一个好的CFD软件,或者说一个能往外推的CFD软件,应该经过千锤百炼!

这种千锤百炼,对软件的编写、算法的植入的要求,是非常高的。

给你们举个例子,看看OpenFOAM这面怎么搞的。

最近在看化学反应。因为化学反应里面的雅克比矩阵一般是密集矩阵。因此求解一般都是直接算。就涉及到了LU分解啥的东西。

然后就看到一个有意思的东西。OpenFOAM-4.0曾经对LU直接求解做了代码上的改动。改动很少。带来了15%的性能提升。

**对于服务器来说,这15%的提成,可能是一代CPU的差异。**比如老的CPU可能是100秒。新的CPU跑85秒。

OpenFOAM-4之前的代码中的矩阵是定义了一个指向指针的指针。在4.0版本之后,只定义了一层指针。出发点是:

The row-start pointer array provided performance benefits on old computers but now that computation is often cache-miss limited the benefit of avoiding a integer multiply is more than offset by the addition memory access into a separately allocated array. With the new addressing scheme LUsolve is 15% faster.

在老版本的代码中,矩阵元素的访问不需要计算。OpenFOAM认为这对于比较老的计算机是有效的。

CFD

但是都2023年了,现在的服务器cache miss的现象很常见。之前在定义比较复杂的指针的时候,可以避免计算来寻址,但是这种避免计算寻址带来的好处,被内存访问抵消掉了。

因此OpenFOAM-4之后,把这种指向指针的指针给取消了。不这么搞了。要寻址,就相乘。

简直是人才。这OpenFOAM简直就是一个大的知识库。 知识太多了。

再看下面这个。之前OpenFOAM里面有一个操作,就是fvc & 这一行。后来全部改成了flux()函数。

那为啥这么改呢?

CFD

OpenFOAM说通过dotInterpolate()函数可以减少内存占用。

CFD

在这里我不会做详细的介绍了。不做OpenFOAM的老铁们早就懵掉了。

总之,就是简单举例。类似的编程/算法处理。OpenFOAM这30多年一直在更新。

是的,就是为了提高速度、增加稳定性,OpenFOAM搞了30多年。

我们说要做一个CFD软件。不是做个教育版本。而是要写出来一个:工业界能用的CFD软件

当然了。我看到过很多教育版本的CFD软件。人家直接就说了。我们这个CFD软件主要就是教育意义。

教育版本与工程应用那个区别是非常大的。教育版本的CFD软件应该是硕士生课程的大作业。

你们觉得,写出来一个可以用在工业界的CFD软件,容易么?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分