前天和同學聊天,我問他,我的Spring-ICE到底有沒有前途?
“沒,太小衆。”
不得不承認,這傢伙的回答扎心又客觀。
這個軟件的算法,我前後花了近兩年的時間,探索,調試。是我迄今爲止做過的最難也是最系統的軟件。
好巧不巧,剛讀研究生,接手的第一個項目也是算法開發。工作後,發起的第一個衝鋒,也是做程序。
不過我可絕非是個程序員,歸根結底,我們是做工程的,所謂的算法、軟件等等,目的都是爲了完成數值計算,以解決工程實際問題爲第一要務。
這個軟件從完成後,至今未曾給我帶來任何直接的收益,榮譽上的也好,金錢上的也罷。但是,通過這個過程,我對工程分析軟件的定位,對數值算法的理解等多個層面的認知提高了很多。從個人科技樹的角度,這個科技可能點歪了,但確實收穫良多。
我希望能從頭到尾,把這個算法的一些心得和思考整理出來,爲己鑑,爲後人鑑。
1 Spring-ICE結冰軟件簡介
之前在往期的文章裏,簡單介紹過。此處再提下。
這款軟件的功能是要完成翼型在特定飛行工況、氣象工況下的結冰冰型的預測。
(1) 要完成冰型的預測,就必須先計算流場,拿到速度分佈的數據。
(2) 其後,我們假定翼型前方有大量過懸浮小水滴,在流場的推動下,水滴往翼面上撞擊,從而確定出,翼型哪些地方被水撞到了,撞到了多少。
(3) 最後,根據熱平衡,計算這些水凍結多少,流到翼面其他地方多少。
(4) 水凍成冰以後,翼面的邊界上長出冰了,這時候,流場發生變化,再重複上述的步驟,繼續結冰。
這裏面主要的大塊,是流場計算、水滴撞擊的計算、熱平衡的分析。要想把這個過程成功的實施並銜接得當,還要完成諸如翼型幾何的處理、冰型的生長更新等多個零散的細節難點。
再進一步,你還希望別人拿過來就能很快用起來這個軟件,那麼就需要便捷的操作,越簡單越好。這就意味着,算法的魯棒性、強大的前後處理都要非常完備。
再再進一步,你還想要它算的足夠準,那就需要足夠的試驗數據來校準算法。
Spring-ICE基本上走完了上面的步驟。今天就先介紹下它的翼型前處理算法。
Spring-ICE LOGO
Spring-ICE 操作界面
2 翼型前處理—過密點的稀疏化處理
Spring-ICE首先加了對過密點的稀疏化處理模塊。之所以做這個處理,是爲了防止過密點影響計算效率。經過測試,100—150個點左右,足夠保證計算精度。Spring-ICE沒有對過少的點做加密處理,是因爲大部分的從業者,在做網格時,都有着網格不能太粗的常識。
稀疏化的處理方法如下:
(1) 定義一個參考長度,這個相當於是一個衡量是否過密的標尺,如果你希望整個翼型節點在150左右,那麼這個參考長度就可以定爲翼型總弧長的1/150。
(2) 從尾緣點開始,逐個進行如下步驟:
n 固定住當前點,向下搜索,逐個確定處於參考長度內的點。
n 消除參考長度內的點。
(3) 更新翼型點。進入下個循環
參考標尺示意
稀疏化後的結果
3 翼型前處理—前緣區域的加密
稀疏化處理後,可能會面臨前緣點佈置不夠精密的問題。爲此對前緣點進行適當加密。這個加密不是說在兩個點直接加一箇中點。我們知道,節點連在一起是折線,直接在折線上加點,意義不大。所以需要通過樣條曲線,完成加密。
思路如下:
(1) 搜索出前緣加密區的點,你可以定義前5%或者10%作爲加密區。Spring-ICE定義的是5%。
(2) 建立加密區樣條;
(3) 根據樣條函數,通過極座標方式完成新的點排布。
(4) 用新的加密點替換原來翼型的加密區。
加密後的結果
3 小結
上面的方法只是一個參考,如果你有更好的思路或者對這款軟件有興趣,歡迎通過微信公衆號聯繫我們。
微信公衆號:320科技工作室。