Spring-ICE 結冰算法述評-(2)水滴軌跡計算

Spring-ICE系列前述兩篇文章:

1、飛機結冰的那些事

2、Spring-ICE 結冰算法述評-(1)水滴軌跡計算

今天要聊的內容,既常規又不常規。

說其常規,是因爲水滴軌跡的計算是所有結冰計算的基礎算法,不可或缺,是必備技能。說其非常規是因爲,儘管目前文獻對這個計算過程描述的已經足夠詳細,但是還有很多的技術細節,非實際操作而不可揣摩,正是這些具體的技術細節決定着計算的準確性、效率,甚至是整個結冰算法的設計邏輯。

我這段時間感悟,任何工程的東西,越涉及到基礎的和實踐的,自己必須要親自去試一試,做一做,且不能是簡單的感受下,而要做出效果,做出感悟。要一竿子插到底,摸到邊。

如果我做復材,我就要親自去做一做材料成型,研究試件加工,然後試驗測試,最後是結果處理。反覆的想,整個過程和我仿真或者理論,哪些是對應的,哪些是不同的,這些不同會有什麼影響,有些試驗現象的機理是什麼,能不能從理論層面找到依據。

如果我們現在的身份不是一個學生,不是面向自己的課題。而是一個工程師面對一個項目,整個項目不是一個人能夠完成的,那麼作爲組織者,是不是給別人分個工,等着大家的結果就完事了?我想不是,即便沒有精力面面俱到,那麼至少應該精通某一方面,然後瞄準項目的目標,搞清楚大家的工作和目標的聯繫,然後對重點問題深入研究,要搞懂要把控。總而言之,必須實踐,必須講求細節。

1 水滴軌跡計算到底要幹啥?

從結冰計算整個層面來說,所謂結冰就是水滴撞在機翼表面然後凍結的現象。水滴軌跡的計算,就是要搞清楚水滴會撞擊到機翼表面的哪些區域,每個區域水滴撞擊的量(即水滴收集量)是多少,爲下一步的結冰物理計算提供輸入。

從算法的層面,水滴軌跡計算需要做以下工作:

(1)控制方程建立。說白了,水滴在流場中的運動,滿足什麼方程。

(2)求解方程,計算軌跡。水滴在流場中運動,肯定要有流場的計算,然後是水滴運動方程的計算。

(3)水滴運動狀態的判斷。這個意思是說,要判斷水滴在運動中是否已經撞擊到了翼面,是否已經衝出了我們預設的計算邊界,如果是,這個時候需要結束計算,然後存儲這個結果,爲水滴收集量的計算作輸入。

2 水滴軌跡計算控制方程

首先是水滴運動控制方程,這個文獻裏都有,通常的拉格朗日法基本是下面這種形式:

這個方程,是考慮了水滴的浮力、重力、阻力、升力,從而根據牛頓第二定律建立的。說白了,就是高中的“受力分析”,然後列方程。

說着簡單,要求解出來卻要費點勁。好在文獻裏都說了,這個方程進一步化簡爲一階常微分方程組,根據初值,採用龍格庫塔法進行時間推進求解。這裏涉及的是本科數值計算的內容。

 

轉眼間,我們就用到了牛頓第二定律和數值計算方法。別急,還有重頭戲。上面的方程中,需要用到流場速度。流場計算用什麼算法?

流場算法的選擇直接影響到需不需要做網格,結冰後網格需不需要寫更新算法,這是結冰算法大框架的問題,十分重要。我就在這個問題上徘徊很久。最早我是準備寫NS方程求解,爲此我還摸索一套自己想的網格自動生成和更新方法。最後卡在NS方程上。

回過頭看,當時NS方程應該是寫出來了,但是網格域的問題,還有別的基本認知問題導致我認爲自己走不下去了。被迫放棄了NS方程,在師兄的指導下,選擇了面元法。

從現在看,面元法的選擇無疑是對的,首先它足夠簡單,計算效率高。早期的空氣動力學還管它加鱗片布源法,就是根據空氣動力裏“源”和“匯”的概念,在翼面上佈置“源”,每個源對其他位置的流場都有一個影響,通過疊加這些影響再綜合其在翼面上法向速度爲0這樣的邊界條件,運用線性代數方法,求解這組方程,得到每個源的強度。然後再將每個源對流場中特定點影響求出來,疊加就是這個點的流場速度。

最簡單的面元法,不考慮渦,兩組線性代數方程,簡單易上手。

除了簡單,通過我上面的描述可知,面元法不需要劃分流場網格,那麼冰形長出來後,只需要把邊界往外推進即可,不用重構網格,無疑解決了冰形更新帶來的很多問題。

有人立馬就要問了,那你這麼算出來的結果準不準?

要回答這個問題,首先我們要搞清楚水滴的計算是兩相流的問題,水滴自身的慣性使得它不會完全按照流線運動,也就是說,水滴的運動對流場是敏感的,但是不是我們想象中那麼敏感,這就給我們的流場計算留出了裕度。另外一個方面,冰形的冰角位置和水滴收集量大的地方不是絕對的對應,因爲水滴在翼面上會流動,這個流動對冰角位置的影響是很大的,而這個流動由結冰熱力學方程確定的。也就說,即便前面流場的計算存在一定的誤差,導致水滴的運動出現一定的偏差,但是最後的結冰熱力學計算,可以把冰角的位置修正過來。

這個對我很有啓發,作爲一個涉及多個學科的平臺開發,在能不能算的準的問題上,一定要首先考慮好,最後的結果有沒有兜底的修正項,找到這個兜底的,前面遇到一些影響效率的東西或者很複雜的東西,可以適當捨棄。

3 水滴狀態的判斷

水滴狀態無外乎三種:

(1)處於運動區;

(2)衝出設定區域;

(3)撞到翼面。

 

前兩種狀態容易判斷,關鍵是如何判斷水滴撞到的翼面。這個說起來也很容易,用到的是初中的代數知識。只要連接水滴當前位置和上一個時間的位置,和翼面各段逐個求交,有交點的就是撞到了。如果撞到了,還要給出來撞到的位置。

 

4 算法設計

程序的設計結構如下:

(1)初始條件定義。水滴的初始位置,不能太遠,不能太近。遠了,計算效率低;近了,算的不準。具體多少,看你經驗了,多試幾次看看。

(2)當前水滴位置的流場速度計算;

(3)求解水滴運動方程,得到水滴在當前時間間隔內運動的距離,然後更新水滴位置;

(4)判斷水滴狀態,如果衝出防線,或者撞到翼面,停止計算;

(5)如果處於運動狀態,重複步驟(2)-(4)。

需要注意的是,時間推進求解水滴軌跡,理論上時間間隔越小,肯定越準,但是呢這就意味着算的慢。太粗了也不行,後面水滴接近翼面後,時間間隔大,算的不準。我們折中下,定義一個範圍,當水滴接近前緣一定範圍內,加密計算,其他的區域就適當粗一點。下面的圖很明顯的反映了這一設置特點:

 

 5 小結

上面的方法是Spring-ICE水滴軌跡計算算法思想。有時候看文獻的時候常常想,前輩們真聰明,這些控制方程明明白白,還想到求解方法。其實仔細瞭解下,早期的計算模型往往也很簡單,我們常人去做大部分也能想到。隨着時間的推移,無數學者的努力,這些模型被不斷完善,不斷變的複雜高深。

我們還是要從這些繁複的理論裏面,探尋些樸素且基礎的設計思想,必要時候還要融入自己的理解,起碼做到這個算法的靈活運用。

 最後  歡迎大家關注我們的微信公衆號。

微信公衆號:320科技工作室。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章