跳至內容

OpenVOGEL/引言

來自華夏公益教科書

OpenVOGEL[注 1] 是一個開源專案,其目標是提供免費訪問一個計算機程式,該程式可以進行氣動機械問題(空氣動力學+彈性+動力學)的數值研究。OpenVOGEL 可用於從頭開始建立、計算和分析飛機模型的多個方面。該軟體集成了網格生成器、基於一階面板的非定常流理論、基於有限元(模態分解)的結構動力學以及圖形使用者介面。

OpenVOGEL 依賴於一系列在兩個獨立使用者應用程式中實現的通用軟體包:Tucan(一個使用者友好的 GUI)和控制檯(一個命令列工具)。在整個華夏公益教科書中,您將找到有關這兩個程式的功能、工作原理以及如何在飛機設計中使用它們的資訊。

使用 OpenVOGEL Tucan 構建和模擬的飛機模型

OpenVOGEL 是開源的,這意味著每個人都可以訪問原始碼。原始碼在通用公共許可證 (GPLv3) 下發布。要幫助開發程式碼,請訪問 儲存庫.

新手的注意事項

[編輯 | 編輯原始碼]

如果你熱愛飛機,但你是氣動機械學世界的新手,請注意,該主題在很多方面都很難。如果你沒有紮實的數學基礎(代數和分析),你可能很難理解這一切。我不認為自己是數學專家,所以你也不必是專家,但像處理歐幾里得向量這樣的基本知識是不可或缺的。要了解飛機是如何飛行的,你還需要了解基本的流體力學知識,以及一般意義上的經典(牛頓)力學。

這個專案主要針對航空航天工程師和積極從事飛機設計的本科生。但是,這並不妨礙業餘愛好者或資質較低的人使用該程式作為指南來了解如何飛行或設計 RC 模型或無人機。我試圖讓該程式對廣大公眾開放。

關於本華夏公益教科書

[編輯 | 編輯原始碼]

本華夏公益教科書的目的是透過使用者的貢獻,使專案的文件儘可能豐富。本華夏公益教科書旨在涵蓋軟體背後的理論概念以及如何使用它、如何不使用它以及如何開發它。開原始碼很棒,但要充分利用它,程式碼必須清晰地指定和記錄。許多開源專案已經變得非常流行,但它們缺乏文件導致了很多困惑和錯誤的實現。為了避免這種情況,我們試圖在這裡提供儘可能多的資訊,以便使用者可以對全域性圖景和底層數學有一個很好的瞭解。

本書目前分為以下章節

程式的演變

[編輯 | 編輯原始碼]

有時瞭解一點歷史有助於理解為什麼有些事情是現在的樣子,所以我想在這裡簡要介紹一下 OpenVOGEL 的演變。

OpenVOGEL 出生於 2009 年底,是我大學最後幾年的一項小型研究專案。它最初是用 FORTRAN 開發的,實際上它只用於研究噴灑飛機在超低空飛行時噴灑的液滴的行為,這是一個只有在玉米和大豆田覆蓋著巨型面積的國家才會出現的好奇現象。

隨著程式的成熟,我開始使用 Visual Basic 6 為它開發一個人機介面 (HMI);對結果不滿意並且在工作中學習了 VB.NET 後,我決定使用 Visual Studio 和 .NET 以完全面向物件的風格重寫整個計算核心。選擇這個編譯器(實際上是虛擬機器)是因為它提供了對無數有用的標準庫的訪問,並且它足夠穩定和成熟,可以進行科學計算。其中一個優點是它節省了大量的開發時間,主要是因為記憶體是由一個稱為垃圾收集器的機制管理的,而這種機制在 C、Ada 或 Fortran 等語言中不存在。這使開發人員能夠專注於軟體的功能,而不是讓計算機如何完成這項工作。這並不總是必要的,對於一些應用程式(如即時應用程式)來說,它甚至可能是不可取的。然而,在原型科學專案時,這無疑是一個優勢。當然,這會以犧牲一些效能為代價,但對於這個專案來說,平衡明顯有利於更輕鬆的編碼。在 .NET 中,存在許多相容的語言,其中 Visual Basic (VB) 和 C# 是最常見的兩種。我選擇 VB 而不是 C# 僅僅是因為它更容易閱讀和學習。但是,許多庫是在 C# 中找到的,並且已經無縫地連結到專案中。

在編碼方面,OpenVOGEL 在 .NET 中的演變自然與 Visual Studio Community Edition 的演變相關聯。自 2010 年以來,微軟一直在釋出免費版本的 Visual Studio,該版本發展迅速,有利於開源社群。它從 Express 版本開始,發展成為一系列 Community 版本,這些版本比以前的版本功能豐富得多,但具有額外的許可限制。2014 年,微軟將 .NET 推為一個標準規範,從那時起,它已在名為 Mono 的並行開源專案中實施。該專案還包括一個名為 Mono Develop 的開源編輯器,它最終將用於開發 OpenVOGEL 計算核心並使其跨平臺。

現在讓我們更詳細地討論一下該程式的 .NET 版本。程式不是一天就能完成的。通常,生命週期如下。程式從一個簡單的開始,演變成一個複雜的,然後到達一個點,變得如此複雜,以至於它必須從頭開始重構。只有當你從一開始就準確地知道程式應該具備哪些功能,你才能建立一個強大而靈活的核心。OpenVOGEL 的情況也是如此。當前版本是重寫部分以使其更通用後的結果。程式的第一個版本只包含細長的升力面,並且只能處理 Neumann 邊界條件(透過在邊界處明確固定零法向速度)。在驗證結果後,氣動彈性演算法隨之而來。Dirichlet 邊界條件(零內部速度勢)的開發需要更多時間,並且是最近實施的功能之一。至少前四年的開發是在私下進行的,因為該程式還不夠成熟,無法滿足世界的要求。該程式首次在 2015 年成為開源時亮相,目的是進行科學研究而不是營銷,因為我感覺到這個領域缺乏一個免費友好的程式。雖然專有軟體市場非常豐富,但基於面板方法的最新開源軟體卻很少。實際上,大多數書籍仍然展示了 20 世紀 70 年代流行的 FORTRAN 例程,當時面向物件程式設計還處於早期開發階段。基於當今的技術,OpenVOGEL 為氣動機械建模提供了新的視角。

限制和能力

[編輯 | 編輯原始碼]

正如我們將在本書的章節中看到的那樣,在軟體中實施的氣動方法對於解決某些問題非常強大,而對於其他問題則不足。限制具有不同的性質:由於複雜的幾何形狀,由於對真實物理的簡化表示,甚至由於有限的計算能力。軟體的限制將在描述軟體的不同模組時變得明顯。但是,我想對最重要的方面做一個簡短的總結。讓我從對模擬的含義的簡要描述開始。

模擬一個系統就是嘗試透過觀察模型的行為來預測它的行為,模型可以是一個物質物件或一組連結的演算法。用計算機演算法模擬系統顯然不像真實測試那樣,在真實測試中使用真實的流體,並且真實方程自然地被積分。在過去的三十年或更長時間裡,計算機模擬已經有了很大的改進,但仍然面臨限制。數值模擬的問題在於用有限的計算資源來處理代表系統行為的複雜數學問題。我們無法跟蹤流體中的所有分子,因為計算機中沒有足夠的儲存空間來做到這一點,因此問題需要簡化並濃縮在一個稱為離散化的過程中。

另一方面,真實模擬的問題在於,需要仔細調整和控制環境以匹配目標情況。即使使用相同的流體,真實模型也可能偏離目標情況。例如,考慮使用風洞測試飛機。首先,你需要一個與真實模型的形狀和粗糙度相匹配的飛機模型。然後你需要風洞,由於體積有限,風洞的行為與開放流體域不同。邊界層在壁面上形成,它們會引入在自由飛行中不會遇到的影響。此外,需要調整空速和靜壓以匹配雷諾數,這可能是一個挑戰。此外,如果流體在風洞入口處沒有得到很好的控制,可能會引入不真實或比例不合適的湍流。最後,你需要一個精確的儀器來測量氣動力。這僅僅是提到了眾多可能導致偏差的來源中的一小部分。

因此我們可以得出結論,模擬系統永遠不可能完全複製現實,無論使用何種方法,這始終是一個挑戰。這種方法可以準確地反映目標情況的某些方面,但同時無法預測其他方面。

可能在我們的案例中最重要的是要明確說明 OpenVOGEL 完全基於勢流理論。這是一種流體力學中的理想化模型。它不符合現實,但它簡化了問題的數學描述。出於許多原因,必須進行這種簡化。

勢流理論指出,當粘度為零(或在實踐中,當雷諾數趨於無窮大時),流動將變得無旋,隨後我們只需要用一個非穩態標量場的形式的勢函式來描述運動。速度變成該場的梯度,壓強透過著名的伯努利方程與速度的平方聯絡起來。這確實是一個美麗且易於理解的理論。然而,在勢流理論中沒有皮膚摩擦力,更不用說微觀湍流了。因此,你永遠無法得到關於邊界層如何行為的準確描述。你甚至看不到邊界層。我知道這聽起來很令人失望,但請不要停止閱讀,因為在實踐中,它能夠在短短幾分鐘內對主要的空氣動力提供非常好的預測。

其他 CFD 程式能夠求解 Navier-Stokes 方程,這帶來了一些優勢。例如,這些程式通常包括摩擦力和湍流模型。然而,這些程式背後的演算法要複雜得多,因為它們通常基於有限元或有限差分方法。它們需要更多的自由度和更復雜的幾何描述,因此需要更多的記憶體和 CPU 能力。它們還需要進行微調才能正常工作,通常透過修改控制引數來匹配真實模擬。因此,大多數設計師不會在飛機的早期設計階段使用它們,因為在早期設計階段需要快速比較不同的幾何配置。複雜的 CFD 程式更適合用於尖端技術的研發,因為在這些領域,準確性起著重要作用。所以你可能從這些想法中開始意識到使用簡單方法(例如我們將在此學習的方法)用於常見工程應用的重要性。

  1. 最初,名稱來自“渦量生成格點”(Vorticity Generated Lattice)的首字母縮略詞,但選擇“vogel”而不是“VGL”是因為它在荷蘭語中意為“鳥”(其中“v”發音為“f”)。
華夏公益教科書