数学とか語学とか楽しいよね

ドイツ語、ロシア語、オランダ語、英語、フランス語、ラテン語とか数学とか数値計算(有限要素法、有限体積法、差分法、C++コード付き)とか勉強したことをまとめます。右のカテゴリーから興味のある記事を探してください。最近はクラシックの名演も紹介しています。

【有限要素法】有限要素法のプログラミングを勉強するときにどの順序で学ぶのがよいか?【導入編】

有限要素法のプログラミングを勉強したいと思っている方はたくさんいると思います。私も最初はちんぷんかんぷんでした。Poisson方程式やら移流拡散方程式やらたくさん出てきます。有限要素法や数値計算の本を山ほど仕入れてきてうんうん唸っていました。そんな悪戦苦闘を通して、最近有限要素法がだんだんわかってきました。有限要素法を効率よく勉強するためには、以下の問題に対するプログラムを作成していくのが一番効率がよいと思います。


1次元Poisson方程式(1次元Laplace方程式でも可)

1次元定常移流拡散方程式

1次元非定常拡散方程式

1次元非定常移流拡散方程式

1次元非定常Burgers方程式

まずは1次元から始めるのがよいと思います。もちろん有限要素法が威力を発揮し始めるのは2次元以上ですがシンプルなものから勉強するべきです。

1次元Poisson方程式

そこで最初に1次元Poisson方程式を解くコードを作ります。これは拡散項のある定常問題を解けるようにするためです。ソース項のないLaplace方程式でも可です。ここで大規模な連立一次方程式の解法も学びます。私はGauss-Seidelを愛用していますが、Gaussの消去法も押さえておきましょう。TDMAでもokです。前者が反復法の代表で、後者が直接法の代表です。

1次元定常移流拡散方程式

この問題で拡散項と移流項が存在する定常問題の解き方を学びます。

1次元非定常拡散方程式

この問題では、拡散項だけが存在する非定常問題の解き方を学びます。陽解法、陰解法ともに作ります( \theta 法で離散化するとよいです)。

1次元非定常移流拡散方程式

次に非定常拡散方程式に移流項を足した問題の解き方を学びます。陽解法、陰解法ともに作ります。これが出来たら線型はもう大丈夫です。非線型問題を解くことは、線型問題を繰り返し解いていくのと同じなので線型問題が解けることは非常に重要です。

1次元非定常Burgers方程式

最後が1次元非定常Burgers方程式です。この問題では、非線型問題の解き方を学びます。Burgers方程式の場合は移流項が非線型項になります。将来Navier-Stokes方程式を解くときにも役立ちます。陽解法、陰解法ともに作ります。陰解法の場合は適当な反復法(Newton法とかPicard反復とか)が必要なのでそれも学びます。


導入なのでざっくりとしか書いていませんが流れはこんな感じです。このあとは風上化編に続きます(執筆中)。コードを書く際に参考になる文献の紹介や各問題の詳細な解説はまた別の記事でやります。

注 1次元移流方程式はリストに入れていませんが、これは風上化を導入した後に解くべきなのであとまわしになっています。