簡單說來。一個好的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瀏覽量
18383 -
cfd軟件
+關注
關注
0文章
3瀏覽量
5507
發布評論請先 登錄
相關推薦
評論