1. 程式人生 > >如何學習數值模擬(一)

如何學習數值模擬(一)

機械 這一 痛苦 討論 處的 ref 應用 計算機 就是

作者:www.liurg.org.

聲明:如轉載,請註明原文與出處。對應英文原文發表於多物理場模擬學習和交流的網站:www.multiphysics.us。文中主要觀點以及這些觀點更加準確和詳細的論述可在《Multiphysics in Porous Materials》一書中找到。如果需要引用(如學術論文),請引用這本書。書可以在出版商(Springer)的網站(https://www.springer.com/us/book/9783319930275)或者各高校圖書館中找到。

1. 概述

本文主要分享筆者在學習和教授數值模擬過程中總結的經驗,適用於土木和機械當中常用的有限元、應用數學和眾工程學科中都常涉及的有限差分法、工程和地球物理中被常常討論到的有限體積法、甚至還包括很多無網格法,以及近十多年來在數值模擬領域大熱的多物理場(中文又譯為多場耦合)等。這些概念,包括他們內部很多概念如伽遼金法,離散格式,和具體的有限元工具等二級概念,很多時候被與數值模擬混用或在某一領域內視作數值模擬的主要內容,導致數值模擬在普通人眼中或如洪水猛獸或遙不可及,在初學者眼中更如霧裏看花,一團亂麻。哪怕對於從事數值模擬多年的學者,依然會有難識廬山真面目的感嘆。本文的目的是想與大家分享一幅數值模擬的全景畫卷和一個簡單和透徹的理解這一領域的獨特視角,以及一些需要用多年困惑、掙紮, 和無用功換取的經驗之談。

2. 數值模擬的各種概念

首先,數值模擬是一門綜合了數學、物理、工程應用,和數值分析的藝術。這一理解對於數值模擬的分支如多物理場等依然適用。

此處的數學主要指偏微分方程,張量分析,泛函分析等;這些數學內容提供了描述數值模擬所用來分析和解決的各種問題的語言:他們可以被用來方便而準確描述一個問題,甚至為這些問題的解決提供便利。如果你不認識偏微分方程,你就很難理解和表述一個應用問題背後的實質:物理現象和物理機制。熟練掌握這些數學語言,對於深入理解數值分析並進而在這一領域登堂入室是有著絕對的意義的。

物理在早期的數值模擬中往往被忽視。因為我們往往傾向於認為我們眼中的世界即是世界的全部。尤其是在早年的數值模擬實踐中,尤其的工程學科中的,數值模擬總是在各個學科中獨立而割裂地進行的。以筆者為例,我一開始所認知的數值模擬就是結構和土體中(主要涉及固體力學)的力學分析。我所接觸到的軟件如Abaqus和Ansys在當時似乎也都是以這些為主;同樣,所接觸到的書籍,不論是涉及數學的泛函分析還是涉及數值分析的有限單元法,無一不是以力學分析為例子。想必在此時,那些土木,機械和地球物理中從事流體相關眼中數值模擬肯定是另一個世界吧:納維斯托克斯方程,湍流模型和有限體積法。從後來物理場的觀點,之所以有以上區別,主要是不同學科和領域所涉及的主要物理過程不一樣,這些物理上的差異同樣帶來了數學,工程應用和數值分析方法上的不同。隨著交叉學科和工業合作的趨勢,物理在數值分析中的作用更加被強化,這也是多物理場成為數值模擬的一個熱門方向和趨勢的原因。

工程應用是數值模擬發展的一個核心動力。我們想準確知道結構和機械部件在外力下如何變形,我們需要預測空氣和水如何流動,我們需要理解電磁波怎麽傳播,諸如此類的需求促進著數值模擬的不斷發展,因此是動力。另一方面,不斷被突破的計算機技術使得更復雜的計算方法和技術成為可能。這也是為什麽工程應用需求與理論很多都已存在幾百年,而數值模擬才在計算機出現後的近幾十年成為改變人類社會和各工程學科發展的一個重要力量的原因。此外,不斷湧現的應用需求和被刷新的計算能力也反過來促進了工程應用理論和數值分析方法的進步和突破。但同時應當被提及的是,所需的數學語言早已成熟,其所經歷的變化主要是這些數學語言與物理,工程應用和數值分析的更好的融合,使我們的數值模擬所需的描述更加簡潔、準確、通用,和強大。

數值分析也就是指我們有限單元法,有限差分法和有限體積法等。一個常見的誤區是很多初學者經常把某一種方法看做數值模擬的全部。事實上,這些方法只是提供了將工程應用問題的背後的物理機制的數學描述進行離散化的途徑。之所以需要離散化,因為數學描述往往通過張量、偏微分方程,和一般數學函數來進行,因此描述在空間和時間上是連續的。比如,一個拉普拉斯等式就描述了能量在空間中的穩態分布;這個方程的解,也就是一個連續函數,就是空間中每一個無限小的點的能量值。然而,一般的工程應用中都涉及比較復雜的邊界條件、初始條件,和材料性質,這就使得求解這些建立在連續場的數學描述中的問題變得非常困難。於是,一個常用的方法就是講這些連續的方程離散化,於是我們就可以得到一個代數方程A*X=B。其中,數組X就是數學描述中的物理場量(也是數學中的因變量和未知數)在離散的點上的值。以上所提及的三種方法就提供講連續的數學描述轉化那個代數方程的方式。事實上,我們有更多的離散方法可供選擇,所有這些方法都是各有特色,各有所長,並因此應用在不用領域和問題上。

綜上所述,數值分析要求我們首先從工程應用中找到待分析和解決的問題,然後需要找出這些問題背後決定性的物理機制或現象,接著用數學將這些機制和現象描述出來,最後選取合適的數值分析方法將問題求解出來。市面上的數值模擬的學習材料很少囊括所有以上內容。常見的情況是大多數初學者都是從介紹相關模擬軟件或者某種數值分析方法的書籍開始學習數值模擬。從軟件開始的話,我們往往只能得到關於數值模擬的非常瑣碎和片面的內容,甚至將某個軟件的特色內容誇大為數值模擬的一個主要部分,尤其是,各種酷炫模擬操作之後的理論和理解都變成了黑匣子裏的內容。如果只是如此,我們很難談得上在數值模擬上入門,因為你既不知道你的操作和模型的是否正確(因為你不了解各種操作的數學和物理意義),也很難了解數值模擬的全景。另一個常見的情況是初學者從某類的數值分析方法的書籍,如有限單元法,開始學習。你可能會發現一上來就是變分法或者裏茲法等對初學者來說晦澀難懂的難容,然後就是各種未經解釋的偏微分方程、物理量,和術語,以及非常局限於某一領域的問題等。這種同樣會讓學習變得比較痛苦和狹隘。而且,你會發現書上的知識並非都是同等重要的,有可能對你而言,真正能用得上也就是很小一部分,因為你的目標很大可能不是去成為一個有限元理論或者編程的專家。

在接下來的內容中,我將分享我認為的數值分析的實質,也就是,數值分析到底做了怎麽一件事情。你會發現,原來這麽簡單。

如何學習數值模擬(一)