簡(jiǎn)單說來。一個(gè)好的CFD軟件,或者說一個(gè)能往外推的CFD軟件,應(yīng)該經(jīng)過千錘百煉!
這種千錘百煉,對(duì)軟件的編寫、算法的植入的要求,是非常高的。
給你們舉個(gè)例子,看看OpenFOAM這面怎么搞的。
最近在看化學(xué)反應(yīng)。因?yàn)榛瘜W(xué)反應(yīng)里面的雅克比矩陣一般是密集矩陣。因此求解一般都是直接算。就涉及到了LU分解啥的東西。
然后就看到一個(gè)有意思的東西。OpenFOAM-4.0曾經(jīng)對(duì)LU直接求解做了代碼上的改動(dòng)。改動(dòng)很少。帶來了15%的性能提升。
**對(duì)于服務(wù)器來說,這15%的提成,可能是一代CPU的差異。**比如老的CPU可能是100秒。新的CPU跑85秒。
OpenFOAM-4之前的代碼中的矩陣是定義了一個(gè)指向指針的指針。在4.0版本之后,只定義了一層指針。出發(fā)點(diǎn)是:
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.
在老版本的代碼中,矩陣元素的訪問不需要計(jì)算。OpenFOAM認(rèn)為這對(duì)于比較老的計(jì)算機(jī)是有效的。
但是都2023年了,現(xiàn)在的服務(wù)器cache miss的現(xiàn)象很常見。之前在定義比較復(fù)雜的指針的時(shí)候,可以避免計(jì)算來尋址,但是這種避免計(jì)算尋址帶來的好處,被內(nèi)存訪問抵消掉了。
因此OpenFOAM-4之后,把這種指向指針的指針給取消了。不這么搞了。要尋址,就相乘。
簡(jiǎn)直是人才。這OpenFOAM簡(jiǎn)直就是一個(gè)大的知識(shí)庫(kù)。 知識(shí)太多了。
再看下面這個(gè)。之前OpenFOAM里面有一個(gè)操作,就是fvc & 這一行。后來全部改成了flux()函數(shù)。
那為啥這么改呢?
OpenFOAM說通過dotInterpolate()函數(shù)可以減少內(nèi)存占用。
在這里我不會(huì)做詳細(xì)的介紹了。不做OpenFOAM的老鐵們?cè)缇豌碌袅恕?/p>
總之,就是簡(jiǎn)單舉例。類似的編程/算法處理。OpenFOAM這30多年一直在更新。
是的,就是為了提高速度、增加穩(wěn)定性,OpenFOAM搞了30多年。
我們說要做一個(gè)CFD軟件。不是做個(gè)教育版本。而是要寫出來一個(gè):工業(yè)界能用的CFD軟件
當(dāng)然了。我看到過很多教育版本的CFD軟件。人家直接就說了。我們這個(gè)CFD軟件主要就是教育意義。
教育版本與工程應(yīng)用那個(gè)區(qū)別是非常大的。教育版本的CFD軟件應(yīng)該是碩士生課程的大作業(yè)。
你們覺得,寫出來一個(gè)可以用在工業(yè)界的CFD軟件,容易么?
-
CFD
+關(guān)注
關(guān)注
1文章
117瀏覽量
18424 -
cfd軟件
+關(guān)注
關(guān)注
0文章
3瀏覽量
5524
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論