並行譜數值方法/概述
我們首先快速瞭解一下有限精度算術。然後,我們討論如何使用變數分離技術來求解常微分方程 (ODE) 和偏微分方程 (PDE)。然後,我們介紹可用於求解 ODE 和 PDE 的數值時間步長方案。接下來,我們透過概述離散傅立葉變換 (DFT) 和用於快速計算 DFT 的快速傅立葉變換 (FFT) 演算法來介紹偽譜方法。最後,我們將把所有這些結合起來,首先在序列設定中,然後在並行設定中求解幾個不同的 PDE。這些程式將使用 Matlab[1] 和 Fortran。我們還提供了一些 Matlab 程式的 Python 實現。
我們假設讀者具有入門程式設計經驗,例如使用 C、C++、Fortran、Matlab、Octave、Python 或等效語言。由於提供了詳細的程式設計示例,我們不期望讀者具備豐富的程式設計背景,但希望讀者在學習示例的過程中能夠獲得必要的知識。我們還假設讀者具有在要求嚴格的微積分課程中獲得的數學成熟度,例如 Courant 和 John 的《微積分與分析導論》[2][3]。微分方程課程也將有所幫助,但對於許多科學家或工程師來說,他們的興趣領域將提供許多這些方程的示例。更多程式設計經驗或數學背景將使材料更容易理解。對於那些瞭解正在近似逼近的偏微分方程解的行為的人來說,檢查模擬是否正確也可能更容易,但是我們已經嘗試選擇有代表性的微分方程,以便人們可以輕鬆地使用這些程式,然後將它們調整為正在考慮的使用方式。
這些程式已在多臺不同的計算機上進行了測試。這些程式位於程式目錄中,這些目錄對應於程式首次出現的章節。雖然它們沒有顯式超連結,但可以透過閱讀 LaTeX 原始碼或搜尋相應的目錄來找到它們的位置。
Matlab 程式保證可以在 Matlab R2011b 上執行,但也應該可以在 Matlab 的其他較新版本上執行。它們也應該很容易修改,以便它們可以在 Octave 上執行,Octave 可以從 www.gnu.org/software/octave/ 免費獲得。
由於 Matlab 需要許可證,因此對於那些不希望使用 Octave 的人,我們還包括了一些 Matlab 程式的 Python 版本。這些程式已在 Python 2.7 中進行了測試(可以從 https://python.club.tw/ 獲得),它們還需要 Matplotlib(版本 1.10,可以從 http://matplotlib.sourceforge.net/index.html 獲得)、Mayavi (http://github.enthought.com/mayavi/mayavi/index.html) 和 numpy (http://numpy.scipy.org/)。這些程式主要在 Enthought Python 發行版中進行了測試。
Fortran 程式主要在 GCC 4.6.2 編譯器套件中進行了測試,但它們應該可以在大多數其他較新編譯器中執行。如果使用依賴於特定編譯器的 MPI 實現,建議也使用 GCC 編譯器。我們預計這些程式應該可以在其他編譯器中進行少量修改後執行,但不能保證這一點。為了簡化並允許檢查程式的正確性,我們選擇使用低編譯器最佳化級別。我們鼓勵使用者在檢查程式在系統上正常執行後,提高編譯器最佳化級別和編譯器引數。為了執行這些程式,還需要 FFTW,這是一個免費的快速傅立葉變換庫。可以從 http://fftw.org/ 下載它。MPI 程式利用了 2DECOMP&FFT 庫,該庫可以從 http://www.2decomp.org 下載。最後,本教程的最後一部分需要使用免費的開源並行視覺化程式 VisIt,該程式可以從 https://wci.llnl.gov/codes/visit/home.html 獲得。如果您希望執行大型並行模擬(目前,大型模擬的指導原則是對於大於 10,000 核的系統,系統資源的 20%),那麼學習執行輸出和並行化的最有效系統設定可能很有意義。在本教程中,我們沒有討論這個問題,但建議您諮詢您的計算中心以獲取建議。
這些筆記中的材料可以作為短期課程的基礎。最重要的部分是第 1 章到第 11 章。然後可以從第 12 章、第 13 章和第 14 章中進行選擇。可以選取一些問題來評估學生的學習情況。請注意,第 8 章、第 12 章、第 13 章和第 14 章中的問題可能會發展成廣泛的研究專案,因此,如果學生解決問題的時間有限,那麼只應向學生提供這些問題的樣本。如果學生能夠執行示例 Matlab/Python、序列 Fortran、OpenMP Fortran 和 MPI Fortran 程式,並且還能夠修改它們來解決相關問題,那麼學生就成功地理解了這些材料。成功完成測試這些能力的問題將足以表明學生已經理解了基本概念。
- ↑ http://www.mathworks.com/products/matlab/index.html - 如果無法使用,我們建議修改 Matlab 程式以使用 Octave,可以從 http://www.gnu.org/ software/octave/ 免費下載。
- ↑ Courant 和 John (1998).
- ↑ Courant 和 John (1999),.
Courant, R.;John, F. (1998)。微積分與分析導論。卷。 I. Springer。
Courant, R.;John, F. (1999)。微積分與分析導論。卷。 II. Springer。