简单说来。一个好的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认为这对于比较老的计算机是有效的。
但是都2023年了,现在的服务器cache miss的现象很常见。之前在定义比较复杂的指针的时候,可以避免计算来寻址,但是这种避免计算寻址带来的好处,被内存访问抵消掉了。
因此OpenFOAM-4之后,把这种指向指针的指针给取消了。不这么搞了。要寻址,就相乘。
简直是人才。这OpenFOAM简直就是一个大的知识库。 知识太多了。
再看下面这个。之前OpenFOAM里面有一个操作,就是fvc & 这一行。后来全部改成了flux()函数。
那为啥这么改呢?
OpenFOAM说通过dotInterpolate()函数可以减少内存占用。
在这里我不会做详细的介绍了。不做OpenFOAM的老铁们早就懵掉了。
总之,就是简单举例。类似的编程/算法处理。OpenFOAM这30多年一直在更新。
是的,就是为了提高速度、增加稳定性,OpenFOAM搞了30多年。
我们说要做一个CFD软件。不是做个教育版本。而是要写出来一个:工业界能用的CFD软件
当然了。我看到过很多教育版本的CFD软件。人家直接就说了。我们这个CFD软件主要就是教育意义。
教育版本与工程应用那个区别是非常大的。教育版本的CFD软件应该是硕士生课程的大作业。
你们觉得,写出来一个可以用在工业界的CFD软件,容易么?
-
CFD
+关注
关注
1文章
109浏览量
18377 -
cfd软件
+关注
关注
0文章
3浏览量
5506
发布评论请先 登录
相关推荐
评论